WinCC Script - If variabler SmartTag = true

MrTrustMir

Level-2
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe auf der PLC einen DB (Name=Data) mit 100 Strukturen (Namen=1 bis 100) und darin verschiedene Daten. Diese sind verknüpft mit HMI Variablen (z.B. Data_1_Valid). Ich würde gerne die restlichen Daten nutzen, wenn das Bit "Valid" True ist. Mit einer For-Schleife wollte ich halt alle Valid-Bits prüfen. Würde so aussehen:
Code:
For C1=1 To 100 Step 1      
    If SmartTags("Data_"&C1&"_Valid")=True Then
        'DO STH      
    End If  
Next
Aber irgendwie geht das nicht. Woran kann es liegen?

Viele Grüße
 
Das liegt wahrscheinlich an dem Vorzeichen-Leerzeichen, das bei der Umwandlung von C1 in den Datentyp String entsteht.
Lass Dir das Ergebnis von "Data_"&C1&"_Valid" mal im Debugger-Fenster (weiß jetzt gerade nicht wie das heißt) ausgeben, dann siehst Du, was ich meine.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es könnte daran liegen, wie von ASCI genannt - es ist aber auch so, dass die Script-Variablen nicht aktualisiert werden, vor Allem, da du ja den Tag-Namen noch selbst zusammenbastelst. Wie hast du denn die Aktualisierung dieser Variablen eingestellt ? Dort sollte "zyklisch fortlaufend" stehen ...
Das solltest du aber dann tatsächlich auch nur bei den Script-Variablen so machen ...

Gruß
Larry
 
Das liegt wahrscheinlich an dem Vorzeichen-Leerzeichen, das bei der Umwandlung von C1 in den Datentyp String entsteht.
Lass Dir das Ergebnis von "Data_"&C1&"_Valid" mal im Debugger-Fenster (weiß jetzt gerade nicht wie das heißt) ausgeben, dann siehst Du, was ich meine.
Von einem Debugger-Fenster für VBS weiß ich garnichts. Wo kann ich mir da live-Werte anzeigen lassen?
Es könnte daran liegen, wie von ASCI genannt - es ist aber auch so, dass die Script-Variablen nicht aktualisiert werden, vor Allem, da du ja den Tag-Namen noch selbst zusammenbastelst. Wie hast du denn die Aktualisierung dieser Variablen eingestellt ? Dort sollte "zyklisch fortlaufend" stehen ...
Das solltest du aber dann tatsächlich auch nur bei den Script-Variablen so machen ...

Gruß
Larry
Habe alle ("Valid" und auch die anderen Daten) auf "zyklisch fortlaufend" gestellt und es funktioniert. Ich hatte zuvor alle auf "absolute access" gestellt, was jedoch nichts brachte.
Da es sich um ziemlich viele Daten (Strings) handelt würde ich es gerne anders lösen. Wenn ich das richtig verstehe werden die Tags bei "cyclic in operation" nur aktualisiert, wenn diese auf dem Bild verwendet werden, jedoch nicht durch ein VBScript. Lässt sich die Aktualisierung irgendwie einmalig anschieben?
Hast Du die 100 HMI-Variablen Data_1_Valid, Data_2_Valid ... Data_100_Valid angelegt?

Welche WinCC Runtime auf welchem Gerät verwendest Du?

Harald
Ja, alles durch drag-and-drop des DBs erstellt. TP1200 Comfort PRO, TIA V16
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Von einem Debugger-Fenster für VBS weiß ich garnichts. Wo kann ich mir da live-Werte anzeigen lassen?
Bei WinCC Comfort/Advanced: Live-Werte anzeigen ist am einfachsten durch Testausgaben als Systemmeldung möglich:
ShowSystemAlarm "ScriptXYZ WertA='" & varA & "'"
Mache in ein Bild eine Meldeanzeige für Meldeereignisse (TIA: "Meldepuffer") der Meldeklasse System, damit Du die Testausgaben und auch Runtime-Fehlermeldungen sehen kannst.

ShowSystemAlarm funktioniert auch auf dem Comfort Panel, man braucht dafür keinen Debugger installieren. Auf dem Engineering/Test-PC ist auch dies möglich:
Früher habe ich auch oft parallel "DebugView" von Sysinternals laufen lassen.
Dann kann man im Script mit dem Befehl "HmiRuntime.Trace" eine Ausgabe von Texten und auch Variablenwerten in den Debugger schreiben.
Das finde ich praktischer als die Verwendung von "ShowSystemAlarm"


