TC3: Farbe oder Sichtbarkeit von Element in TE2000 über Variable ändern

Beiträge
6.396
Reaktionspunkte
1.486
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin es schon wieder mal.
Die TE/TF2000 treibt mich noch in den Wahnsinn.
Ich möchte gerne die Farbe oder die Sichtbarkeit eines Kreises basierend auf den Wert einer Variablen ändern, bekomme es aber nicht hin.
Folgendes habe ich schon (erfolglos) versucht:
Bei den Events unter Customs ein Event angelegt, dass TRUE als ( Ich denke mal der Kasten steht dafür) Bedingung hat. Im Event die Variable als Bedingung genommen und bei TRUE eine Farbe gesetzt und bei ELSE eine andere. Die Farbe ändert sich nicht und die Variable im SPS Programm scheint vom HMI überschrieben zu werden, denn an einer Stelle im Code erscheint Sie TRUE und an einer anderen Stelle FALSE, sie wird im Code aber nur an einer Stelle beschrieben.

Zwei Events unter Customs angelegt, bei einen eine Variable als Bedingung hinzugefügt und beim Anderen eine Andere, die nie gleichzeitig TRUE sind. Beide Bedingungen setzen den Kreis auf eine jeweils andere Farbe. Der Kreis wird aber immer nur auf eine der beiden Farben gesetzt.

Die Eigenschaft Visibility mit einer Variablen verknüpft. Der Kreis blieb aber immer sichtbar.

Zum Einsatz kommt wieder ein CX5230 mit 3.1.4024.47
Nachtrag: Ich habe mir meinen Code nochmals angesehen. Der Effekt, dass die Variable mal TRUE und mal FALSE angezeigt wird muss andere Gründe haben, hängt aber dennoch mit der TE2000 zusammen. Ich werde heute Nachmittag/Abend mal Screenshots nachreichen.
 
Zuletzt bearbeitet:
Guten Morgen,

hast Du die Variable die die Sichtbarkeit steuert auf TwoWay oder OneWay gestellt?
Bei OneWay könnte sein, dass die Visu Dir die Variable immer auf False setzt.
Ich hatte/habe auch Probleme mit überschreiben etc......

Am Abend kann ich Dir nochmal nachsehen, und einen Screenshot nachreichen sofern das Problem noch besteht.

Gruß Hawk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

hast Du die Variable die die Sichtbarkeit steuert auf TwoWay oder OneWay gestellt?
Bei OneWay könnte sein, dass die Visu Dir die Variable immer auf False setzt.
Ich hatte/habe auch Probleme mit überschreiben etc......

Am Abend kann ich Dir nochmal nachsehen, und einen Screenshot nachreichen sofern das Problem noch besteht.

Gruß Hawk
Häh, Rembrandt!!!??? Vielen Dank für Deine Antwort, aber ich muss leider gestehen "I only understand Train Station."
Wie stelle ich eine Variable auf Two oder One Way und was bedeutet das genau?
 
