Control-Manager (Runtime-Scripts)

Neben dem User-Interface können in der Control-Sprache erstellte Scripts auch eigenständig ohne Bezug zur grafischen Oberfläche in einem eigenen Manager ablaufen. Bis auf die Zugriffsfunktionen auf Grafikattribute sowie Panelfunktionen, werden weitestgehend die gleichen Möglichkeiten geboten. Die Kommunikation mit anderen WinCC OA Managern erfolgt dabei im Normalfall über Datenpunktelemente (Prozessabbild).

Diese Scripts werden in Form von ASCII-Dateien im.../scripts/-Verzeichnis des jeweiligen Projekts bzw. der Projekthierarchie abgelegt. Das vorliegende GettingStarted-Projekt verwendet zwei derartige Laufzeitscripts für die Simulation der Geräte-Reaktionen und des physikalischen Modells.

Abbildung 1. Projekt mit Laufzeitscripts

Diese können mit einem ASCII-Editor geöffnet und ihre Funktionsweise nachvollzogen werden. Bei Installation im vorgesehenen Verzeichnis finden Sie die Dateien unter:

C:/WinCC_OA_Proj/GettingStarted_3.18/scripts/simDevices.ctl

C:/WinCC_OA_Proj/GettingStarted_3.18/scripts/simModel.ctl

Eine, als Laufzeit-Script zur Abarbeitung in einem Control-Manager definierte, Datei (*.ctl) beinhaltet zumindest ein main()-Programm. Dieses besteht im Allgemeinen aus einer ganzen Reihe von ereignisorientierten Abarbeitungsvorschriften (dpConnect() mit zugehörigen Call-Back-Funktionen). Darüber hinaus können selbstverständlich auch periodische Vorgänge (while- oder do-Konstrukt mit Schleifenverzögerung) integriert sein.

Anmerkung:

Besteht ein Laufzeit-Script lediglich aus einer Folge von Anweisungen ohne die Verwendung von Anmeldungen (dpConnect(), dpQueryConnect()...) und ohne Endlos-Schleife, so wird die Bearbeitung nach der letzten Anweisung beendet. Handelt es sich um das einzige Script, das in dem betreffenden Control-Manager läuft, so beendet sich anschließend auch der Manager. Für die permanente Aktivität muss also der Programmierer Rechnung tragen.

Einige Beispiele für Laufzeit-Scripts findet man im Versionsverzeichnis - bei Installation im Standardverzeichnis findet man diese in:

C:/Siemens/Automation/WinCC_OA/3.18/scripts

Unterprogramme in Form von Funktionsdeklarationen können, genau wie bei den Event-Scripts in der Grafik, direkt unter demmain()-Programm angeführt sein. Diese existieren dann nur im Kontext des main()-Programms und aller anderen, ebenso script-lokal definierten Funktionen.

Alternativ können Funktionen auch global gültig in eigenen Bibliotheken in Form von ASCII-Dateien im Verzeichnis .../scripts/libs/ der aktuellen Projekthierarchie definiert werden. Deren Verfügbarkeit muss dann jedoch über Eintrag in der Konfigurationsdateiconfig.level bzw. über das #uses Schlüsselwort für jeden Manager festgelegt werden. Ein Beispiel für eine solche Konfigurationsdatei zur Festlegung der Verfügbarkeit von Funktions-Bibliotheken liefertC:/Siemens/Automation/WinCC_OA/3.18/config/config.level.

[ctrl]
LoadCtrlLibs = "std.ctl, libCTRL.ctl, hosts.ctl, va.ctl, archiv.ctl, mp.ctl"
LoadCtrlLibs = "sdSymbolDynamics.ctl"
LoadCtrlLibs = "panel.ctl"
LoadCtrlLibs = "cns.ctl"
ctrlDLL = "CtrlCNS"
[ui_extend]
LoadCtrlLibs = "para.ctl, ep.ctl, csg.ctl, ngedi.ctl, ini.ctl"
[ui]
LoadCtrlLibs = "as.ctl, es.ctl, libCTRL.ctl, STD_Symbols.ctl, STD_ComplexSymbols.ctl, da.ctl"
LoadCtrlLibs = "login.ctl, panel.ctl, std.ctl, dist.ctl"
LoadCtrlLibs = "hosts.ctl, va.ctl, ac.ctl, dpGroups.ctl"
LoadCtrlLibs = "pager.ctl, archiv.ctl, Clk.ctl, tools.ctl, mp.ctl, ax.ctl"
LoadCtrlLibs = "pmon.ctl, userMan.ctc" 
LoadCtrlLibs = "pt.ctl, _consts.ctl"
LoadCtrlLibs = "ptms.ctl, ptnavi.ctl"
LoadCtrlLibs = "sdSymbolDynamics.ctl"
LoadCtrlLibs = "cns.ctl"
LoadCtrlLibs = "cnsTree.ctl"
LoadCtrlLibs = "cnsEditor.ctl"
ctrlDLL = "CtrlCNS"
[event]
LoadCtrlLibs = "STD_Symbols.ctl"
[ascii]
LoadCtrlLibs = "ASCIILib.ctl, da.ctl, mp.ctl, para.ctl"

Script-globale Variablen werden im Laufzeitscript vor dem main()-Programm deklariert. Sollen Variablen in allen Scripts des Managers verfügbar sein, so müssen diese vor den Funktions-Deklarationen der Funktionen in einer Bibliothek oder über den CTRL-Befehl addGlobal() zur Laufzeit deklariert werden.

Anmerkung:

Wie in Abschnitt Einrichten der Simulation bereits geschildert, laufen beide Scripts für die Simulation im vorliegenden Projekt in einem einzelnen Control-Manager quasi parallel ab. Die Festlegung welche Scripts von einem CTRL-Manager exekutiert werden, erfolgt als Aufrufparameter in der Console - im vorliegenden Projekt über eine Scripts-Liste (-f sim.lst) - siehe dazu Abbildung auf der Seite "Einrichten der Simulation".

Hinweise und Einschränkungen

  • Die Angabe der Dateiendung ist bei Scripts nicht erforderlich. Per Default wird in der folgenden Reihenfolge nach den Endungen gesucht:

    1. angegebener Name

    2. <Name>.ctl

    3. <Name>.ctc

  • Scripts können auch mit zusätzlichen Parametern aufgerufen werden. Diese Parameter dürfen keine Leerzeichen beinhalten. Die Verwendung von Leerzeichen spaltet die Parameter.

    z.B.: "Te st" wird in die zwei Parameter "Te" und "st" gespalten.