Hallo LV-Gemeinde,
ich hab grad Pech beim Denken und hoffe das jemand ne gute Idee hat.
Ich hab über Modbus TCP-IP eine Verbindung zu einer SPS aufgebaut, und kann da die Variablen auslesen (read holding Registers) und schreiben (write multiple Registers). Kommt alles an und passt erstmal soweit. Nun hab ich in einer While-Schleife eine Eventstruktur welche im timeoutcase mir alle 100ms die Werte liest und auf die Frontpanelelemente gibt. Einige dieser Frontpanelelemente sind Bedienelemente wie Motor An/Aus oder Sollposition. Um in diese schreiben zu können komme ich nicht darum lokale Variablen oder Eigenschaftsknoten dieser zu erstellen.
Nun habe ich weitere Ereignis-Case in denen ich bei "value change" den Wert an die SPS schreibe. Das klappt zwar, aber manchmal wird mein neuer Wert noch vor dem senden von dem alten (ausgelesenen) Wert überschrieben (selbst bei booleans!!). Wie kann ich das verhindern? Macht die Eventstrucktur immer erst das case fertig bevor sie auf das nächste Event reagiert?
- Lesefrequenz runtersetzen ist keine Option, da die Messwerte mit dieser Protokolliert werden soll
- Haken bei "Frontpanel während case für bedienung sperren" klappt nicht
- Es handelt sich um 50 Register mit read und r/w bunt gemischt, also trennung dieser seeeehr aufwendig
- Bedienelemente nur am Anfang lesen ist auch keine Option, da ich sehen will das der neue Wert angekommen ist bzw. welcher grad drin steht (SPS kann auch ändern)
Bin beim Forum surfen auf den Begriff Queue gekommen, hab aber keine Idee wie ich das einbinden soll.
Hatte auch schon die Idee State-Maschine, aber 50 Schieberegister??
Beste Grüße