WinCC VB-Script komisches Phänomen

DocHoff

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
hab ein Problem mit dem lesen von PLC-Variablen.

Ich möchte mit einem Script ein PLC-Array of TOD auslesen, am schnellsten würde das mit einer FOR-Schleife gehen.
Aber da hab ich schon das Problem.

Code:
For i = 0 To Anz_VAR
    Zeit_PT_Ro(i) = SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{"&i&"}")
Next

Es kommen (zum Teil) unbrauchbare Werte in der HMI an.
PLC: 01.01.1990 02:22:22 -> HMI: 08.03.2018 12:00:00



Wenn ich das Array so auslese funktioniert es:
Code:
Zeit_PT_Ro(1) = SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{1}")

PLC: 01.01.1990 02:22:22 -> HMI: 01.01.1990 02:22:22


TIAV14SP1
S71200 1214 DC/DC/RLY FW:4.2.1
TP700 Comfort FW14.0.1.0



MfG Hoffman
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich das Array so auslese funktioniert es:
Code:
Zeit_PT_Ro(1) = SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{1}")
In genau welchem WinCC funktioniert das so? :confused:
Bisher musste man Elemente von Arrays in VBS so ansprechen: SmartTags("ArrayVariable")(Index)

Wie heißt die HMI-Variable genau? "HMI_Zeiten_HMI_PT_Zeit_PT" oder "HMI_Zeiten_HMI_PT_Zeit_PT{1}"?
Ist diese HMI-Variable ein Array? Oder sind es viele einzelne HMI-Variablen "HMI_Zeiten_HMI_PT_Zeit_PT{1}", "HMI_Zeiten_HMI_PT_Zeit_PT{2}", ... ?


Ich möchte mit einem Script ein PLC-Array of TOD auslesen, am schnellsten würde das mit einer FOR-Schleife gehen.
Aber da hab ich schon das Problem.

Code:
For i = 0 To Anz_VAR
    Zeit_PT_Ro(i) = SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{"&i&"}")
Next

Es kommen (zum Teil) unbrauchbare Werte in der HMI an.
Es ist ein Irrtum wenn man denkt man würde mit diesem Code den Wert von PLC-Variablen lesen.
Tatsächlich wird mit diesem Code der Name einer HMI-Variable zusammengebastelt und dann der momentan im HMI liegende Wert dieser HMI-Variable gelesen (das kann der Startwert oder ein uralter Wert sein). Und es wird ein Lesen der Variable aus der PLC angestoßen, das Skript wartet aber nicht auf den aktuellen Wert.
Wenn Variablennamen erst im Skript zusammengebastelt werden, dann weiß WinCC nichts von der Verwendung dieser Variablen und aktualisiert sie nicht vorher.

Man könnte nun die Variablen zweimal lesen, einmal nur als Lesezugriff damit die Aktualisierung angestoßen wird, dann eine Weile warten, und dann ein zweites Mal lesen und die hoffentlich aktualisierten Werte übernehmen. Das funktioniert zwar hoch wahrscheinlich, doch nicht garantiert. Es ist stümperhaftes Gebastel.
Alle Variablen irgendwie in einem Bild verwenden und dann das Skript nur aus diesem Bild aufrufen ist auch nicht viel besser.

Man könnte die Aktualisierung der Variablen auf "Zyklisch im Betrieb" setzen, doch das ist auch keine gute Idee, zyklisch Mengen an Daten zu lesen die man vielleicht einmal am Tag braucht - man produziert unnötigerweise eine dauerhaft hohe Kommunikationslast.

Garantiert aktualisierte Werte aus der PLC ins HMI eingelesen bekommt man nur per Rezeptur.
Benutze mal die Forumssuche nach "GetDataRecordTagsFromPLC" - das Thema wurde schon unzählige Male hier im Forum behandelt.

Harald
 
Hallo,
sorry war einige Tage wegen Krankheit ziemlich platt.

Ich hatte ein Denkproblem mit dem Array.
Als ich die HMI-Variablenverknüpfung erstellt hatte habe ich nicht die gesamte Array-Struktur verknüpft sondern
jeden Index einzeln. Ist natürlich Quatsch!

So sahen die einzelnen Indexe aus:
SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{0}")
SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{1}")
SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT{2}") usw...

Hab das jetzt mal richtig gemacht und die Variable als Array verknüpft.
Code:
    For i = 0 To Anz_VAR
        Zeit_PT_Ro(i) = SmartTags("HMI_Zeiten_HMI_PT_Zeit_PT")(i)
    Next

Jetzt werden scheinbar auch die Variablen immer aktualisiert.

MfG Hoffman
 
Zurück
Oben