WinCC Unified Bit-Verarbeitung in Unified Faceplate

Zuviel Werbung?
-> Hier kostenlos registrieren
Musst du ja nicht.Ein Boolarray ist eine Variable.Zugriff über den Index.
Dort sind auch keine Worte verdreht.
Bei nem HMI-Array hast im Endeffekt das gleiche Problem, dass das ganze Array geschrieben wird...
Also eigentlich nur Struct oder UDTs mit Bools drinn machts einfacher...
 
Vo allem können die Bits in Struct/UDT Namen haben und sind nicht nur (oft ungenügend dokumentierte) nichtssagende Nummern im DWORD.
Wenn man unbedingt Tags und/oder Deklarationsarbeit sparen will, dann nur in Richtung PLC zu HMI. Vom HMI zur PLC sollte man immer nur separate Variablen verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ganz konkret heisst das dann bei Faceplates definiere ich einen globalen Datenbaustein und mithin einen UDT.
Die UDT's Ausprägungen pro Motor(als Bsp.) lege ich dort ab und greife dann im HMI pro Faceplate darauf zu.
Im Faceplate selbst habe ich eine HMI-Variable angelegt die vom gleichen Typ ist wie die SPS Variable ist.
Der Punkt wo mir nioch nicht ganz klar ist.Die Anbindung der SPS variable an die HMI Variable vom Faceplate erfolgt über die Prozesswert Eigenschaft?
 
Ganz konkret heisst das dann bei Faceplates definiere ich einen globalen Datenbaustein und mithin einen UDT.
Die UDT's Ausprägungen pro Motor(als Bsp.) lege ich dort ab und greife dann im HMI pro Faceplate darauf zu.
Im Faceplate selbst habe ich eine HMI-Variable angelegt die vom gleichen Typ ist wie die SPS Variable ist.
Der Punkt wo mir nioch nicht ganz klar ist.Die Anbindung der SPS variable an die HMI Variable vom Faceplate erfolgt über die Prozesswert Eigenschaft?
Die Diskussion hier hat ja nur am Rande etwas mit unifiedfaceplates zu tun... es sei denn, im unifiedfaceplate wär noch nen separater bug.
Wie die unifiedfaceplates im Detail funktionieren, weiss ich nicht. Wie gesagt, ich fang voraussichtlich erst nächstes Jahr mit unified an und dann evtl. hoffentlich mit TIA V20...
Zur konkreten Benutzung von unifiedfaceplates könnte man einen separaten thread aufmachen.
 
Hallo,
ich habe eine Lösung für mein Problem gefunden und diese im Anhang beigefügt. Ich lese und maskiere die Variablen selbst, und so funktioniert es!
  1. Die Funktion LeseUndSetzeBitInVariable bzw. ReadAndSetBitInTag ist in Unified – in der Comfort-Panel-Variante ist nicht verfügbar.
  2. Ich vermute, dass es sich hierbei um einen Bug in Unified handelt. Die Funktion außerhalb des Faceplate verhält sich gleich. Eine Anfrage beim Siemens-Support habe ich allerdings noch nicht gestellt.

Siemens sollte die Systemfunktion SetzeBitInVariable so gestalten, dass die Variable vor dem Ausführen automatisch gelesen wird. Wie bereits erwähnt, habe ich kein Zeitproblem in meiner Anwendung.

Ich setze das Bit 16 eines DWORDs (Step + 1), die SPS erkennt das gesetzte Bit, führt die entsprechende Aktion aus und setzt Bit 16 anschließend wieder zurück. Dadurch springt die Schrittkette in den nächsten Schritt.

Anschließend könnte ich beliebig lange warten – selbst nach drei Minuten, wenn ich das Bit 29 (oder ein anderes Bit des DWORDs) setze, wird vom HMI trotzdem erneut Bit 16 gesetzt. Allerdings passiert dies nur einmal. Danach kann ich Bit 29 beliebig oft setzen, und es wird ausschließlich Bit 29 gesetzt. Das Bit 29 wird dabei von der SPS nicht manipuliert.



Leider fehlt mir die Zeit, der Sache genauer auf den Grund zu gehen. Aber ich habe zumindest eine funktionierende Lösung gefunden.
Vielen Dank an euch alle!

1732175874125.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Siemens sollte die Systemfunktion SetzeBitInVariable so gestalten, dass die Variable vor dem Ausführen automatisch gelesen wird.
Das würde das Problem auch nicht lösen, weil bei der Kommunikation Zeit vergeht.
Noch ein letztes mal: da ist kein Bug, sondern das ist ein grundsätzliches Problem, was nur mit zusätzlichem Handshake für die Schreibzugriffe gelöst werden kann.
 
