CtrlExtension
Um das CONTROL um eigene in C++ geschriebene Funktionen zu erweitern, wird eine CtrlExtension geschrieben, die eine Ableitung der Klasse BaseExternHdl implementiert.
Bitte beachten Sie die Anforderungen für die API Entwicklung wenn Sie eigene Komponenten erstellen.
Erlaubte Klassen und Libraries
Für die Implementierung dieser eigenen CONTROL-Funktionen dürfen alle nicht WinCC OA Libraries, sowie alle Klassen folgender Libraries verwendet werden. Das betrifft:
-
bcm.dll oder .so (Linux)
-
libBasics.dll oder .so (Linux)
-
libConfigs.dll oder .so (Linux)
-
libDatapoint.dll oder .so (Linux)
-
libMessages.dll oder .so (Linux)
-
libManager.dll oder .so (Linux)
-
libCtrl.dll oder .so (Linux)
-
libV24.lib oder .a (Linux)
Diese Libraries sind Teile der WinCC OA API-Schnittstelle.
Verbotene Klassen und Libraries
Ebenso sind die Libraries
-
libComDrv.lib oder .a (Linux)
in der API-Schnittstelle enthalten. Sie dürfen aber nicht verwendet werden.
Laden einer CtrlExtension
Über das Schlüsselwort #uses kann in Panels und Scripts vorgegeben werden, welche CtrlExtensions benötigt werden. Damit müssen die CtrlExtensions nicht mehr in Config-Datei eingetragen werden. Das erleichtert die Anwendung von CtrlExtensions und die CtrlExtension werden erst dann, wenn sie gebraucht werden, geladen. Welche CtrlExtensions ein Manager laden soll, kann auch durch Einträge in die config.level-Datei festgelegt werden. Wir empfehlen jedoch das Schlüsselwort #uses zu verwenden. Wie Sie das Schlüsselwort #uses verwenden oder wie Sie durch die Einträge in der config.level-Datei festlegen, welche CtrlExtensions geladen werden sollen, wird im Folgenden näher beschrieben.
Die Treiber-Plugins, die unter Linux mit CtrlADO verwendet werden, wurden für QT4 umbenannt: QMYSQL3 -> QMYSQL (für MySQL 4 und höher) QOCI8 -> QOCI (für Oracle 9i, 10g und höher)
Die Bibliotheken werden zuerst in der lokalen Installation gesucht.
Laden einer CtrlExtension über Schlüsselwort #uses
Über das Schlüsselwort #uses definieren Sie, welche CtrlExtension ein Panel oder ein Skript benötigt. Die Dateiendung kann weggelassen werden, da sie automatisch abhängig vom Betriebssystem gesetzt wird.
#uses "CtrlADO"
Die im Skript oder Panel angegebenen CtrlExtensions gelten nicht nur im Skript sondern Managerweit und bleiben im Speicher bis der Manager beendet wird. Die CtrlExtensions werden von dem CTRL-Kern in den Speicher geladen. Das Schlüsselwort kann in jedem Skript vor den Funktionen und in Panel-globalen Funktionen verwendet werden. Es können beliebig viele #uses-Definitionen in Skripts und Panels vorhanden sein. Beachten Sie, dass das Aufschalten von Panels unter Umständen ein wenig länger dauern kann, wenn eine oder mehrere sehr große CtrlExtensions das erste Mal geladen werden.
Beachten Sie, dass "uses" ein Schlüsselwort ist und deshalb nicht als Variablenname verwendet werden darf.
Laden einer CtrlExtension über Einträge in der Config-level-Datei
Damit die CtrlExtension von einem Manager geladen wird, muss sie
-
ins bin Verzeichnis des WinCC OA Projektes kopiert werden,
-
ist ein Eintrag in der
config.level
Datei notwendig.
CtrlExtensions werden folgendermaßen gesucht:
-
Zuerst wird der angegebene Name versucht.
-
Dann mit verschiedenen Erweiterungen: ".dll" oder ".so"
-
Dann noch mit dem "lib" Präfix, also:
"lib" + Eintrag + ".dll"
"lib" + Eintrag + ".so"
Wir empfehlen, eine CONTROL Extension ohne Filename extension im #uses Statement anzugeben, da damit das Script plattformneutral gehalten wird und ohne Veränderungen auf allen Plattformen ausgeführt werden kann. Bei einer Angabe mit Extension z.B. "CtrlADO.dll" würde diese CONTROL Extension unter Linux nicht gefunden, da diese dort CtrlADO.so heißt. Es ist besser #uses "CtrlADO" zu verwenden.
Beispiel
Unter Windows kann mit dem Config-Eintrag:
CtrlDLL = "CtrlADO"
eine DLL geladen werden. Diese DLL wird zunächst im <proj_path>/bin gesucht. Wenn sie dort nicht existiert, wird sie in <wincc_oa_path>/bin gesucht.
Dieser Eintrag kann nur in der [ui] oder der [ctrl] Sektion erfolgen. Soll eine DLL von UI und CTRL verwendet werden, muss sie in beiden Sektionen eingetragen werden. Es können beliebig viele DLLs geladen werden.
Beispiel einer CTRLExtension
Ein Beispiel für eine CTRLExtension findet sich im Installationsverzeichnis von WinCC OA unter /api/TemplateCtrlExt. Bitte beachten Sie die README-Datei!