Wir präsentieren eine Open Source Prozessvisualisierung, HMI und SCADA. Aus Sicht des Benutzers arbeitet sie fast wie ein Web Browser. Da pvbrowser Qt benutzt, ist er auf vielen Plattformen lauffähig. Falls Sie eine Prozessvisualisierung mit pvbrowser erstellen möchten, sollten Sie grundlegende Kenntnisse in ANSI-C haben.
Viele Leute denken, dass Prozessvisualisierungen graphisch erzeugt werden sollten. Dies ist für das Layout der Bildschirmmasken richtig. Aber die Programmierung der Logik einer Visualisierung ist viel leistungsfähiger und flexibel.
Beachten Sie, dass heute viele Webseiten in PHP programmiert werden. Programmiererfahrung ist also auch zur Erstellung von Webseiten erforderlich.
Wenn Sie eine Visualisierung mit pvbrowser erstellen möchten, müssen Sie einen pvserver programmieren. Dies wird mit Hilfe von pvdevelop gemacht. Die Programmierung ist vergleichsweise einfach, weil nur einfache ANSI-C Möglichkeiten genutzt werden. Aber Sie sind nicht auf ANSI-C eingeschränkt. Sie können ebenfalls C++ nutzen und auch Fremdbibliotheken in pvserver einbinden, die in C/C++ geschrieben sind.
Die „optimale“ Prozessvisualisierung würde in einem Standard Webbrowser laufen. In diesem Falle, müsste keine Zusatzsoftware auf den Client Computern der Benutzer installiert werden, weil Webbrowser heute Standard sind. Unglücklicherweise sind Webbrowser nicht für Prozessvisualisierungen erstellt worden. Im Prinzip liest ein Webbrowser HTML Dateien vom Server und stellt deren Inhalt dar. Jedes mal, wenn auf eine Webseite zugegriffen wird, öffnet der Browser eine Netzwerkverbindung und schließt sie wieder. Dynamische Änderungen des Inhaltes sind daher schwierig und ineffizient.
Java Applets könnten eine Lösung sein. Leider benötigen komplexe Java Applets aber lange, um zu laden. Außerdem sind Java Applets auch nicht dafür bekannt, schnell zu sein. Wir haben daher einen neuartigen Browser in C++ erstellt, der für Prozessvisualisierungen optimiert ist. Anstatt HTML Dateien darzustellen, werden Qt Widgets dynamisch dargestellt.
Da pvbrowser ein Browser ist, kann er beliebige Visualisierungen darstellen. Die Client Computer brauchen nicht angepasst werden, wenn Sie Ihre Visualisierung modifizieren. Dies steht im Gegensatz zu dem „fat Client“ Modell, das von konventionellen Visualisierungssystemen benutzt wird. Darüber hinaus unterstützt pvbrowser mehrere Plattformen simultan.
Wenn Sie die URL eines pvserver aus pvbrowser heraus auswählen, wird eine TCP Netzwerkverbindung geöffnet. Die Verbindung bleibt bestehen, bis Sie die Sitzung beenden. Nachdem Sie die Verbindung geöffnet haben, beginnt pvserver damit, Kommandos zum pvbrowser zu senden. Jedes Kommando besteht aus einem Text, der mit einem Zeilenvorschub abgeschlossen ist. pvbrowser interpretiert den Text und ruft die entsprechenden Funktionen der Qt Widget Bibliothek auf. Damit handhabt pvserver den gesamten Widget Baum im Fenster von pvbrowser. Wenn der Benutzer ein Ereignis auslöst (z.B. Drücken eines Schalters), wird eine Zeile Text von pvbrowser an pvserver geschickt. In pvserver ist eine Ereignisschleife enthalten, worin diese Ereignisse behandelt werden.
Zur Programmierung innerhalb von pvserver steht eine Bibliothek zur Verfügung, die die Texte, die zu pvbrowser geschickt werden kapselt. Die Referenz dieser Bibliothek ist unter „pvslib“ in dieser Hilfe zu finden.
Ein wesentlicher Teil eines pvserver wird nicht manuell geschrieben, sondern wird von pvdevelop generiert und verwaltet. Die von der Bibliothek angebotenen Funktionen können aus einem Menu in pvdevelop eingefügt werden.
Das gesamte Layout der Bildschirmmasken, die in Ihrer Visualisierung verwendet werden, kann mit dem integrierten Designer erstellt werden.
Falls Sie weitergehende Fragen haben, nachdem Sie diese Hilfe gelesen haben, scheuen Sie sich nicht unter mailto:lehrig@t-online.de?subject=pvserver further questions . mit uns Kontakt aufzunehmen.
Wir wünschen Ihnen viel Spaß bei der Verwendung von pvbrowser.
Sie können aus dem pvb.tar.gz Paket heraus installieren. Sowohl der Quelltext als auch die ausführbaren Programme und die verwendeten Bibliotheken sind enthalten.
Installieren Sie mit folgenden Kommandos unter Linux:
“download” pvb.tar.gz tar -zxf pvb.tar.gz cd pvb ./clean.sh ./build.sh su ./install.sh exit
Windows Benutzer können install-pvbrowser.exe von unserer Download Seite verwenden.
Für Mac Benutzer steht ein DMG mit dem pvbrowser Clienten auf unsere Download Seite zur Verfügung. Wenn Sie das komplette Entwicklungssystem haben möchten, müssen Sie es wie oben beschrieben übersetzen.
Es gibt einen Demo pvserver, der in dem Installationspaket enthalten ist. Wechseln Sie in das entsprechende Verzeichnis und starten den Demo Server.
cd /opt/pvb/pvsexample ./pvsexample
Innerhalb der Konsole meldet sich der Demo pvserver mit folgender Meldung:
Info: going to accept on port 5050
Dies bedeutet, dass der Server auf Klienten auf seinem Standard Port 5050 wartet. Momentan läuft der Server im Vordergrund. Wie man ihn im Hintergrund startet, wird später beschrieben.
pvserver kennt einige Kommandozeilen Optionen.
lehrig@nb3lehrig:/opt/pvb/pvserver> ./processview -h ProcessViewServer 2.9 (C) by R. Lehrig 2000-2005 lehrig@t-online.de usage: ProcessViewServer -port=5050 -sleep=500 -cd=/working/directory default: -port=5050 -sleep=500 milliseconds -cd=/working/directory
Nachdem der Demo Server läuft, können Sie pvbrowser starten.
Linux:
pvbrowser
Windows:
.\pvb\win-mingw\bin\pvbrowser.exe
pvbrowser wird sich mit seinen als Standard eingestellten pvserver auf dem lokalen Rechner verbinden. Innerhalb des Fensters sehen Sie die einfache Demo Visualisierung. Das Demo dient im wesentlichen zur Demonstration der verfügbaren Widgets. Experimentieren Sie einfach etwas mit der Demo. Sehen Sie auch nach „File->Options“. Hier können Sie einige Einstellungen zu pvbrowser machen. Beachten Sie bitte, dass einige Optionen sich erst nach einem Neustart vom pvbrowser auswirken.
pvdevelop ist eine IDE zur Erstellung von pvserver. Es stützt sich auf einige externe Kommandos. Dies sind:
Linux:
qmake g++ make
Bevor Sie pvdevelop starten, vergewissern Sie sich, dass diese Kommandos verfügbar sind. Eventuell müssen Sie das Qt Entwicklungspaket installieren und qmake nach /usr/local/bin verlinken.
Windows:
Qt mit qmake MinGW
Bevor Sie pvdevelop starten, vergewissern Sie sich, dass Qt und MinGW installiert sind. In dem bin Verzeichnis, gibt es einige Batch Dateien, die Sie editieren können, um diese Werkzeuge zu verwenden oder sogar einen anderen C++ Compiler einzusetzen.
Nun starten Sie pvdevelop. Wählen Sie „File->New pvserver“. Innerhalb der erscheinenden Dialogbox wählen Sie ein leeres Verzeichnis für Ihr Projekt. standardmäßig wird das neue Projekt „pvs“ genannt. Dies können Sie ändern und auf OK Klicken.
Nun wird der designer von pvdevelop angezeigt und Sie können Ihre erste Bildschirmmaske erstellen. Klicken Sie auf die Rechte Maustaste. Sie können vom Designer Modus auf den Test Modus umschalten indem Sie „release mouse“ und „grab mouse“ verwenden. Um die einzelnen Tabs eine TabWidget umschalten zu können, müssen Sie ebenfalls vom Designer Modus auf den Test Modus umschalten.
Sie sollten zunächst xGrid und yGrid unter „File->Options“ einstellen. Dies definiert, in welchen Schritten graphische Eingaben von Widgets erfolgen.
Innerhalb des Designers verwenden Sie immer das Popup Menu über die Rechte Maustaste. Nun können Sie Widgets einfügen. Einige Parameter können über den „Properties“ Dialog geändert werden.
Wenn Sie Ihr Design fertiggestellt haben, speichern Sie die Maske und schalten zum Editor zurück.
Nun können Sie „Action->StartServer“ und dann „Action->pvbrowser“ benutzen, um Ihre ersten pvserver zu starten.
Nachdem Sie eine neue Visualisierung erzeugt haben, können Sie den generierten Code innerhalb von pvdevelop sehen. Bitte stöbern Sie etwas in dem Code herum, um ihn zu verstehen. Es gibt 1 Projekt Datei, 1 Main Modul, 1 Headerfile und momentan 1 Bildschirmmaske.
Der meiste Code wird von pvdevelop verwaltet. Ihre Aufgabe ist es, die so genannten „slot“ Funktionen auszufüllen.
Die Referenz zur Programmierung kann unter “Help->Manual->pvslib” innerhalb von pvdevelop gefunden werden. Alle Funktionen haben einen „PARAM *p“ als ersten Parameter. In dieser Struktur hält pvserver einige wichtige Informationen. Die wichtigste Information ist p->s, was den Socket angibt, der zur Kommunikation mit dem Klienten verwendet wird. Die meisten der angebotenen Funktionen, werden einfach einen mit Zeilenvorschub abgeschlossenen Text an pvbrowser senden. pvbrowser interpretiert den Text und ruft die entsprechenden Methoden aus der Qt Bibliothek auf.
Beispiel:
pvPrintf(p, label1, ”Hello world. This is call number %d”, call_number++);
Alle Widgets, die Sie in dem Designer eingeben, werden in dem enum in der generierten Maske aufgeführt. Angenommen Sie haben ein Label „label1“ eingegeben. Dann können Sie auf dem Label einen Text mit der oben aufgeführten Funktion ausgeben. Die meisten in der Referenz angegebenen Funktionen arbeiten nach diesem Prinzip.
Die am meisten verwendeten Ausgabe Funktionen können aus pvdevelop eingefügt werden, indem Sie aus der „Widget Name“ ToolBox auf einen Namen klicken.
Innerhalb der „Slots“ können Sie Ihren Code eingeben. Beispielsweise wählen Sie aus der „Widget Name“ ToolBox einen Namen und klicken auf einen der RadioButtons und anschießend Insert.
In dem obigen Beispiel terminieren wir die aktuelle Maske und kehren in pvMain() zurück, um eine andere Bildschirmmaske anzuzeigen.
Grafiken können mit unterschiedlichen Methoden erstellt werden. Bitte sehen Sie sich „Solutions“ in unserer Dokumentation auf http://pvbrowser.org an. Sie können diese Lösungen einfach mit Copy&Paste in Ihren Code übernehmen und ihn an Ihre Bedürfnisse anpassen.
Mit „Draw/SVG“ können XY-Plots, einfache Grafiken und SVG Grafiken erstellt werden. Mit „QwtPlot“ können Sie ausgefeiltere XY-Plots erzeugen.
Sie können aber auch externe Plot Werkzeuge, wie z.B. GNUplot einbinden.
Bitmap Grafiken werden mit „Image“ eingefügt. Setzen Sie die whatsThis Eigenschaft gleich dem Dateinamen der Grafik, um die Grafik im Designer anzuzeigen.
Tabellen sind eine leistungsfähige Methode, um tabellarische Daten darzustellen und zu editieren. Eine einfache Funktion für den Zugriff auf eine Tabelle wird als Beispiel angeführt.
pvTablePrintf(p, table1, x, y, "this is the cell text");
Für mehr Informationen sehen Sie sich “Modules->construction->pvQTable” in der pvslib Referenz an.
Aus pvserver heraus können Sie beliebige externe Bibliotheken nutzen, die in C/C++ geschrieben sind. Damit können Sie auf Ihre Hardware zugreifen. Solch eine Bibliothek ist rllib, die in C++ geschrieben ist. Der Code zum Zugriff auf Modbus und Siemens SPS ist darin schon enthalten. Um rllib zu nutzen, brauchen Sie die Bibliothek nur aus pvdevelop heraus den Kommentar entfernen. Der Zugriff auf Modbus wird unten dargestellt.
val = modbus.readBit(offset,number);
Für mehr Informationen sehen Sie sich unsere online Dokumentation an.
Standardmäßig ist pvserver ein multithreaded Server. Für jeden Klienten, der sich verbindet, wird ein neuer Thread gestartet. pvserver soll beim Booten Ihres Computers gestartet werden. Innerhalb der Dokumentation wird diese Prozedur näher beschrieben. Das Vorgehen unterscheidet sich je nach Betriebssystem.
Alternativ können Sie pvserver über xinetd starten. In diesem Fall müssen Sie „DEFINES += USE_INETD“ in der Projektdatei entkommentieren und libpvsid.so anstatt libpvsmt.so nutzen. Anschließend muss das Projekt neu übersetzt werden.
pcontrol ist ein über einen separaten Download verfügbar. Es stellt einen „Event Log“ und eine Methode zur Kontrolle Ihrer Hintergrundprozesse zur Verfügung. Mit pcontrol können Sie komfortabel Event Log Botschaften Ihrer Hintergrundprozesse zu einer zentralen Instanz schicken. Ebenso können Sie alle Hintergrundprozesse, aus denen Ihre Automation besteht über pcontrol starten und überwachen. Dies könnten beispielsweise Ihre pvserver, daemons, Feldbus Zugriffe oder SPS Zugriffe sein.
Sie sollten nun mit der prinzipiellen Struktur der pvserver Entwicklung vertraut sein. Bitte lesen Sie das online Manual für weiterführende Informationen.
In „Solutions“ in unserer Dokumentation kann man interessante Code Sequenzen finden, die Sie per Copy&Paste in Ihre Applikationen übernehmen können.
pvbrowser arbeitet mit Widgets (Schalter, Label, Tabellen ...). Die Funktionen zur Konstuktion eines solchen Widgets werden automatisch durch pvdevelop erzeugt. Die Beschreibung dieser Konstruktoren findet man unter „Help->Manual->pvslib->Modules->construction“.
Bitte sehen Sie sich diese Stelle genauer an. Sie finden dort alle Funktionen, die sich auf die Programmierung eines Widgets beziehen.
Wir freuen uns immer über Rückmeldungen und wünschen Ihnen,
viel Spaß bei der Verwendung von pvbrowser.
Ihre pvbrowser Community.