WinCC Unified Bit-Verarbeitung in Unified Faceplate

pramkies

Level-2
Beiträge
79
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Im TIA Portal Version 19 Update 2 wird ein Unified-System mit einem Faceplate verwendet. Dieses Faceplate enthält mehrere Tasten (Command-Keys). Jede Taste setzt ein spezifisches Bit innerhalb einer Doppelwort-Variable (DWORD). Die Funktionalität der Tasten basiert auf dem von Siemens bereitgestellten Skript "SetzeBitinVariable".


Fehlerbeschreibung:
Bei der Nutzung der Command-Keys tritt ein unerwartetes Verhalten in der Steuerung auf. Das Problem äußert sich wie folgt:

  1. Beim Setzen eines bestimmten Bits (z. B. Bit 16) durch das Faceplate wird dieses in der Steuerung korrekt gesetzt.
  2. Wenn das gesetzte Bit (z. B. Bit 16) in der Steuerung zurückgesetzt wird und anschließend ein anderes Bit (z. B. Bit 15) durch das Faceplate aktiviert wird, wird unerwarteterweise auch das zuvor zurückgesetzte Bit (Bit 16) erneut gesetzt.
  3. Dieses Verhalten tritt unabhängig davon auf, welches Bit aus der Doppelwort-Variable gesetzt danach gesetzt wird. Das Ergebnis ist, dass immer zusätzlich Bit 16 ungewollt aktiviert wird. Aber nur einmal !

Zusätzliches Fehlverhalten:
Das Problem tritt nur auf, wenn das Faceplate geöffnet bleibt. Folgende zusätzliche Beobachtungen wurden gemacht:

  1. Faceplate-Zustand:
    • Wird das Faceplate geschlossen, nachdem ein Bit (z. B. Bit 16) gesetzt und in der Steuerung zurückgesetzt wurde, und das Faceplate danach erneut geöffnet, funktioniert die Bit-Setzung wie erwartet.
    • Beispiel: Nach dem erneuten Öffnen des Faceplates und Aktivieren von Bit 15 wird ausschließlich Bit 15 gesetzt, ohne dass Bit 16 zusätzlich aktiviert wird.
  2. Problem bei geöffnetem Faceplate:
    • Wenn das Faceplate geöffnet bleibt, bleibt der Fehler bestehen. Es scheint, dass das Faceplate oder das zugrunde liegende Skript eine Art Zustand zwischenspeichert, der dazu führt, dass ein zuvor gesetztes Bit (z. B. Bit 16) erneut aktiviert wird, sobald ein anderes Bit (z. B. Bit 15) gesetzt wird.
    • Das Problem kann vorübergehend behoben werden, indem das Faceplate geschlossen und erneut geöffnet wird.
  3. Zusätzliche positive Flanke:
    • Eine Lösung scheint darin zu bestehen, dass nach dem Rücksetzen des fehlerhaften Bits (z. B. Bit 16) durch die Steuerung eine positive Flanke eines anderen Bits ausgelöst wird. Erst dann kehrt das System in einen stabilen Zustand zurück und arbeitet korrekt.

Vermutung:
Das Verhalten deutet auf ein Problem in der Interaktion zwischen dem Faceplate, dem Bit-Setzungsmechanismus und dem Steuerungs-Skript hin:

  • Möglicherweise wird der Zustand eines gesetzten Bits im geöffneten Faceplate oder im Skript nicht korrekt zurückgesetzt.
  • Alternativ könnte ein Fehler im Skript "Setze Bit in eine Variable" oder ein Synchronisationsproblem zwischen der Steuerung und dem Faceplate die Ursache sein.

Hat einer eine Idee ?
 
Eine Idee wofür?
Das Problem ist kein Fehlverhalten, sondern ein prinzipielles Multitasking-Problem, weil bei der Kommunikation Zeit vergeht. Da dürfen verschiedene Task nur koordiniert dieselbe Variable beschreiben. Tun sie das unkoodiniert, dann kommt es zu dem beschriebenen Problem, dass Änderungen aus einer Task durch die andere Task überschrieben werden und so verloren gehen können.
 
Grundsätzlich würd ich erstmal auf Upd3 gehn. Upd2 ist wegen dem SCL-Bug zurückgezogen...

Ansonsten, naja, ist das nur mit dem 16. Bit ein Problem? Sowas gibts ja auch mit dem 32. Bit
Vielleicht so nen Wortdreher Datentyp Problem. Also nen Bug in Unified würd ich nicht ausschließen 😂😉
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe nicht wieso man für so einen banalen Vorgang überhaupt ein Skript braucht.
Sowas würde ich nie machen.Im HMI ist alles zu vermeiden was unnötig kompliziert ist.
Und Skripte im besonderen.
 