Ahh ok alles klar.
Es gibt einen Parameter wo man einstellen kann, ob die Variable nur lesend oder lesend/schreibend verwendet wird.
Dies wird dann schlagend, wenn man Strukturen über Array´s und Usercontrols durchschleift. (so war meine Erfahrung damit, kann aber gut möglich sein, dass es abgefragt werden muss.

Habe eben nochmal nachgedacht. Du willst wenn das Bild angezeigt wird, dass die Variable (wie es bei Siemens heißt zyklisch fortlaufend) abgefragt wird, ansonsten wird die Variable nur beim Bildaufbau einmal gelesen und du bekommst die Wertänderung im TF2000 gar nicht mit.

In der Infosys ist dies Hier beschrieben.
Am Abend kann ich Dir dann noch genauere Sreenshots dazu liefern, wie ich das eingestellt habe.

Gruß Hawk
 
Zur Farbeinstellung:
Ich mach das gerne über if-else direkt in den Eigenschaften. Über Aktionen geht natürlich auch, aber ich finde es so einfacher und übersichtlicher:
1745483611642.png

Wie ihr sehen könnt habe ich hier einen Textblock in einem Usercontrol, der als Button funktionieren soll (weil entweder ich zu blöd war um zu verstehen, wie ich die Beckhoff buttons so einstelle, wie ich sie brauche, oder weil Beckhoff die einfach so programmiert hat, dass sie nicht alles können was ich von ihnen brauche).
Und sobald der toggle Index der Gruppe identisch ist mit dem des Buttons (Bedeutet: Der Button ist aktiv) wird die Farbe auf Dunkelblau gestellt, ansonsten Dunkelgrau.
Die gelben Variablen mit dem P sind Properties des Usercontrols, die Roten mit dem I sind Internal variables. Natürlich kann man hier auch andere Variablentypen nutzen.
1745484333777.png

Ich glaube die variante von mir geht halt nicht, wenn man Farben auswählen will, die nicht vorher definiert sind. Aber wenn man die farben jedes mal aufs neue zufällig auswählt hat man eh ein standardisierungsproblem.

Zu der sichtbarkeit:
Ja, so ganz trivial geht das über die Einstellungen nicht, da die sichtbarkeit kein boolscher Wert ist. Hier muss man wissen, dass man die Funktion "ConvertBooleanToVisibility" braucht:
1745483940205.png
Wenn die Variable true ist, dann ist der Button "visible".
Über das 'Collapsed' stelle ich ein, dass der button "Collapsed" sein soll, wenn "Visible" auf FALSE ist. Ich könnte aber auch "Hidden" eintragen.
Wenn ich das verhalten invertieren will (also TRUE-->"Collapsed"), dann muss ich ein Ausrufezeichen vor den Parameter setzen.

Alternativ kann ich das natürlich auch wieder über die Aktionen machen.
Also eine "Custom" Aktion auf die boolsche Variable der SPS legen, in der Aktion über If-Else die Visibility umschalten:
1745484255200.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Farbeinstellung:
Ich mach das gerne über if-else direkt in den Eigenschaften. Über Aktionen geht natürlich auch, aber ich finde es so einfacher und übersichtlicher:
Anhang anzeigen 86935

Wie ihr sehen könnt habe ich hier einen Textblock in einem Usercontrol, der als Button funktionieren soll (weil entweder ich zu blöd war um zu verstehen, wie ich die Beckhoff buttons so einstelle, wie ich sie brauche, oder weil Beckhoff die einfach so programmiert hat, dass sie nicht alles können was ich von ihnen brauche).
Und sobald der toggle Index der Gruppe identisch ist mit dem des Buttons (Bedeutet: Der Button ist aktiv) wird die Farbe auf Dunkelblau gestellt, ansonsten Dunkelgrau.
Die gelben Variablen mit dem P sind Properties des Usercontrols, die Roten mit dem I sind Internal variables. Natürlich kann man hier auch andere Variablentypen nutzen.
Das mag er bei mir nicht. Habe das probiert
1745508563515.png
Und erhalte die Fehlermeldung "Exception: SyntaxError: Unterminated regular expression (1:52)"
 
Warum muss etwas eigentlich so einfaches, so kompliziert sein?
Ich habe es jetzt über die Visibility mit der Funktion "ConvertBooleanToVisibility" hinbekommen, allerdings würde mich noch schon interessieren, warum das mit der IF-Abfrage nicht funktioniert hat.
 
Ohne das Ding genauer zu kennen: kann es sein dass er Groß-/Kleinschreibung unterscheidet und das "IF" als "if" geschreiben werden muss?
Du bist ein Genie, ich hätte jede Wette dagegen gehalten, dass die Befehle nicht Case sensitive sind.
Spoiler Alarm, sie sind es und ehe einer fragt oder selber vor dem Problem steht, die Klammer um die Bedingung muss auch sein, sonst gibt es wieder Mecker.
Es ist schon reichlich peinlich für mich, dass ich nicht selber auf die Idee gekommen bin es in Kleinschreibung zu versuchen. Zu meiner Verteidigung möchte ich aber anmerken, dass die Fehlermeldung mich eine andere Ursache vermuten ließ.
Jetzt muss ich nur noch herausfinden, wie ich ohne die lokalen Symbole Farben einfach über eine Zahl in der Bedingung vorgeben kann.
 
Zuletzt bearbeitet:
ich hatte das schon mal woanders. Explizit wird das nicht zwingend beschrieben:


Aber manchmal sind solche Schlüsselwörter tatsächlich case-sensitive.

Zu der Vorgabe mit der Zahl würde ich mal schauen ob es nicht so etwas in der Art wie: TcHmi.Functions.Beckhoff.ConvertIntegerToColor gibt (in's Blaue geraten)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mag er bei mir nicht. Habe das probiert
Anhang anzeigen 86955
Und erhalte die Fehlermeldung "Exception: SyntaxError: Unterminated regular expression (1:52)"

Was du in diesen Edit-Fenstern tippst ist JavaScript -> case-sensitiv. Hier heisst es aufpassen, insbesondere bei Variablennamen oder Namen von Funktionen!

Die Fehlermeldung hat aber nichts mit Upper-/Lowercase zu tun, sondern kommt weil du die internen symbole nur auswertest aber nicht zuweist. Dieser Code ginge (ungeachtet vom anderen Syntax) bspw. in ST ja auch nicht.

Folgende einzelne Code-Zeile würde das mehrzeilige if-konstrukt ersetzen und <sollte> eigentlich funktionieren:
xCounterRunning ? '#008000' : '#FF0000';

Natürlich wäre xCounterRunnung dein komplettes PLC Symbol und statt der Farb-Konstanten in obigem Beispiel kannst du dort auch durch deine internen Farbsymbole einsetzen.

Zum besseren Verständnis, nachfolgende Zeile welche so erstmal nichts mit TwinCAT zu tun hat, weisst FillColor wenn xCounterRunnung false ist den Wert '#FF0000' zu (rot), andernfalls '#008000' (grün).
const FillColor = xCounterRunning ? '#FF0000' : '#008000';

Obige Referenz auf C ist hier eventuell nicht ideal, da TcHMI ja eine Web-HMI ist die mit HMTL5 und JavaScript funktioniert.

Kann dir https://www.w3schools.com/js/default.asp als gute Referenz im Umgang mit JS empfehlen und https://jsfiddle.net/ als Tool um Code-Schnipsel kurz live auszuprobieren.
 
@APT
Vielen Dank für Deine Antwort.
Deiner Antwort, dass die Fehlermeldung nichts mit der upper/lower case Problematik zu tun hat muss ich aber wiedersprechen. Schreibe ich if statt IF funktioniert alles wie gewünsch und ohne Meldung.
Deine anderen Vorschläge werde ich Montag mal probieren, wenn ich wieder Zugriff auf mein Übungsrack habe.
 
@APT
Vielen Dank für Deine Antwort.
Deiner Antwort, dass die Fehlermeldung nichts mit der upper/lower case Problematik zu tun hat muss ich aber wiedersprechen. Schreibe ich if statt IF funktioniert alles wie gewünsch und ohne Meldung.
Deine anderen Vorschläge werde ich Montag mal probieren, wenn ich wieder Zugriff auf mein Übungsrack habe.
Danke für dein Feedback dazu! Das überrascht mich im positivsten Sinne, dass es das if konstrukt dann richtig interpretiert :-)
Yep, gerne Feedback geben ob es mit dem 1-Zeiler auch geklappt hat.
 
Zurück
Oben