TIA Beim Start der HMI die HMI-Variablen setzen

ManAtWork!

Level-1
Beiträge
89
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich stehe gerade vor einem, für euch wahrscheinlich kleinem, Problem.
Und zwar geht es um die Synchronisation zwischen HMI und PLC beim Neustart der PLC bzw beim Starten der HMI-Runtime.

Starte ich diese, dann werden mir alle PLC-Variablen( die mit den HMI-Variablen verknüpft sind) auf 0 gesetzt.
Wie Synchronisiere ich das am besten ?

Muss das über die Meldung 110001: "Change operating mode 'online' " abgefangen werden?:rolleyes::rolleyes:

Grüße
Dominik
 
Hallo Dominik,

in der Regel werden die Variablen nur dann aktualisiert wenn es notwendig ist, bzw. wenn sie im aktuellen Bild auch lesend verwendet werden. Wenn zum Beispiel eine Variable an einem "Eingabefeld" projektiert ist, dann wird diese nur einmal beim Bildaufbau aktualisiert. Anschließend kann sie nur durch die Eingabe am HMI verändert werden. Das ist die Charakteristik eines reinen Eingabefeldes. Ausgabefelder werden entsprechend der eingestellten Aktualisierungszeit (default 1s) zyklisch von der Steuerung gelesen und am HMI ausgegeben. Wahrscheinlich liegt dein Problem bei den reinen Eingabefeldern? Boykottiere einfach die "Eingabefelder" und verwende statt dessen "Ein/Ausgabefelder". Trifft das dein Problem?

Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei einem Neustart der PLC werden Variablen die z.B. im nicht remanenten Merkerbereich liegen auf 0 gesetzt. Wenn du diese Variablen "retten" willst dann musst die Bereiche remanent setzen oder z.B. in DBs verschieben.
 
Schon einmal vielen Dank für eure Antworten,

nehmen wir mal nur das Problem beim stoppen und wieder starten der Runtime auf dem HMI Panel (KTP900F Mobile).
Mir ist jetzt aufgefallen, dass nicht alle Verknüpften Variablen auf 0 gesetzt werden. Aber ich sehe auch nicht den Unterschied zwischen den Einzelnen.
Ich habe zb. eine Seite in der ich alle Zeiten für die Maschine einstellen kann. Dort sind ausschließlich Eingabe/Ausgabe Felder die mit einer zeit Variable, zb. zeit[1], belegt sind ( insgesamt zeit[0..250) Array of Time ).
Diese werden mir nach dem stoppen und starten der Runtime über das Panel wieder auf 0 gesetzt. Also die verknüpften Variablen in der PLC.

Auf einer anderen Seite habe ich Systemeinstellungen...zb für meine Achsen. Dort habe ich zb ein UDT mit den Limits. Diese werden nach dem starten nicht auf 0 gesetzt.
Bedingungen sind aber alle genau die gleichen - Ein/Ausgabefelder...Verknüpfung mit dem selben DB (Alle HMI-Variablen gehen erstemal auf den selben DB).

Grüße Dominik
 
Okay also ich denke ich habe den Fehler gefunden...jedoch habe ich keine Ahnung warum das so ist.

Und zwar habe ich zu Testzwecken ein Skript am laufen gehabt indem ich in einer dieser Zeiten einen Wert schreibe.
Dieses Skript wurde immer ausgeführt, wenn die Startseite aufgerufen wurde...also natürlich dann auch beim Start der Runtime.

Was mich hier aber wundert ist...ich schreibe doch lediglich in die zeit[5] einen Wert.
Trotzdem wird nach dem Start das komplette Array auf 0 geballert?

Wenn ich das Skript auskommentiere/nicht mehr aufrufe dann hat der ganze Spuck ein Ende.

Woran liegt das ?

Grüße Dominik
 
Zuletzt bearbeitet:
Hi A3Q,

das Skript sieht so aus:

Sub VBS_test()
'cleaning screen time
hmi_zeit(5) = 10
End Sub

Ich weiß...ziemlich komplexe Sache :ROFLMAO::ROFLMAO:
 
Zuletzt bearbeitet:
Das ist nicht normal. Normal werden beim HMI-Runtime-Start keine Variablen (außer Projektkennung und einige Bereichszeiger) in der PLC beschrieben, wenn man das nicht extra projektiert/programmiert. Hast Du irgendwo Werte schreiben in die PLC bei irgendwelchen Ereignissen drin?

Mache mal für das HMI "Übersetzen > Software (komplett übersetzen)"

Nachtrag:
Was mich hier aber wundert ist...ich schreibe doch lediglich in die zeit[5] einen Wert.
Trotzdem wird nach dem Start das komplette Array auf 0 geballert?
Dann ist alles klar: jeder Zugriff auf ein Array löst das Lesen oder Schreiben des gesamten Arrays aus. Unabhängige Variablen als Array deklarieren ist keine gute Idee, auch wenn es vermeintlich Arbeit spart.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann ist alles klar: jeder Zugriff auf ein Array löst das Lesen oder Schreiben des gesamten Arrays aus. Unabhängige Variablen als Array deklarieren ist keine gute Idee, auch wenn es vermeintlich Arbeit spart.

Das muss ich mir merken.
Also gibt es keine Möglichkeit, nur einem bestimmten Index einen Wert zuzuweisen, ohne die anderen in dem Fall auf 0 zu setzen? (Vom HMI aus per Skript)

-chris
 
Vielen Dank Harald,

das war mir nicht bewusst.
Die Antwort auf Chris seine Frage würde mich auch brennend interessieren.

Dominik
 
Also gibt es keine Möglichkeit, nur einem bestimmten Index einen Wert zuzuweisen, ohne die anderen in dem Fall auf 0 zu setzen? (Vom HMI aus per Skript)
Wenn man den Wert von nur einem Array-Element ändern will und die Werte der anderen Elemente beibehalten will, dann müsste man das komplette Array vorher einlesen und dann denn Wert ändern. Allerdings bekommt man keine Information, wann das lesen des kompletten Arrays abgeschlossen ist. Ein Skript wartet nicht auf das Ende des Einlesens sondern löst nur ein einlesen des Arrays aus, verwendet aber den Variablen-Wert wie er im Moment im HMI vorliegt - deshalb werden die anderen noch nicht gelesenen Array-Elemente auf 0 geschrieben.

Garantiertes Einlesen oder Schreiben von Arrays oder ganz allgemein von Variablen geht nur mit Handshake (z.B. was selbstgebasteltes oder als Rezeptur oder in WinCC Professional mit GetTagWait-Funktionen). Während des Lesens/Schreibens dürfen die Werte der Array-Elemente in der PLC und im HMI nicht verändert werden, weil die Änderungen ggf. verloren gehen oder Datentyp-Inkonsistenzen auftreten können. Dieses Problem wird oft erst bemerkt, wenn man Werte aus der SPS mit der HMI in csv-Dateien schreiben will - das Problem und weitere Effekte wurde hier im Forum schon sehr oft besprochen (Such-Stichwort: GetDataRecordTagsFromPLC).

Harald
 
Zurück
Oben