Hallo, danke für eure anmerkungen und Tipps.
Ich verstehe nicht wieso man für so einen banalen Vorgang überhaupt ein Skript braucht.
Sowas würde ich nie machen.Im HMI ist alles zu vermeiden was unnötig kompliziert ist.
Und Skripte im besonderen.
Ich benötige kein Skript! Ich verwende eine Funktion von Siemens (SetzteBitin Variable)! Warum sollte es kompliziert sein? Ich habe eine 32-Bit-Variable (Dword), bei der jedes Bit eine eigene Funktion hat. So habe ich es auch in WinCC umgesetzt. Ich lege doch keine einzelnen Bool-Variablen an!

 
also, ist das Problem nur bei dem 16.Bit oder auch bei einem anderen?

Auch die aktuellen Panelimages für das Unifiedpanel installieren! Mit welchem Paneltyp arbeitest Du? Oder ne PC-Runtime? dann die Updates für die PC-Runtime auch installieren...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich würd ich erstmal auf Upd3 gehn. Upd2 ist wegen dem SCL-Bug zurückgezogen...

Ansonsten, naja, ist das nur mit dem 16. Bit ein Problem? Sowas gibts ja auch mit dem 32. Bit
Vielleicht so nen Wortdreher Datentyp Problem. Also nen Bug in Unified würd ich nicht ausschließen 😂😉
also, ist das Problem nur bei dem 16.Bit oder auch bei einem anderen?

Auch die aktuellen Panelimages für das Unifiedpanel installieren! Mit welchem Paneltyp arbeitest Du? Oder ne PC-Runtime? dann die Updates für die PC-Runtime auch installieren...
Ich werde alles updaten, einschließlich MTP1900 Unified, und dann nochmal testen. Aber ich vermute zu 70%, dass der Fehler nur bei Bit 16 auftritt. Ich teste es aber nochmal, um sicherzugehen.
 
Das muss mir jemand erklären! Warum sollte das nicht funktionieren? Warum ging das unter WinCC? Das höre ich zum ersten Mal! Das Bit wird nur als Abbild genutzt, und nachdem es verarbeitet wurde, wird es in der PLC zurückgesetzt, zum Beispiel mit Step+1. Bei einzelnen Bool-Variablen sprengt das den Variablenhaushalt! :unsure: Nur ein „fauler“ Programmierer ist ein guter Programmierer und meistens auch der bestbezahlte :cool:
 
Wenn du die Bits wahlfrei von beiden Seiten (HMI und PLC) setzen/rücksetzen willst, dann kannst/darfst du nicht SetzeBitInVariable verwenden.
Auch wenn wir jetzt nicht genau wissen, wie der TE jetzt konkret die Bits in SPS oder HMI setzt/rücksetzt, würdeich nen Bug im Unified in Zusammenhang mit nem faceplate auch nicht ausschliessen.

Vielleicht kann der TE das auch nochmal ausserhalb von nen Faceplate in nen stinknormalen Bild ausprobieren...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das muss mir jemand erklären! Warum sollte das nicht funktionieren?
Naja, das HMI schreibt vermutlich nicht nur das eine Bit in die SPS sondern immer die ganze DWORD Variable. Also wenn das HMI ein Bit verändern will, muss es erst alle 32bit aus der SPS lesen -> ein bit ändern -> alle 32bit wieder in die SPS schreiben.
Wenn da in der Zwischenzeit in der SPS mit den bits was anderes passiert ist, wirds wieder übergebügelt...
 
@pramkies das Problem mit dem bit 16/32 (15/31) hattest Du ja selber schonmal hier in nem Thread von 2020...


vielleicht ist das hier was ähnliches im unified...
 
@pramkies das Problem mit dem bit 16/32 (15/31) hattest Du ja selber schonmal hier in nem Thread von 2020...


vielleicht ist das hier was ähnliches im unified...
:ROFLMAO: Ja aber damals war es das Bit31... Und ich hatte das VBS selber falsch geschrieben gehabt. Und da hatte Harald es mir erklärt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren

Verdammt, ich habe das immer falsch gemacht ! Ist nie aufgefallen.​

Hier eine detaillierte Erklärung:​

  1. HMI-Operation:
    • Ein HMI schreibt üblicherweise ganze Datenwörter (z. B. DWORD = 32 Bits) in die SPS, nicht nur einzelne Bits.
    • Wenn das HMI ein Bit ändern will, liest es zunächst das gesamte Datenwort (32 Bits) aus der SPS, ändert das gewünschte Bit und schreibt das gesamte Datenwort zurück.
  2. Risiko der "Überbügelung":
    • Falls in der Zwischenzeit (während das HMI liest und schreibt) die SPS andere Bits derselben Variable geändert hat, könnten diese Änderungen durch den Schreibvorgang des HMIs überschrieben werden.
    • Dies führt zu einem Zustand, bei dem ungewollte Änderungen an der DWORD-Variable auftreten, da nicht alle Bits mehr den korrekten Zustand haben.

Lösungsmöglichkeiten:​

  • Atomare Operationen:
    • Wenn möglich, direkt einzelne Bits schreiben (je nach SPS/HMI-Software).
  • Separierung von Variablen:
    • Statt eine DWORD-Variable für mehrere Funktionen/Bits zu nutzen, einzelne Bits oder kleinere Variablen verwenden.

Danke euch !
 
Zurück
Oben