TIA Bildbausteinwertaktualisierung erfolgt nicht an anderen Panels, nach Wertänderung an einem Panel

trabajador73

Level-2
Beiträge
159
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Verwendet werden TP1500 Comfort und CPU 1518TF mit TiaPortal V18.
An einem E/A-Feld eines Bildbausteins wird eine Wertänderung vorgenommen und daraufhin dieser neue Wert auch in der angebundenen DB-Variable übernommen.
Dieser Bildbaustein wird an mehreren Panels verwendet mit der gleichen angebundenen Variablen.
Jedoch der neue Wert wird nicht an anderen Panel angezeigt, außer am Panel, bei welchem der Wert geändert worden ist.
Normal funktioniert eine automatische Aktualisierung an anderen Panels von diesem Bildbaustein. Bei diesem Projekt erfolgt im Bildbaustein zudem mittels Skript eine Umrechnung des Wertes von Feet in Meter für ein E/A-Feld und Meter in Feet bei einem Ausgabefeld.
Hier der Quellcode des Skripts:
'TagOut from HMI to PLC:
SmartTags("Properties\Interface.InputDistance") = SmartTags("InputDistance")* SmartTags("feet to meter")
SmartTags("Properties\Interface.Length") = SmartTags("Length") * SmartTags("feet to meter")

'TagIn from PLC to HMI:
SmartTags("CalcDistance") = SmartTags("Properties\Interface.CalcDistance") * SmartTags("meter to feet")

Vielleicht gibt es eine Möglichkeit alles in einem Skript des Bildbausteins zu lösen, das Aktualisieren von geänderten Wert des angebundenen DBs.
Danke für jeden Beitrag.
 
An einem E/A-Feld eines Bildbausteins wird eine Wertänderung vorgenommen und daraufhin dieser neue Wert auch in der angebundenen DB-Variable übernommen.
Mit "angebundene DB-Variable" meinst du die Variable in der PLC? In der PLC kommt der geänderte Wert an?
Was für einen Datentyp hat die Variable?

Jedoch der neue Wert wird nicht an anderen Panel angezeigt, außer am Panel, bei welchem der Wert geändert worden ist.
Wie wird denn die Variable an den anderen Panels "verwendet" und aktualisiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit "angebundene DB-Variable" meinst du die Variable in der PLC? In der PLC kommt der geänderte Wert an?
Was für einen Datentyp hat die Variable?
Vielen Dank für die Unterstützung PN/DP.
Die Variable hat den Datentyp "real" und wird in der PLC, also Steuerungsprogramm verwendet und der Wert wird auch korrekt von Feet in Meter im Bildbaustein umgerechnet und dann korrekt in einem DB der SPS auch gespeichert.
Die Variablenstruktur der Bildbausteinschnittstelle ist identisch, wie ein Bereich von einem DB, welcher an den Bildbaustein mittels Pointer angebunden ist.
Wie wird denn die Variable an den anderen Panels "verwendet" und aktualisiert?
Die EA-Felder des Bildbausteins sind über dessen Schnittstelle mit einem DB der PLC verknüpft. Alle EA-Felder dieses Bildbausteins sind mittels dem gleichen Pointer an der Bildbausteinschnittstelle mit dem jeweiligen Bereich des DBs verbunden.
Alle Panels sind gleich gehalten, daher der Aufruf des Bildbausteins erfolgt mit dem gleichen Pointer in allen Panels.
Aber wenn der Wert in einem Panel geändert wird, dann erfolgt aktuell keine Wertaktualisierung an den anderen Panels aufgrund des Skripts mit einer Umrechnung von der Eingabe in Feet zur Einheit Meter.
Die automatische Wertaktualisierung erfolgt, wenn keine Umrechnung gemacht wird.

Je länger das verwendete Skript von mir begutachtet wird, umso mehr wird mir auch klar, warum das nicht funktionieren kann.
Es erfolgt nur eine Umwandlung von Feet in Meter, also von der Paneleingabe in Feet wird korrekt in Meter umgewandelt, und anschließend korrekt an die PLC übermittelt.
Aber eine Wertänderung von der Steuerung, also PLC, an das EA-Feld des Bildbausteins kann nicht verarbeitet werden, weil keine Umwandlung von Meter in Feet für das EA-Feld erfolgt.
Ich weiß aber auch nicht, wie dies möglich sein könnte in einem Skript im Bildbaustein.

Sub UnitConversion()
'TagOut from HMI to PLC
SmartTags("Properties\Interface.InputDistance") = SmartTags("InputDistance")* SmartTags("feet to meter")
SmartTags("Properties\Interface.Length") = SmartTags("Length") * SmartTags("feet to meter")

'TagIn from PLC to HMI
SmartTags("CalcDistance") = SmartTags("Properties\Interface.CalcDistance") * SmartTags("meter to feet")
End Sub
 
Muss denn die Umrechnung mit 2 Variablen und per Skript gemacht werden? Warum geht nicht die Skalierung in den Eigenschaften der einen Variablen? Zu viele Skripte insbesondere bei Variablenänderungen belasten Comfort Panels. Das ist nicht so gedacht,..
Damit eine Variable aktualisiert wird, muss sie im aktuellen Bild verwendet werden oder die Aktualisierung auf "zyklisch fortlaufend" eingestellt werden.
 
Hi,

eine dumme Frage, wahrscheinlich wirds das nicht sein, weil gesagt wurde, dass es in anderen Projekten funktioniert.

Will es dennoch los werden :D
Ist das EA-Feld vielleicht nur auf "Eingabe" gestellt, statt auf "Eingabe/Ausgabe".
Das würde das Problem auch erklären.
 