Habe alle ("Valid" und auch die anderen Daten) auf "zyklisch fortlaufend" gestellt und es funktioniert. Ich hatte zuvor alle auf "absolute access" gestellt, was jedoch nichts brachte.
Zur Variablen-Aktualisierung schau mal hier die Beiträge #22 und #23: https://www.sps-forum.de/threads/script-aus-plc-programm-starten.104087/page-2#post-788849


Da es sich um ziemlich viele Daten (Strings) handelt würde ich es gerne anders lösen. Wenn ich das richtig verstehe werden die Tags bei "cyclic in operation" nur aktualisiert, wenn diese auf dem Bild verwendet werden, jedoch nicht durch ein VBScript. Lässt sich die Aktualisierung irgendwie einmalig anschieben?
Warum eigentlich willst Du die Valid-Variablen abfragen? Und warum so viele einzelne Variablen? Kannst Du nicht in der PLC ein Sammelbit oder eine numerische Sammelvariable bilden? Oder die Bits hintereinanderweg in ein Array legen oder in Variablen extra fürs HMI kopieren?
Willst Du womöglich Variablenwerte der Strukturen exportieren z.B. in eine Datei schreiben? Da bekommst Du als nächstes das Problem, daß die anderen "Nutzdaten"-Variablen der Strukturen nicht aktualisiert sind. Daten und insbesondere Strings garantiert aktualisiert bekommt man nur mit Handshake aus der PLC ins HMI eingelesen, z.B. als Rezeptur. Verwende die Forumssuche mit dem Suchbegriff GetDataRecordTagsFromPLC

Falls Du viele Daten aus der PLC lesen und in Dateien schreiben willst, dann wäre ein Lese-Programm auf einem richtigen PC viel einfacher und sicherer handelbar. Da gibt es fertige Auslese/Backupprogramme oder man verwendet Kommunikations-Bibliotheken wie ACCON-AGLink oder Snap7 oder Libnodave oder ... und schreibt sich selber ein Programm als eigenständige exe/App oder in Excel oder.... Oder die PLC sendet die Daten ohne Umweg übers HMI direkt an einen Server auf einem PC. Welche SPS hast Du?

Harald
 
Von einem Debugger-Fenster für VBS weiß ich garnichts. Wo kann ich mir da live-Werte anzeigen lassen?
Ich bin aufgrund des Eröffnungspostes davon ausgegangen, dass Du mit der WinCC (professional) arbeitest. Da hatte ich die GSC-Runtime gemeint.
TP1200 Comfort PRO, TIA V16
Dann wurde klar, dass Du mit der WinCC Advanced hantierst. Da geht das anders. Nur habe ich mit WinCC flexible und Advanced weniger Erfahrung.
 
Warum eigentlich willst Du die Valid-Variablen abfragen? Und warum so viele einzelne Variablen? Kannst Du nicht in der PLC ein Sammelbit oder eine numerische Sammelvariable bilden? Oder die Bits hintereinanderweg in ein Array legen oder in Variablen extra fürs HMI kopieren?
Willst Du womöglich Variablenwerte der Strukturen exportieren z.B. in eine Datei schreiben? Da bekommst Du als nächstes das Problem, daß die anderen "Nutzdaten"-Variablen der Strukturen nicht aktualisiert sind. Daten und insbesondere Strings garantiert aktualisiert bekommt man nur mit Handshake aus der PLC ins HMI eingelesen, z.B. als Rezeptur. Verwende die Forumssuche mit dem Suchbegriff GetDataRecordTagsFromPLC

Falls Du viele Daten aus der PLC lesen und in Dateien schreiben willst, dann wäre ein Lese-Programm auf einem richtigen PC viel einfacher und sicherer handelbar. Da gibt es fertige Auslese/Backupprogramme oder man verwendet Kommunikations-Bibliotheken wie ACCON-AGLink oder Snap7 oder Libnodave oder ... und schreibt sich selber ein Programm als eigenständige exe/App oder in Excel oder.... Oder die PLC sendet die Daten ohne Umweg übers HMI direkt an einen Server auf einem PC. Welche SPS hast Du?

