Neues PowerConfig für DPT anlegen
Durch Klick auf die Schaltfläche "Neue Konfiguration erstellen" öffnet sich folgendes Panel für die Eingabe der PowerConfig-Parameter. Selektieren Sie die Radiobox DPT, um die Definition eines Datenpunkttyp übergreifenden PowerConfigs vorzunehmen.
Wählen Sie aus der Combobox (nach dem grau hinterlegten Textfeld mit Inhalt "_da_DPT_") einen Datenpunkttyp, für den ein PowerConfigs erstellt werden soll. Im darunterliegenden grau hinterlegten Textfeld wird der Name des PowerConfigs angezeigt.
Der Name des PowerConfigs setzt sich aus folgendem Wortlaut zusammensetzen: _da_DPT_ + Datenpunkttypname. Beispiel: _da_DPT_PUMP1 stellt ein PowerConfig für den Datenpunkttyp PUMP1 dar.
Ein Datenpunkttyp übergreifendes PowerConfig wird am Root-Knoten des Master-Datenpunktes eingefügt und erlaubt die Parametrierung mehrerer DPEs in der Struktur unterhalb (siehe auch DPT-PowerConfig einfügen). Es kann immer nur ein Datenpunkttyp übergreifendes PowerConfig für einen Datenpunkttyp angelegt werden. Bei Auswahl eines Datenpunkttyp übergreifenden PowerConfigs wählen Sie aus der Combobox den gewünschten Datenpunkttyp aus. Die Auswahl des Datentyps entfällt hierbei, da das Einfügen am Root-Knoten immer mit dem Datentyp STRING verbunden ist. DPT-übergreifende PCs werden immer als "String" erstellt, weil sie ja nur an einem Root-Knoten angefügt werden können (und alle Knoten in WinCC OA als String behandelt werden - z.B. kann auf einem Knoten nur das PowerConfig "Summenmeldebehandlung" eingefügt werden, genauso wie bei einem String).
Bei der Parametrierung des Klartextes können Sie einen weiteren Namen für das PowerConfig vergeben, der in der Combobox Konfiguration des PowerConfig-Editors angezeigt wird. Mit OK bestätigen Sie Ihre Eingaben und das Panel wird automatisch geschlossen, Abbrechen schließt das Panel ohne jegliche Einstellungen zu übernehmen.
Beispiel
Anlegen eines Datenpunkttyp übergreifenden PowerConfigs für den Datenpunkttyp "Ampel" (die Struktur dieses Datenpunkttyps finden Sie auch beim Beispiel für die Massenparametrierung). Durch das Hinzufügen des DPT-PowerConfigs am Root-Knoten des Master-Datenpunktes werden die 4 Elemente des Datenpunkttyps (rot, gelb, gruen, stoerung) mit einer Peripherieadresse (OPC Eingang) parametriert. Veränderliche Attribute bei der Parametrierung am Datenpunkt sollen Server, Gruppe, Item und die Adressaktivierung sein.
- Klicken Sie auf die Schaltfläche Neues PowerConfig erstellen im PowerConfig-Editor.
- Geben Sie folgende Parameter im Panel für die Definition eines neuen PowerConfigs an:
- Wählen Sie das neu angelegte PowerConfig "S - Ampel - DPT-PC" aus der Combobox mit den definierten Konfigurationen, um in den nächsten Schritten die Variablen und Skripts auf den Registerkarten einzustellen.
- Auf der Registerkarte Variablen deklarieren Sie alle Variablen, die in den
nachfolgenden Skripts für das Setzen/Lesen der Attribute des PowerConfigs notwendig
sind (weitere Informationen finden Sie auch auf der Seite Registerkarte Variablen). Folgende Variablen
sind für dieses Beispiel zu definieren:
Name Typ Defaultwert Beschreibung leaf_red string ".rot" Datenpunktelement leaf_yellow string ".gelb" Datenpunktelement leaf_green string ".gruen" Datenpunktelement leaf_malfunction string ".stoerung" Datenpunktelement dp string dpSubStr($DPE,DPSUB_DP) Datenpunktbezeichner ref1 string Weitere Kennung für Item ref2 string Weitere Kennung für Item ref3 string Weitere Kennung für Item ref4 string Weitere Kennung für Item Server string "EXAMPLESERVER" Teil der Peripherieadresse Group string "STATE" Teil der Peripherieadresse Item string dpSubStr($DPE,DPSUB_DP)+"_OPCITEM" Teil der Peripherieadresse _reference string Referenzstring (bestimmt die Adresse) _active bool Adressaktivierung _direction int Gibt die Richtung an (Eingang bzw. Ausgang). _drv_ident string "OPCCLIENT" Treibertyp - Auf der Registerkarte Eingang erfolgt in diesem Schritt die Eingabe eines
Skripts, welches die aktuellen Werte der Attribute ausliest und auf definierte
Variablen schreibt (z.B. beim Aufschalten des PowerConfig-Parametrierpanels am
Datenpunkt). Geben Sie das folgende Skript auf dieser Registerkarte ein:
dpGet(dp+leaf_red+":_address.._reference",_reference, dp+leaf_red+":_address.._active",_active, dp+leaf_red+":_address.._drv_ident",_drv_ident, dp+leaf_red+":_address.._direction",_direction);
- Die Registerkarte Eingangsberechnung wird mit einem Skript versehen, welches
den Referenzstring aufteilt und die Werte auf die Variablen Server,
Group und Item schreibt (bei einer OPC-Peripherieadresse werden
für Server, Gruppe und Item keine "echten" WinCC OA Attribute
verwendet). Diese Variablen sollen schließlich als dynamische Attribute dienen und
auf jedem Datenpunkt verändert werden können. Definieren Sie folgendes Skript,
welches die Aufteilung vornimmt:
Server = substr(_reference, 0, strpos(_reference, "$")); reference = substr(_reference, strpos(_reference, "$")+1, strlen(_reference)); Group = substr(_reference, 0, strpos(_reference, "$")); Item = substr(_reference, strpos(_reference, "$")+1, strlen(_reference));
- Auf der Registerkarte Eingabe wählen Sie Variablen (dynamische Attribute)
aus, deren Parameter auf jedem Datenpunkt eingestellt werden können und somit auf
jedem Element des Datenpunktes geändert werden (mehr Informationen zu dieser
Registerkarte finden Sie auf der Seite Registerkarte
Eingabe). Für dieses Beispiel wurden die Variablen Server,
Group, Item und _active herangezogen. Da die Variablennamen
bereits in anderen PowerConfig-Skripts verwendet werden, wird auch der Name in
Klartext der dynamischen Attribute aus der Katalogdatei
da.cat
verwendet. - Nachdem der Referenzstring zuvor aufgeteilt wurde, um mittels
PowerConfig-Parametrierung die einzelnen Parameter auf jedem DP setzen zu können
(Klick auf OK im Parametrierpanel), muss auf der Registerkarte
Ausgangsberechnung die Adresse (Referenzstring) wieder zusammengesetzt
werden. Damit wird ein ordnungsgemäßes Setzen des Attributes
_address.._reference für die OPC-Peripherieadresse gewährleistet. Das
Zusammensetzen des Strings erfolgt durch folgendes Skript:
_reference = Server+"$"+Group+"$"+Item; ref1 = _reference; ref2 = _reference+"_1"; ref3 = _reference+"_2"; ref4 = _reference+"_3";
- Das definierte Skript auf der Registerkarte Ausgang führt zu einem Setzen
der Werte, die die Variablen angenommen haben, auf die spezifischen Attribute der
Konfigs. Für dieses Beispiel erstellen Sie folgendes Skript auf dieser
Registerkarte:
dpSetWait(dp+leaf_red+":_address.._reference",ref1, dp+leaf_red+":_address.._active",_active, dp+leaf_red+":_address.._direction",_direction, dp+leaf_red+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_yellow+":_address.._reference",ref2, dp+leaf_yellow+":_address.._active",_active, dp+leaf_yellow+":_address.._direction",_direction, dp+leaf_yellow+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_green+":_address.._reference",ref3, dp+leaf_green+":_address.._active",_active, dp+leaf_green+":_address.._direction",_direction, dp+leaf_green+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_malfunction+":_address.._reference",ref4, dp+leaf_malfunction+":_address.._active",_active, dp+leaf_malfunction+":_address.._direction",_direction, dp+leaf_malfunction+":_address.._drv_ident",_drv_ident); err = getLastError(); if (dynlen(err) > 0) { throwError(err); }
- Als letzten Schritt für das Anlegen des neuen PowerConfigs sind auf der
Registerkarte Default mit einem Skript Werte auf Attribute zu setzen, die
beim Einfügen des PowerConfigs am Root-Knoten des Master-Datenpunktes, auf den
einzelnen Elementen des Datenpunktes parametriert werden. Beim Erstellen dieses
Skripts ist darauf zu achten, dass der Typ des Konfigs, das auf den Elementen
gesetzt werden soll, definiert ist (in diesem Beispiel _distrib.._type und
_address.._type). Falls diese Attribute nicht gesetzt werden, kann das
DPT-PowerConfig beim Einfügen am Master-Datenpunkt nicht ausgewählt werden (siehe
auch DPT-PowerConfig einfügen).
In diesem Beispiel wurden folgende Attribute mit Werten versehen:
_reference = Server+"$"+Group+"$"+Item; ref1 = _reference; ref2 = _reference+"_1"; ref3 = _reference+"_2"; ref4 = _reference+"_3"; dpSet(dp+leaf_red+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_red+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_red+":_address.._reference",ref1, dp+leaf_red+":_address.._active",FALSE, dp+leaf_red+":_address.._direction","\2", dp+leaf_red+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_yellow+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_yellow+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_yellow+":_address.._reference",ref2, dp+leaf_yellow+":_address.._active",FALSE, dp+leaf_yellow+":_address.._direction","\2", dp+leaf_yellow+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_green+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_green+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_green+":_address.._reference",ref3, dp+leaf_green+":_address.._active",FALSE, dp+leaf_green+":_address.._direction","\2", dp+leaf_green+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_malfunction+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_malfunction+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_malfunction+":_address.._reference",ref4, dp+leaf_malfunction+":_address.._active",FALSE, dp+leaf_malfunction+":_address.._direction","\2", dp+leaf_malfunction+":_address.._drv_ident",_drv_ident);
- Auf der letzten Registerkarte Quellcode kann das Skript für das erstellte
PowerConfig angesehen und einer Syntaxprüfung unterzogen werden. In der Datei
powerconfig
wird ein neuer Abschnitt mit den Einstellungen für das neue PowerConfig hinzugefügt (mehr Informationen zum Aufbau dieser Datei finden Sie auf der Seite Aufbau der Datei powerconfig). Das Skript für dieses Beispiel sollte so aussehen:definition34() { // definition start //_da_DPT_Ampel:STRING // variables definition string leaf_red=".rot"; string leaf_yellow=".gelb"; string leaf_green=".gruen"; string leaf_malfunction=".stoerung"; string dp=dpSubStr($DPE,DPSUB_DP); string _drv_ident="OPCCLIENT"; bool _active; int _direction; string _reference; string Server="EXAMPLESERVER"; string Group="STATE"; string Item=dpSubStr($DPE,DPSUB_DP)+"_OPCITEM"; string ref1; string ref2; string ref3; string ref4; // dpGet dpGet(dp+leaf_red+":_address.._reference",_reference, dp+leaf_red+":_address.._active",_active, dp+leaf_red+":_address.._drv_ident",_drv_ident, dp+leaf_red+":_address.._direction",_direction); // calculate input Server = substr(_reference, 0, strpos(_reference, "$")); _reference = substr(_reference, strpos(_reference, "$")+1, strlen(_reference)); Group = substr(_reference, 0, strpos(_reference, "$")); Item = substr(_reference, strpos(_reference, "$")+1, strlen(_reference)); // variables input //_active //Server //Group //Item // calculate output _reference = Server+"$"+Group+"$"+Item; ref1 = _reference; ref2 = _reference+"_1"; ref3 = _reference+"_2"; ref4 = _reference+"_3"; // dpSet dpSetWait(dp+leaf_red+":_address.._reference",ref1, dp+leaf_red+":_address.._active",_active, dp+leaf_red+":_address.._direction",_direction, dp+leaf_red+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_yellow+":_address.._reference",ref2, dp+leaf_yellow+":_address.._active",_active, dp+leaf_yellow+":_address.._direction",_direction, dp+leaf_yellow+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_green+":_address.._reference",ref3, dp+leaf_green+":_address.._active",_active, dp+leaf_green+":_address.._direction",_direction, dp+leaf_green+":_address.._drv_ident",_drv_ident); dpSetWait(dp+leaf_malfunction+":_address.._reference",ref4, dp+leaf_malfunction+":_address.._active",_active, dp+leaf_malfunction+":_address.._direction",_direction, dp+leaf_malfunction+":_address.._drv_ident",_drv_ident); err = getLastError(); if (dynlen(err) > 0) { throwError(err); } // default _reference = Server+"$"+Group+"$"+Item; ref1 = _reference; ref2 = _reference+"_1"; ref3 = _reference+"_2"; ref4 = _reference+"_3"; dpSet(dp+leaf_red+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_red+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_red+":_address.._reference",ref1, dp+leaf_red+":_address.._active",FALSE, dp+leaf_red+":_address.._direction","\2", dp+leaf_red+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_yellow+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_yellow+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_yellow+":_address.._reference",ref2, dp+leaf_yellow+":_address.._active",FALSE, dp+leaf_yellow+":_address.._direction","\2", dp+leaf_yellow+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_green+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_green+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_green+":_address.._reference",ref3, dp+leaf_green+":_address.._active",FALSE, dp+leaf_green+":_address.._direction","\2", dp+leaf_green+":_address.._drv_ident",_drv_ident); dpSet(dp+leaf_malfunction+":_distrib.._type",DPCONFIG_DISTRIBUTION_INFO, dp+leaf_malfunction+":_address.._type",DPCONFIG_PERIPH_ADDR_MAIN, dp+leaf_malfunction+":_address.._reference",ref4, dp+leaf_malfunction+":_address.._active",FALSE, dp+leaf_malfunction+":_address.._direction","\2", dp+leaf_malfunction+":_address.._drv_ident",_drv_ident); // definition end }
-
Nachdem das PowerConfig angelegt wurde, muss der GEDI neu gestartet werden, damit die das neue PowerConfig verfügbar/sichtbar ist.
Das mit diesem Beispiel angelegte PowerConfig kann nun im Modul PARA am Root-Knoten des Master-Datenpunktes eingefügt werden. Das Aktivieren der Checkbox DPT-PC bewirkt ein Setzen der Werte, die in der Default-Sektion des PowerConfig-Skripts definiert wurden (siehe auch DPT-PowerConfig einfügen).