TIA V16 HMI VBscript wie aktualisiere ich hier eine Variable

NBerger

Level-3
Beiträge
1.415
Reaktionspunkte
395
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal,
Folgendes Problem:

Habe eine Arrayvariable angelegt (Array of real) 2000 Werte.
Die Aktualisierung ist auf "Auf Anforderung" eingestellt.

a:) Wie aktualisiere ich das Array in einem Script? (Die Hilfe sagt über AktualisiereVariable (mit Kennung) oder im Script: aber wie?)
UpdateTag x geht jedenfalls nicht!

b:) Wie greife ich im Script auf ein einzelnes Element zu?

B) hat sich erledigt: smartTags ( "Varname")(n) da soll man mal drauf kommen...
 
Zuletzt bearbeitet:
a:) Wie aktualisiere ich das Array in einem Script?
Einfach auf ein Array-Element lesend zugreifen und eine unbekannte Zeit warten ... und hoffen daß alle Elemente aktualisiert wurden :rolleyes:

Wenn Du Variablen und Arrays garantiert aktualisiert ins HMI einlesen willst, dann geht das nur mit Handshake, z.B. als Rezeptur mit den Datensatz-Systemfunktionen z.B. GetDataRecordTagsFromPLC
Tipp: Das Problem wurde schon oft gefragt/diskutiert, benutze mal die Forumssuche mit dem Suchbegriff GetDataRecordTagsFromPLC

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Aktualisierung ist auf "Auf Anforderung" eingestellt.

Das HMI aktualisiert eh keine Variablen im Script!!! jedenfalls nicht wenn's auf "bei Verwendung" eingestellt ist.

Und wenn's nur auf Anforderung aktualisiert werden soll dann sollte es doch möglich sein eine Anforderung loszutreten.

Und jetzt noch eine Rezeptur anlegen ... nö, nicht für ne Aktualisierung.


Notfalls halt ein Servicerequest
 
Das Zugreifen auf die Variable im Skript "tritt eine Anforderung los"
Wenn das Skript mit einer Schaltfläche aufgerufen wird, dann reicht schon das Aktivieren des Bildes mit der Schaltfläche, daß die Aktualisierung des Array losgetreten wird. Mit etwas Glück und einem langsamen Bediener ist das Array dann bei Skriptaufruf bereits aktualisiert :cool:

Harald
 
Das Zugreifen auf die Variable im Skript "tritt eine Anforderung los"

Sorry aber das ist definitiv nicht so!!!

Eine "normale" Variable wird durch ein Script schon nicht aktualisiert und erst recht keins mit"Auf Anforderung"

Hab's grade probiert...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann jetzt hier nicht für TIA sprechen - damit mache ich gerade nichts - aber im Grundsatz ist deine Beobachtung korrekt. Du mußt eine Variable tatsächlich zyklisch aktualisieren lassen damit sie wenigstens "irgendwann einmal" (bei Script-Verwendung) aktualisiert wird. Ich denke, dass sich dieses Systematik auch bei TIA nicht geändert hat.
Allerdings ist es trotz Allem so, wie schon von Harald genannt : wenn du dich darauf verlassen können willst, dass deine Variable im Script wirklich aktuell ist und nicht irgendeinen Vorgängerwert drinstehen hat kannst du nur den Rezept-Weg beschreiten weil tatsächlich nur hier ein echtes konsistentes Einlesen angestossen wird.
Mich wundert allerdings, dass es Siemens anscheinend immer noch nicht gelungen ist, diesen Ball mal aufzunehmen - andere Systeme können so etwas grundsätzlich ...
 
Das Zugreifen auf die Variable im Skript "tritt eine Anforderung los"
Sorry aber das ist definitiv nicht so!!!

Eine "normale" Variable wird durch ein Script schon nicht aktualisiert und erst recht keins mit"Auf Anforderung"

Hab's grade probiert...
Sorry, dann hast Du nicht richtig ausprobiert oder das Verhalten des Panels falsch interpretiert oder wir reden hier aneinander vorbei. Oder Siemens hat in V16 was geändert, was mindestens von WinCC flexible bis TIA V15.1 noch so funktioniert hat wie ich schrieb.

Nach all meiner Erfahrung wird die Aktualisierung definitiv "losgetreten". Das Skript wartet allerdings nicht bis die Variable aktualisiert ist, sondern arbeitet sofort mit dem momentanen Wert weiter. Der aktualisierte Wert ist erst später verfügbar. Ich schrieb bereits in #2 "und eine unbekannte Zeit warten".

Ob und wann die Aktualisierung angestoßen wird kann man so testen:
1) in einem Bild eine Meldeanzeige (x)Meldepuffer für Meldungen der Klasse System projektieren, damit man Systemmeldungen sieht
2) einen DB mit einer PLC-Variable projektieren, z.B. "DB_HMI", Data : Array[0..99] of Real
3) eine HMI-Variable mit der PLC-Variable verbinden, Erfassungsart "Auf Anforderung"
4) im Skript die HMI-Variable lesen:
Code:
Dim SkriptVar

ShowSystemAlarm "Skript aufgerufen" [COLOR="#008000"]'DEBUG Ausgabe[/COLOR]
SkriptVar = SmartTags("DB_HMI_Data")(0)
5) Projektierung ins Panel laden
6) im DB die PLC-Variable löschen - die HMI-Variable verliert die Verbindung zur PLC-Variable! und kann nicht mehr gelesen werden
7) den DB in die CPU laden
8) jetzt am Panel das Bild mit der Schaltfläche mit dem Skriptaufruf aktivieren oder das Skript aufrufen

Kommt eine Systemmeldung daß auf die HMI-Variable nicht zugegriffen werden konnte z.B. "Adressfehler Steuerung"?


Und jetzt noch eine Rezeptur anlegen ... nö, nicht für ne Aktualisierung.


Notfalls halt ein Servicerequest
Ja bitte tue das und berichte uns hier, was Siemens dazu sagt.

Harald
 
Zurück
Oben