pvbrowser, pvb® - The Process Visualiation Browser.

  • English
  • Deutsch

Using pvbrowser

Using pvbrowser is similar to using a web browser. It depends on the developer of a visualization how comfortable the use for the end user is. The end user may only want to make some adjustments in the ini file of pvbrowser by choosing menu File->Options.

Developing a pvserver

For developing a pvserver for process visualization you need some programming skills. For C/C++ we assume some knowledge in ANSI C. Programming in Lua might be easier if you lack these skills.

In case you do not know programming, here you can find a short programming course in german

How pvbrowser, pvb® looks like


Available widgets and dialogs

The following widgets and dialogs are available in pvbrowser. Widgets can be designed in pvdevelop and/or Qt Designer.

// names in 
// pvdevelop   : Qt library     : 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 --------------------------------------------------------------------------------------

Hints for creating robust SCADA systems

Suggestion 1:

Create a hierarchic system with islands on the lower level that are not connected to wide area networks. These islands can represent an RTU each to the outer world. Now you connect the RTU to the outer world by the means of a serial line (Like RS232 or RS485). Thus the connection to the outer world will not be vulnerable by malware. You might use a proxy that converts TCP / serial line back and forth for communicating over longer distances but keep in mind to use a serial line within the communication chain. There might be several serial line connections to the island in order to implement redundancy. An example for connecting the RTU might use Modbus RTU.

Suggestion 2:

Imagine a dog and his master implemented as UDP protocol. The dog will only follow instructions from his master (fixed IP address). All instructions from others will be ignored and the master will be informed about such intrusions. If something happens (e.g. change of measurement value) the dog will report it to the master (UDP telegram to fixed master IP address). If the master wants the dog to take actions (e.g. output setpoint values) he will send a command to the dog (UDP telegram). Dog and master will be living within a local area network (mask Dog and master may talk bidirectional without prior request.

Suggestion 3:

Make each SCADA solution an individual. This can be achieved by using frameworks (e.g. pvbrowser) / libraries and employing staff who knows programming in the same language the frameworks / libraries are implemented.

Suggestion 4:

Make your SCADA solution a CSP (communicating sequential process) that uses threads and communication. (My Credits to Occam and Transputers)