ich habe eine Lösung für mein Problem gefunden und diese im Anhang beigefügt.
Wie Harald schon geschrieben hat, auch wenn du die Variable einliest, änderst und wieder zurückschreibst. Dies dauert kurz. Wird in dieser kurzen Zeit die Variable auf der SPS geändert, so wird diese Änderung von der VISU verworfen, sobald diese zurück schreibt.

Und das ist kein Bug. Das ist einfach nur logisch.
 
Wie Harald schon geschrieben hat, auch wenn du die Variable einliest, änderst und wieder zurückschreibst. Dies dauert kurz. Wird in dieser kurzen Zeit die Variable auf der SPS geändert, so wird diese Änderung von der VISU verworfen, sobald diese zurück schreibt.

Und das ist kein Bug. Das ist einfach nur logisch.
Fakt ist, dass mein Code funktioniert und ich das von dir beschriebene 'Fehlverhalten' bisher nicht reproduzieren konnte.

Du sagst: 'Dies dauert kurz. Wird in dieser kurzen Zeit die Variable auf der SPS geändert, so wird diese Änderung von der VISU verworfen, sobald diese zurück schreibt.'
Ich verstehe nicht ganz: Wie kurz ist kurz? In meinem Fall kann ich gar nicht so schnell agieren, um das Problem hervorzurufen. Kannst du genauer erklären, wie diese 'kurze Zeit' in der Praxis aussieht? Meinst du, dass selbst mein Code irgendwann dieses Verhalten zeigen könnte, obwohl ich es aktuell nicht nachvollziehen kann?

Danke für die Geduld, ich will das wirklich verstehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fakt ist, dass mein Code funktioniert und ich das von dir beschriebene 'Fehlverhalten' bisher nicht reproduzieren konnte.
Also ich schreibe es jetzt zum letzten mal. Ja, es funktioniert jetzt 1x, 100x, 1.000x und 10.000x. Aber irgendwann wird der Tag kommen bei dem der Fehler auftritt ( wenn auf der CPU auch in diese Variable geschrieben wird ).

Das fällt dir jetzt am Schreibtisch natürlich nicht auf sondern erst, wenn die Anlage durchgehend läuft ( und dann hochsporadisch ).
 
Also ich schreibe es jetzt zum letzten mal. Ja, es funktioniert jetzt 1x, 100x, 1.000x und 10.000x. Aber irgendwann wird der Tag kommen bei dem der Fehler auftritt ( wenn auf der CPU auch in diese Variable geschrieben wird ).

Das fällt dir jetzt am Schreibtisch natürlich nicht auf sondern erst, wenn die Anlage durchgehend läuft ( und dann hochsporadisch ).
Hmm, ich weiss nicht. Irgendwie hört sich das aber auch so an, als wenn da trotzdem (vielleicht manchmal) noch nen Bug im unified ist, und unified (manchmal) nicht richtig liest, bevor es schreibt. Oder noch was anderes im Argen ist...
 
Zuletzt bearbeitet:
Ist doch eigentlich egal - wenn die Funktion für die Aufgabe schon grundsätzlich nicht geeignet ist, dann ist egal, ob in der nicht genutzten Funktion vielleicht Bugs drin sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du ALLE 4 Voraussetzungen gemäß FAQ erfüllt?
Ist des nun ein Unified Bug oder nicht? Supportanfrage gestellt?
Ich muss hier schon bissl drauf drängen, dass die Bugs langsam ausgemerzt werden, bevor ich nächstes Jahr son Ding in die Hand kriege.🥳
Ja, alle vier Punkte sind erfüllt! Eine Support-Anfrage wurde gestellt, und ich warte noch auf die Antwort. Bisher habe ich Unified nur als Panel genutzt und muss sagen, dass ich schon einige Bugs gefunden habe, für die ich mit Siemens einen Workaround erstellt habe. Alle meine Faceplates, die ich auch in WinCC hatte (Ventile, MO, FU's, AI…), sind jetzt fertig. Die Stabilität und Funktionalität sind inzwischen sehr gut. Leider funktioniert das Delta-Laden seit Version 19.1 und 19.3 nicht mehr richtig, und ich muss immer eine vollständige Übersetzung und ein vollständiges Laden der Software durchführen, was ziemlich nervig ist. Ansonsten setzen wir bei allen Unit-Anlagen Unified MTP1900 ein (Comfortpanels werden nicht mehr verwendet). Das Panel fungiert gleichzeitig als Server und ermöglicht die Verbindung von bis zu drei Clients über das Web (geräten unabhängig). Wichtiger Hinweis: MTP1900 wegen der 1920x1080 Auflösung, sonst werden die Bilder auf dem Client skaliert!
 
Zurück
Oben