Harald
Ich habe erstmal nicht vor die gesamten Daten der PLC in Dateien zu schreiben o. Ä. Es geht nur um die Anzeige der Daten. Die Valid-Daten "zusammenzufassen" würde nicht so viel nutzen, da ja die Nutzdaten ebenfalls permanent zyklisch geupdatet werden müssten - wie du auch bereits erwähnt hast.
Ich hatte noch die Option "On Demand" gesehen. Jedoch kann ich nur 100 einzelne Tags via Script updaten (TIA V16). Jede Update ID ist einmalig. Das scheint auch schon länger so zu sein. Oder ist es bei TIA 17 eventuell geändert worden?
CPU: ET200 1512F
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte noch die Option "On Demand" gesehen. Jedoch kann ich nur 100 einzelne Tags via Script updaten (TIA V16). Jede Update ID ist einmalig. Das scheint auch schon länger so zu sein. Oder ist es bei TIA 17 eventuell geändert worden?

Seit dem letzten Jahrhundert ;) bis mindestens TIA V15.1 gilt
Aktualisieren des Variablenwerts in Runtime (Basic Panels, Panels, Comfort Panels, RT Advanced)
• Wenn Sie die Erfassungsart "Auf Anforderung" wählen, wird die Variable nicht zyklisch aktualisiert. Die Aktualisierung erfolgt nur auf Anforderung, z. B. durch die Systemfunktion "Aktualisiere Variable" oder durch ein Skript.
... oder bei Bildaufschlag.

Die Systemfunktion "AktualisiereVariable" kann nicht in Skripten verwendet werden. Was mit "oder durch ein Skript" gemeint ist weiß ich nicht. Wie aktualisierst Du Tags via Skript?

Die Aktualisierungskennung (Update ID) ist auch "schon immer" auf 1..100 begrenzt und zwei Variablen können nicht die selbe Aktualisierungskennung haben.

Harald
 
Die Systemfunktion "AktualisiereVariable" kann nicht in Skripten verwendet werden. Was mit "oder durch ein Skript" gemeint ist weiß ich nicht. Wie aktualisierst Du Tags via Skript?

Die Aktualisierungskennung (Update ID) ist auch "schon immer" auf 1..100 begrenzt und zwei Variablen können nicht die selbe Aktualisierungskennung haben.

Dass die Variablen angeblich durch ein Script aktualisiert werden können, habe ich auch in alten Beiträgen gefunden, aber nie ein Befehl/eine Lösung gesehen. Habe Siemens jetzt mal direkt gefragt.
Eventuell hat sich auch was mit TIA 17 geändert:
Gruß
 
Eventuell hat sich auch was mit TIA 17 geändert:
Da gibt es anscheinend tatsächlich "revolutionäre" Neuerungen ab TIA V17 WinCC Unified:
4. In a button event, for example, call the system function “Update Tag” and give the ID set in the step 3 (or the equivalent in Java Script “HMIRuntime.Tags.SysFct.UpdateTag(‘ID number’);”
TIP:

• if you intend to update several tag at the same time/event, use the same Update ID number for them.
Kurz:
Die Systemfunktion "AktualisiereVariable" (UpdateTag) kann in Java Script verwendet werden.
Man kann mehreren HMI-Variablen die gleiche Aktualisierungskennung (Update ID) geben und die werden dann gemeinsam aktualisiert.

Warum wird das Aktualisieren "auf Anforderung" so umständlich gelöst? Hätten man nicht einfach GetTagWait implementieren können? Oder denken sie, daß dann die normal doofen Anwenderprogrammierer GetTagWait zyklisch verwenden würden und die ganze WinCC Runtime ausbremsen? ;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Java Script? Bei welchen panels ist diese Funktion somit gegeben? Bei alle PC-basierten HMIs? Also WinCC RT Adv. und Unified PC?
Und bei selbigen könnte man dann auch die Update ID mehrfach vergeben?
 
Java Script geht bei Plattformen die "WinCC Unified" können, es gibt neue Unified Comfort Panels.
Update ID mehrfach vergeben: der Autor des verlinkten Siemens Beitrages erwähnt das.
Ich habe mit all dem keine Erfahrung.

Harald
 
Zurück
Oben