SICLIMAT X TECLA-Scripts
SICLIMAT X OS ist ein älteres Managementsystem, das zusammen mit Simatic S7 SPS-basierten Subsystemen eingesetzt wird. Das Managementsystem bietet eine Umgebung für gescriptete Ausführungen von Programmen, die in einer proprietären Sprachspezifikation namens TECLA (Abkürzung für Technical Language) geschrieben sind. Die Scripts bieten Funktionen wie das Lesen/Schreiben von Datenpunktattributen, das Drucken von Meldungen oder Datei-I/O. Solche Scripts werden dazu genutzt, systemweite Funktionen auszuführen. Die zugrundeliegende Script-Runtime interagiert mit den SICLIMAT X OS-Diensten, um Aktionen wie das Schreiben/Lesen von Datenpunkten auszuführen.

Übersicht über den Migrationsprozess
Desigo CC bietet eine gescriptete Ausführung von Aktionen mit JavaScript™ als Programmiersprache. Neben den Standardfunktionen und -operatoren der Sprache wurden zusätzliche Funktionen wie das Lesen/Schreiben von Datenpunkten in der Standardbibliothek hinzugefügt. So können Techniker Steuerungsprogramme in JavaScript™ verfassen und dabei Funktionen aus der Bibliothek nutzen. Folgender Code-Auszug zeigt ein Beispielscript:
var sp = BrowserObject("System1.ManagementView:..TemperatureSetpoint"); var value = read(sp,"PresentValue"); console.log(value); if(value < 22) var result= executePropertyCommand(sp,"PresentValue", "Write","26");
if (result.error) { console.Log("Command failed); } |
Jedes derartige Script-Dokument wird im Desigo CC-Projekt gespeichert und als Instanz eines Datenpunkts dargestellt. Sie bilden die Schnittstelle zum Starten, Stoppen und Überwachen des Status der Script-Ausführung. Daher können diese repräsentativen Datenpunkte in Applikationen wie Makros und Reaktionen dazu genutzt werden, eine Script-Ausführung zu starten.
Weil eine direkte Beziehung zwischen einem TECLA Script-Dokument und einer Instanz eines JavaScript™-Objekts in Desigo CC besteht, konvertieren wir jedes TECLA-Script-Dokument in eine entsprechende JavaScript Der Konvertierungsprozess wird von einem sprachübergreifenden Compiler ausgeführt, der die Sprachkonstrukte (wie Bedingungen, Loops oder Operatoren) konvertiert und Systemdienstfunktionen in TECLA (wie das Lesen/Schreiben von Datenpunkten) durch Entsprechungen aus der Desigo CC-Standardbibliothek ersetzt. Da viele Systemdienstfunktionen in TECLA über eine Entsprechung in der Standardbibliothek verfügen, enthält die Siclimat-Erweiterung eine zusätzliche JavaScript Nicht alle Funktionen aus TECLA sind in der Desigo CC-Runtime möglich. Im Fall einer fehlenden entsprechenden Funktion wird dem Benutzer während des Migrationsprozesses eine Meldung angezeigt. Daher kann es nötig sein, das migrierte TECLA-Script manuell zu ändern oder zu erweitern, sodass Workarounds für fehlende Teile erstellt werden können. Die folgende Abbildung zeigt eine Übersicht über die Beziehung zwischen den TECLA-Scripts und den JavaScript™ Objekten in Desigo CC.

Wichtige Punkte bei der Migration von TECLA-Scripten
Fehlerbehandlung
Die Konstrukte FWHILE und FWHEN, die als Codeteile für den Umgang mit Fehlerbedingungen entworfen wurden, werden durch Try-/Catch-Blöcke ersetzt. Die ursprünglichen TECLA-Fehlercodes werden auf Desigo CC-spezifische Codes abgebildet, die im Anhang aufgeführt sind.
Mehrsprachige Scripte
TECLA-Scripte können mit englischer oder deutscher Syntax und englischen/deutschen Funktionsnamen geschrieben werden. Nach der Migration basieren das JavaScript™ und seine Funktionsaufrufe jedoch nur auf englischen Texten. Die in der Standardbibliothek definierten Funktionen basieren ebenfalls auf englischen Namen.
Projekte auf mehreren Systemen
In einem verteilten System befinden sich Datenpunkte in den Containern der jeweiligen Systeme. Das Migrationstool muss Datenpunkte, die in den TECLA-Scripten referenziert werden, finden. Hierzu geht das Migrationstool bei einem Projekt mit mehreren Systemen durch alle verfügbaren Systeme und durchsucht in jedem System die Technische Sicht und dann die Betreibersicht.
Hinweis: Diese virtuellen Objekte (Rechenwert genannt) werden nur in der Applikationssicht gesucht. Wenn das Migrationstool den Datenpunkt in keinem dieser Systeme finden kann, wird ein Fehler in der Migrationsübersicht protokolliert.
JavaScript™-Funktionen in der Siclimat EM-Bibliothek
Die Bibliothek für SICLIMAT X enthält eine Reihe von JavaScript™-Funktionen, mit denen Sie SICLIMAT X-spezifische Aktionen wie SetOperatingMode (Betriebsart) ausführen können. Solche Funktionsaufrufe können in Erweiterungen und neuem, von Ihnen erstelltem JavaScript™-Code verwendet werden.
Datenpunkt-Eigenschaftswerte überschreiben
Wenn sich ein Objekt im manuellen Modus befindet, schlägt das Schreiben der Standardeigenschaft fehl, und die Meldung wird im Konsolen- und Trace-Kanal protokolliert.
Kalender ist in JavaScript™ nicht verfügbar
Der Zugriff auf Kalendereinträge wie spezielle Tage, Feiertage oder Wochenenden, ist in JavaScript nicht unterstützt.
Erstellung virtueller Objekte
Vor der Script-Migration muss der Benutzer manuell ein virtuelles Objekt unter Applikationssicht > Logik > Virtuelle Objekte erstellen. Wenn das virtuelle Objekt jedoch nicht erstellt wurde und der Verweis im migrierten JavaScript™ nicht aufgelöst wird, kann der Benutzer das Objekt nach der Migration erstellen und den Verweis in das migrierte JavaScript™ ziehen. Der Name des virtuellen Objekts sollte mit einer Zahl beginnen. Virtuelle Objekte müssen mit einem von vier Typen erstellt werden: Analog(A), Multistate(M), Binär(B) und Unsigniert(Z). Wenn das virtuelle Objekt einen benutzerdefinierten Namen hat (zum Beispiel BenutzerdefiniertesVirtuellesObjekt1), der nicht den Namenskonventionen entspricht, sollte das Objekt erstellt werden und der Verweis im Script sollte manuell geändert werden.
Beispiele von Objektmodellen und Namen virtueller Objekte (von SICLIMAT)
GMS_Virtual_Analog | 1RWA0 | 1RWA100 |
GMS_Virtual_Multistate | 1RWM0 | 1RWM100 |
GMS_Virtual_Binary | 1RWB0 | 1RWB100 |
GMS_Virtual_Unsigned | 1RWZ0 | 1RWZ100 |
Beispiele für SET/SOLL, SETOP/SOLLBA, SWITCH/SCHALTE, und SWITCHOP/SCHALTEBA
SET / SOLL:
- Verwendungsbeispiel: _script.SetProperty("System1.LogicalView:LogicalView.SomeObject", 2);
- Setzt die Eigenschaft Sollwert des Objekts auf einen Wert. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- In diesem Beispiel erhält die Eigenschaft Sollwert eines Objekts den Wert 2.
SETOP / SOLLBA:
- Verwendungsbeispiel: _script.SetPropertyWithOperationalMode ("System1.LogicalView:LogicalView.SomeObject", 2 , 3);
- Zuerst wird die Eigenschaft Betriebsart des Objekts auf einen Wert gesetzt. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- Dann wird die Eigenschaft Sollwert des Objekts auf einen Wert gesetzt. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- In diesem Beispiel erhält die Eigenschaft Betriebsart eines Objekts den Wert 3 und die Eigenschaft Sollwert den Wert 2.
SWITCH / SCHALTE:
- Verwendungsbeispiel: _script.ExecuteSwitch ("System1.LogicalView:LogicalView.SomeObject", 2);
- Setzt die Eigenschaft Sollstufe des Objekts auf einen Wert. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- In diesem Beispiel erhält die Eigenschaft Sollstufe eines Objekts den Wert 2.
SWITCHOP / SCHALTEBA:
- Verwendungsbeispiel: _script.ExecuteSwitchWithOperationalMode ("System1.LogicalView:LogicalView.SomeObject", 2 , 3);
- Zuerst wird die Eigenschaft Betriebsart des Objekts auf einen Wert gesetzt. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- Dann wird die Eigenschaft Sollstufe des Objekts auf einen Wert gesetzt. Wenn das Objekt im Manuellen Modus ist, wird der Wert der Eigenschaft nicht geändert.
- In diesem Beispiel erhält die Eigenschaft Betriebsart eines Objekts den Wert 3 und die Eigenschaft Sollstufe den Wert 2.
Matrix für mögliche Eigenschaften von Objekten für SET/SOLL, SETOP/SOLLBA, SWITCH/SCHALTE und SWITCHOP/SCHALTEBA
Command | Objekttyp | Eigenschaft |
|---|---|---|
SETZEN | Sollwert, Stellbefehl | Sollwert |
Regler | Grundsollwert | |
OptStell | AktualSollwert | |
SOLLBA | Sollwert, Stellbefehl | Sollwert |
Regler | Grundsollwert | |
SCHALTEN | Schaltbefehl | Sollstufe |
Opt Schalt | AktualSollstufe | |
SCHALTEBA | Schaltbefehl | Sollstufe |
Auflösung des Fehlers Ziel nicht gefunden für SET/SOLL, SETOP/SOLLBA, SWITCH/SCHALTE und SWITCHOP/SCHALTEBA
In der TeclaJavascript™-Bibliothek werden für SET, SETOP, SWITCH, SWITCHOP feste Eigenschaften verwendet.
- SET / SETOP: Eine festgelegte Sollwert-Eigenschaft wird verwendet.
- SWITCH / SWITCHOP: Eine festgelegte Sollstufe-Eigenschaft wird verwendet.
Während der Ausführung des Tecla-Scripts können jedoch diese festgelegten Eigenschaften in Objekten fehlen, wenn andere Objekttypen verwendet werden, was zur Fehlermeldung Ziel nicht gefunden führt. Der Benutzer kann die erforderliche Eigenschaft explizit mit „Objekt/EigenschaftsName“ definieren, wie im folgenden Beispiel gezeigt.
Beispiel 1:
_script.SetProperty("System1.LogicalView:LogicalView.SomeObject", 3);
Ausgabe auf der Konsole: Ziel nicht gefunden
Grund:
Das Objekt EinObjekt verfügt nicht über die Eigenschaft Sollwert, sondern über die Eigenschaft Grundsollwert.
Neue Implementierung:
_script.SetProperty("System1.LogicalView:LogicalView.SomeObject/Grundsollwert", 3);
Beispiel 2:
_script.ExecuteSwitch ("System1.LogicalView:LogicalView.SomeObject", 3);
Ausgabe auf der Konsole: Ziel nicht gefunden
Grund:
Das Objekt EinObjekt verfügt nicht über die Eigenschaft Sollstufe, sondern über die Eigenschaft AktualSollstufe.
Neue Implementierung:
_script. ExecuteSwitch("System1.LogicalView:LogicalView.SomeObject/AktualSollstufe", 3);
Beispiel 3:
_script.SetProperty("System2.Logical2:Logical2Root.GiWi.DI_CC.CC_SEMINAR.KLIMA2.RF1_DRUCKREG.DRUCK_REGL", 180);
Ausgabe auf der Konsole: Ziel nicht gefunden
Grund:
Das Objekt DRUCK_REGL verfügt nicht über die Eigenschaft Sollwert, sondern über die Eigenschaft Grundsollwert.
Neue Implementierung:
_script.SetProperty("System2.Logical2:Logical2Root.GiWi.DI_CC.CC_SEMINAR.KLIMA2.RF1_DRUCKREG.DRUCK_REGL/Grundsollwert", 180);
Anhang SICLIMAT X
Abbildung von TECLA-Fehlercodes auf Desigo CC-spezifische Codes
JavaScript-Funktionen in der SICLIMAT-Bibliothek
Das folgende Statement enthält die Datei der JavaScript-Bibliothek.
var _script = include("TeclaScriptLibrary.js" ,"BA_Software_Siclimat_Script_Migration_1");
Funktion Name EN Siclimat | Funktionsname | Zweck | Verwendungsbeispiel der Funktion |
| ReadProperty | Objekteigenschaften lesen und Wert ausgeben | _script.ReadProperty("System1.LogicalView:LogicalView.SomeObject"); |
OPERATING_MODE | SetOperatingMode | Betriebsart des Objekts festlegen. 0 - Extern 1 –Manuell 2 - Automatisch 3 - BS | _script.SetOperatingMode("System1.LogicalView:LogicalView. SomeObject", 3); |
SETZEN | SetProperty | Bestimmten Eigenschaftswert eines Objekts auf einen Wert festlegen. | _script.SetProperty("System1.LogicalView:LogicalView.SomeObject", 3); |
SOLLBA | SetPropertyWithOperationalMode | Betriebsart eines Objekts festlegen und Bestimmten Eigenschaftswert eines Objekts auf einen Wert festlegen. | _script.SetPropertyWithOperationalMode("System1.LogicalView:LogicalView. SomeObject", 3, 3); |
SCHALTEN | ExecuteSwitch | Schaltet die festgelegte Stufe eines Objekts auf einen anderen Wert. | _script.ExecuteSwitch("System1.LogicalView:LogicalView. SomeObject", 3); |
SCHALTEBA | ExecuteSwitchWithOperationalMode | Betriebsart eines Objekts festlegen und gesetzte Stufe des Objekts auf einen anderen Wert festlegen. | _script.ExecuteSwitchWithOperationalMode ("System1.LogicalView:LogicalView.SomeObject", 3 , 3); |
WAIT | Warten | Ausführung eines Scripts während „hh:mm:ss“ stoppen. | _script.Wait("00:00:01"); |
WAIT_S | WaitForSeconds | Ausführung eines Scripts während der angegebenen Anzahl Sekunden stoppen. | var variable1 = 10; _script.WaitForSeconds(variable1); |
WAIT_M | WaitForMinutes | Ausführung eines Scripts während der angegebenen Anzahl Minuten stoppen. | var variable1 = 10; _script.WaitForMinutes(variable1); |
Wait_V | Wait_V | Ausführung eines Scripts für Zeitspanne stoppen; Zeitwerte werden von lokalen Variablen für Stunden, Minuten und Sekunden übernommen | var variable1 = 01; _script.Wait_V(variable1, variable1, variable1); |
LIMIT | SetLimitPropertyValue | Ändert einen bestimmten Grenzwert eines Objekts | _script.SetLimitPropertyValue("System1.LogicalView:LogicalView.SomeObject/Limit Property ", 3); |
WRITE | WritePropertyValue | Direkte Änderung von Objekteigenschaften. | _script. WritePropertyValue("System1.LogicalView:LogicalView.SomeObject/Limit Property ", 3); |
COUNTER | SetCounter | Wert des Zählerobjekts ändern. | _script.SetCounter("System1.LogicalView:LogicalView. SomeObject", 3); |
CALCULATION_VALUE | SetCalculationValue | Ändert den aktuellen Wert eines Berechnungsobjekts | _script.SetCalculationValue("System1.LogicalView:LogicalView.006XTGA.E0.AS30.LICHT_LINIEN.09.SB/Iststufe", 10); |
LOG | GetLog | Logarithmischen Wert abrufen. | _script.GetLog(10); |
ROOT | GetRoot | Root-Wert abrufen. | _script.GetRoot(10); |
DEGSIN | GetDegSIN | SIN-Wert in Grad abrufen | _script.GetDegSIN(10); |
DEGCOS | GetDegCOS | COS-Wert in Grad abrufen | _script.GetDegCOS(10); |
DEGTAN | GetDegTAN | TAN-Wert in Grad abrufen | _script.GetDegTAN(10); |
RADSIN | GetRadSIN | SIN-Wert in Bogenmass abrufen | _script.GetRadSIN(10); |
RADCOS | GetRadCOS | COS-Wert in Bogenmass abrufen | _script.GetRadCOS(10); |
RADTAN | GetRadTAN | TAN-Wert in Bogenmass abrufen | _script.GetRadTAN(10); |
TRUNC | Trunkieren | Zahlen nach Dezimalstelle trunkieren. Auch negative Floating-Zahl aufrunden. | _script. Truncate (10.33); |
DAY | GetCurrentDay | Wert eines Wochentags 1 bis 7 abrufen. | _script.GetCurrentDay() |
TIME | GetCurrentTime | Prüfen, ob Zeit im 24-Stunden-Format vorliegt, sonst Druckerfehler. | _script.GetCurrentTime("6:00:00"); |
| GetTime | Aktuelle Zeit im 24-Stunden-Format „hh:mm:ss“ abrufen | _script.GetTime( ); |
| GetDay | Verschiedene Datumsfunktionen bereitstellen, z. B. Tag: 1 – 31 Monat: 1 – 12 Jahr: 1997 – 2025 Stunde: 0 – 23 Minute: 0 – 59 Wochentag: 1(Montag) - 7(Sonntag) Tag_im_Jahr: 1 - 366 Kalenderwoche: 1 - 52 Minute_am_Tag: 0 - 1440 Sommerzeit: 0 oder 1 Schaltjahr: 0 oder 1 | _script.GetDay() _script.GetDay( "SATURDAY"); _script.GetDay( "day"); _script.GetDay( "month"); _script.GetDay( "year"); _script.GetDay( "hour"); _script.GetDay( "minute"); _script.GetDay( "weekday"); _script.GetDay( "day_of_year"); _script.GetDay( "week_of_year"); _script.GetDay( "minute_of_day"); _script.GetDay( " daylight_savings_time "); _script.GetDay( " leap_year"); _script.GetDay( " leap_year"); |
Starten | StartScript | Startet die Ausführung des Scripts auf demselben System. | _script.StartScript("SomeScriptName"); |
CANCEL | CancelScript | Stoppt die Ausführung des Scripts auf demselben System. | _script.CancelScript("SomeScriptName "); |
FUNCTION | CallFunction | Startet die Ausführung des Subroutinen-Scripts auf demselben System. | var result =_script.CallFunction("SomeScriptName ", a, b); var result1 = result[0]; var result2 = result[1]; |
_ERROR | GetErrorCode | Fehlercode abrufen, im Fall eines Lese-/Schreibfehlers eines Objekts ist der Fehlercode auf die Variable gesetzt. (Aktuell Ausgabe von 0 oder 1, 0 im Fall keines Fehlers und 1 im Fall eines Fehlers) | _script.GetErrorCode(); |
Umgang mit fehlenden Funktionen im System in SICLIMAT X
Einige Funktionen, die nicht in Desigo CC migriert werden, werden durch Dummy-Funktions-Calls im migrierten JavaScript ersetzt. Folgend die Liste dieser Funktionen und mögliche Behebungsideen.
Funktion Name EN Siclimat | Funktionsname als Dummy | Zweck | Workaround (gegebenenfalls) |
TEXT | SET_TEXT | Ausgabe von einfachem Text über die Meldungsroute. |
|
PROTOCOL | SET_PROTOCOL | Ausgabe eines bestehenden Protokolls auf Druckern |
|
PRINTER_SHIFT | SET_PRINTER_SHIFT | Umschalten der Ausgabe eines offenen Protokolls von Drucker1 auf Drucker2. |
|
RPRINTER_SHIFT | SET_RPRINTER_SHIFT | Zurücknahme der Umschaltung der Ausgabe eines offenen Protokolls von |
|
PRINTER_ADD_ON | SET_PRINTER_ADD_ON | Schaltet die Ausgabe eines offenen Protokolls von Drucker1 zusätzlich |
|
RPRINTER_ADD_ON | SET_RPRINTER_ADD_ON | Zieht die Ausgabe eines offenen Protokolls auf Drucker1 und auf Drucker2 zurück. |
|
PRINTER_LOCK | SET_PRINTER_LOCK | Sperrt die Ausgabe eines offenen Protokolls. |
|
RPRINTER_LOCK | SET_RPRINTER_LOCK | Zieht die Druckersperre für die Ausgabe eines offenen Protokolls zurück. |
|
MACRO_SYSTEM | SET_MACRO_SYSTEM | Löst ein beliebiger UNIX Systembefehl aus. |
|
MAKROSYSTEM | SET_MAKROSYSTEM | Löst ein beliebiger UNIX Systembefehl aus. |
|
MACRO_SYSTEM_W | SET_MACRO_SYSTEM_W | Löst ein beliebiger UNIX Systembefehl aus. |
|
SET_SCHREIBE_VAR | SET_SCHREIBE_VAR | Schreibe Datenpunktwerte an die Datei. |
|
SET_LESE_VAR | SET_LESE_VAR | Lese Datenpunktwerte von der Datei. |
|
SETHEATING | SET_HEATING | Legt den Modus der Heizungssteuerung fest | Mit gleichwertigen Schreibvorgängen auf Datenpunkten ersetzen. |
SETCHILLING | SET_CHILLING | Legt den Modus der Kältesteuerung fest | Mit gleichwertigen Schreibvorgängen auf Datenpunkten ersetzen. |
OPMODE | SET_OPMODE | Ändert den Betriebmodus des Objekts. | Durch gleichwertige Schreibvorgänge auf Datenpunkten ersetzen oder Funktion „SetOperatingMode“ aus der Tecla-JavaScript-Bibliothek verwenden. |
OSWITCH | SET_OSWITCH | Ähnlich des Befehls SWITCH/SCHALTEN. Zusätzlich wird die Überwachung des Verbrauchers über das Energiemanagementprogramm begonnen. | Mit gleichwertigen Schreibvorgängen auf Datenpunkten ersetzen. |
PHASE | SET_PHASE | Setzt die Phasenmarkierung eines Objekts |
|
DCOS | SET_DCOS | Ändert die DCOS-Markierung eines Objekts. |
|
SWITCH_OFF | SET_SWITCH_OFF | Ändert die Ausschalt-Markierung eines Objekts. |
|
BUFFER | SET_BUFFER | n/a |
|
RECOVER | SET_RECOVER | Koordiniert die „Wiederherstellung“ eines TECLA-Befehls. |
|
GLOBAL | SET_GLOBAL | n/a |
|
PRINTER | SET_PRINTER | n/a |
|
EVENT | SET_EVENT | n/a |
|
AWAIT | SET_AWAIT | n/a |
|
TCC | SET_TCC | n/a |
|
MACRO_T | SET_MACRO_T | n/a |
|
CLASS | SET_CLASS | n/a |
|
TOWARD | SET_TOWARD | n/a |
|
TO | SET_TO | n/a |
|
ZLOG | GetZLOG | n/a | Vom Scripting bereitgestellte logarithmische Funktionen verwenden |
ZSIN | GetZSIN | n/a | Vom Scripting bereitgestellte logarithmische Funktionen verwenden |
ZCOS | GetZCOS | n/a | Vom Scripting bereitgestellte logarithmische Funktionen verwenden |
ZTAN | GetZTAN | n/a | Vom Scripting bereitgestellte logarithmische Funktionen verwenden |
TECLA-Calls
- Servicepack 501 wurde erfolgreich installiert.
- Melden Sie sich bei der Konsole als Benutzer sicx an.
- Starten Sie das teclaCalls-Script.
Dies wird eine Liste der aufgerufenen TECLA-Scripts erstellen, inklusive der Information, wo sie aufgerufen werden. Dies beinhaltet Scripts, die ausgerufen werden von:
a. Zeitpläne
b. Alarme
c. Bilder
d. Scripts
Hinweis: Eine Liste aller Optionen kann mit teclaCalls –h angezeigt werden.

- Die Liste der TECLA-Aufrufe in Siclimat-X wird im aktuellen Arbeitsverzeichnis erstellt oder optional in einem angewählten Verzeichnis unter dem Dateinamen scriptCalls.csv ausgegeben.
- Die Liste enthält kommagetrennte Werte und kann in Microsoft Excel importiert werden.