pvbrowser
pvbrowser ähnelt einem Webbrowser. Es hängt von dem Entwickler einer Visualisierung ab, wie komfortabel die Benutzung für den Endanwender ist. Der Endbenutzer wird wahrscheinlich nur einige Anpassungen in der ini-Datei von pvbrowser machen, indem Er das Menu Datei->Optionen wählt.
Entwicklung eines pvserver
Für die Entwicklung eines pvserver zur Prozessvisualisierung müssen grundlegende Programmierkenntnisse vorhanden sein. Für C/C++ setzen wir Kenntnisse in ANSI-C voraus. Lua könnte einfacher sein als C/C++ .
Für den Fall, dass Sie noch nicht programmieren können, finden Sie hier einen kleinen C/C++ Programmierkurs.
Wie sich pvbrowser, pvb® darstellt.
Verfügbare Widgets und Dialoge
Die folgenden Widgets und Dialoge sind in pvbrowser verfügbar. Die Widgets können in pvdevelop oder Qt Designer eingegeben werden.
// Name in // pvdevelop : Qt Bibliothek : Qt Designer // widgets from qt ------------------------------------------------------------------------------ PushButton : QPushButton : Buttons - Push Button RadioButton : QRadioButton : Buttons - Radio Button CheckBox : QCheckBox : Buttons - Check Box Label : QLabel : Display Widgets - Label LineEdit : QLineEdit : Input Widgets - Line Edit ComboBox : QComboBox : Input Widgets - Combo Box Table : QTableWidget : Item Widgets (Item-Based) - Table Widget DateEdit : QDateEdit : Input Widgets - Date Edit TimeEdit : QTimeEdit : Input Widgets - Time Edit DateTimeEdit : QDateTimeEdit : Input Widgets - Date/Time Edit TextBrowser : QWebView : Display Widgets - Text Browser // any web page ListView : QTreeWidget : not available from Qt Designer Qt4 (fixed in pvbrowser 4.5.8) IconView : QListWidget : use Pvb Widgets - PvbIconview ListBox : QListWidget : Item Widgets (Item-Based) - List Widget TabWidget : QTabWidget : Containers - Tab Widget GroupBox : QGroupBox : Containers - Group Box Frame : QFrame : Containers - Frame MultiLineEdit : QTextEdit : Input Widgets - Text Edit SpinBox : QSpinBox : Input Widgets - Spin Box Slider : QSlider : Input Widgets - Horizontal/Vertical Slider LCDNumber : QLCDNumber : Display Widgets - LCD Number Dial : QDial : Input Widgets - Dial ProgressBar : QProgressBar : Display Widgets - Progress Bar ToolBox : QToolBox : Containers - Group Box // widgets from pvb plugin ---------------------------------------------------------------------- : Pvb Widgets - PvbIconview Draw/SVG : Pvb Widgets - PvbDraw // xy-graphics + SVG Image : Pvb Widgets - PvbImage // bitmap graphics OpenGL : pvb Widgets - PvbOpengl // OpenGL output VTK : pvb Widgets - PvbVtk // VTK toolkit // widgets from qwt plugin ---------------------------------------------------------------------- QwtPlot : Qwt Widgets - QwtPlot // xy-graphics QwtKnob : Qwt Widgets - QwtKnob QwtCounter : Qwt Widgets - Qwt Counter QwtThermo : Qwt Widgets - QwtThermo QwtAnalogClock : Qwt Widgets - QwtAnalogClock QwtSlider : Qwt Widgets - QwtSlider QwtWheel : Qwt Widgets - QwtWheel QwtCompass : Qwt Widgets - QwtCompass QwtDial : Qwt Widgets - QwtDial // analog instruments // dialogs -------------------------------------------------------------------------------------- MessageBox InputDialog FileDialog ModalDialog DockWidget PopupMenu
Tipps zum Erstellen von robusten SCADA Systemen
Tipp 1:
Man baue ein hierarchisches System mit Inseln auf der unteren Ebene, die nicht mit einen WAN (wide area network) verbunden sind. Diese Inseln können nach außen ein RTU (remote terminal unit) darstellen. Nun kann man die RTU über eine serielle Schnittstelle (z.B. RS232 oder RS485) mit der Außenwelt verbinden. Dadurch kann man erreichen, dass die Verbindung nicht von Schadsoftware genutzt werden kann. Man könnte einen Stellvertreter (Proxy) nutzen, der TCP / serielle Schnittstelle hin- und her-verbindet, um längere Distanzen zu überbrücken. Aber man achte darauf, eine serielle Schnittstelle in der Kommunikationskette zu haben. Es könnten mehrere serielle Verbindungen zu der Insel existieren, um Redundanz zu implementieren. Beispielsweise könnte man Modbus RTU als serielles Protokoll nutzen.
Tipp 2:
Man stelle sich einen Hund und sein Herrchen vor, was man als UDP Protokoll nachbilden möchte. Der Hund wird nur auf Befehle seines Herrchens Folge leisten (feste IP Adresse). Alle Befehle von Anderen werden ignoriert und dem Herrchen angezeigt. Falls etwas passiert (z.B. Änderung eines Meßwertes) wird das an das Herrchen gemeldet (UDP Telegramm an feste IP Adresse). Falls das Herrchen möchte, dass der Hund etwas ausführt (z.B. Stellwert ausgeben) wird er Ihm einen Befehl geben (UDP Telegramm). Hund und Herrchen leben in einem LAN (local area network) (Maske 255.255.255.0). Hund und Herrchen können bidirektional kommunizieren, ohne vorher nachzufragen.
Tipp 3:
Man mache jedes SCADA System ein Individuum. Dies kann erreicht werden, indem Fachwerkgerüste und Bibliotheken (z.B. pvbrowser) genutzt werden und indem man Mitarbeiter beschäftigt, die in der Lage sind, in den Sprachen zu sprechen, in denen die Fachwerkgerüste und Bibliotheken gemacht wurden.
Tipp 4:
Man mache aus jeder SCADA Lösung einen CSP (communicating sequential process) welcher Thread und Kommunikationskanäle verwendet. (Meine Reminiszenz an Occam und Transputer)