Ich denke mal, das Problem liegt hier in der Skripterei zwischen 2 Variablen, mit Trigger der Wertänderung der Quellvariable, die aber im Bild nicht verwendet wird und deshalb nicht aktualisiert wird und deshalb das Skript nicht antriggert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke mal, das Problem liegt hier in der Skripterei zwischen 2 Variablen, mit Trigger der Wertänderung der Quellvariable, die aber im Bild nicht verwendet wird und deshalb nicht aktualisiert wird und deshalb das Skript nicht antriggert.
Was "PN/DP" äußert, macht für mich am meisten sinn.
Ist das EA-Feld vielleicht nur auf "Eingabe" gestellt, statt auf "Eingabe/Ausgabe".
Das würde das Problem auch erklären.
Das EA-Feld ist mit Ein- und Ausgabe parametriert.
Da sollten wohl 2 Felder her:
1. das die Werte der SPS anzeigt, ein 2. (kann auch irgendwie drüber leigen) für die Eingabe und Umwandlung.
Zwei EA-Felder mit ein und derselben Variablen, wie soll denn die Sichtbarkeit gesteuert werden. Das Ausgabefeld muss eigentlich immer sichtbar sein. Wie soll dann das EA-Feld sichtbar werden. Wenn eine unsichtbare Schaltfläche über beide Buttons gelegt wird, dann könnte damit diese unsichtbare Schaltfläche auch für das System unsichtbar gemacht indem eine Variable gesetzt wird für 20 Sekunden mit Berührung und anschließend wieder zurückgesetzt werden im Steuerungsprogramm. Mit dieser Variablen wird dann das EA-Feld sichtbar und das Ausgabefeld unsichtbar.
Jedes EA-Feld bräuchte dann eine eigene Variable. Das Skript arbeitet nur Umrechnung Feet nach Meter, wenn diese Variable true anderenfalls nur Meter nach Feet. Eventuell mit dieser Lösung ist es möglich, alle Panels gleich zu halten.
Aktuell versuche ich eine Lösung mit 2 separaten DBs und einer gleichen Struktur. Der Bildbaustein wird mit einem DB der Angabe Feet verbunden und das SPS-Programm mit dem Standard-DB.
Sobald eine Wertänderung erfolgt am Panel, schreibt der Feet-DB den Wert in eine Zwischenvariable und mit anschließender Umrechnung dann in den Standard-DB. Der Rest der Schnittstellenstruktur wird 1:1 übermittelt.
Damit sollte kein weiteres Skript notwendig sein im Bildbaustein. Ich habe wahrscheinlich nicht an alles gedacht, aber fange somit an. Diese Lösung ist auch durchschaubar.
Vielmals danke für Eure bisherige Unterstützung und Vorschläge und bin offen für jede Anregung.
 
Die Umrechnung von Feet in Meter bzw. von Meter in Feet erfolgt nicht im Bildbaustein, sondern direkt bei der Variablenzuweisung.
Es ist ein weiterer DB erstellt worden mit der gleichen Schnittstellenstruktur, denn so ist es möglich in einer For-Schleife alle Schnittstellen in einer Array-Struktur zuzuweisen.
Dabei ist wesentlich nur darauf zu achten, welche Schnittstellenvariable jeweils die Signalquelle ist.
Diese Lösung ist auch transparent und einfach nachzuvollziehen für jeden anderen.
Ein Umrechnungsskript mit internen Hmi-Variablen ist auch nicht möglich, nach Aussage von Siemens, weil für diese ein Loop-Breaker Sicherheitsmechanismus verknüpft ist, um Endlosschleifen zu verhindern. Es könnten normale globale Variablem verwendet werden für die Skriptvariablen, aber dann ist der Programmieraufwand mit einem zweiten DB noch viel mehr sinnvoller und eben auch einfacher zu verstehen.

Hier noch die genaue Erklärung von Siemens:
"Der Loop-Breaker ist ein Sicherheitsmechanismus um Endlosschleifen zu verhindern. Im Detail geht es hier um HMI-Interne Variablen. Wenn auf HMI-Interne Variablen auf das Wertänderungsereignis ein Skript ausgeführt werden soll, dann wird dies nur angestoßen, wenn eine explizite Bedienhandlung ausgeführt wird. Das heißt nur wenn an einem EA-Feld der Wert dieser internen Variable von Hand geändert wird, dann wird das Wertänderungs-Ereignis ausgeführt. Wenn hingegen beispielsweise über einen Button die Systemfunktion "SetzeVariable" projektiert wird und über diese die interne HMI-Variable verändert wird, dann wird das Wertänderungs-Ereignis nicht ausgelöst, da die Wertänderung selbst nicht durch eine explizite Bedienhandlung erfolgt ist.
Damit soll verhindert werden das, wenn am Wertänderungsereignis ein Skript angehängt ist welches die Wertänderungsvariable selbst verändert (und somit wieder das Wertänderungsskript triggern würde) durch das erneute triggern des Skriptes in eine Endlosschleife gerät."
 
solche "Skripterei" für jeden Pups kann man bei "richtigem" WinCC oder WinCC Prof machen, aber nicht bei WinCC Comfort/Advanced

Skripte insbesondere bei Variablenänderungen belasten Comfort Panels. Das ist nicht so gedacht,..

Die Umrechnung Meter - Feed kann man auch ganz einfach in der SPS machen. Oder direkt als Skalierung in den Eigenschaften der Variablen.
 
Zurück
Oben