TC3/TE2000: Radio Button bei der Start der Visu mit Variablenwert vorbelegen

Beiträge
6.396
Reaktionspunkte
1.487
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein kleines Problem mit den Radio Buttons.
Ich habe in einer TF2000 Visu zwei Radio Buttons über die die Zählerbetriebsart gewählt werden kann. Bei beiden wird über das Ereignis ".OnRadioStateChanged" eine Variable im SPS-Programm je nach aktivem Button auf 0 oder 1 gesetzt, das funktioniert soweit auch.
Beim Programmstart ist die Variable auf einem Startwert, jetzt könnte ich natürlich über die Eigenschaft "RadioState" den dazugehörigen Button setzen, aber das finde ich etwas unglücklich.
Mir wäre es lieber, wenn in der Visu beim Start über den Variablenwert der entsprechende Button vorbelegt wird, nur wie?
Kann hier jemand weiterhelfen?
Eingesetzt wird TC 3.1.4024.47 und TE2000 1.12.760.37
 
Könntest du über das StateSymbol der Radiobuttons was passend erreichen?
Im Tooltip davon steht "A symbol of type tchmi:general#/definitions/Boolean which will be set to true if radio button is selected and to false if radio button is unselected."
Ist natürlich etwas unpraktisch, dass du 0 und 1 setzen willst und nicht direkt ein boolean in der SPS.

Sonst könntest du, glaub ich, direkt das StateSymbol eines der RadioButtons mit der SPS verknüpfen. Damit ist der Start-Zustand direkt aus der SPS richtig.
Der andere Radiobutton braucht dann kein StateSymbol, der steuert nur den anderen Button per ToggleGroup.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist natürlich etwas unpraktisch, dass du 0 und 1 setzen willst und nicht direkt ein boolean in der SPS.

Sonst könntest du, glaub ich, direkt das StateSymbol eines der RadioButtons mit der SPS verknüpfen. Damit ist der Start-Zustand direkt aus der SPS richtig.
Der andere Radiobutton braucht dann kein StateSymbol, der steuert nur den anderen Button per ToggleGroup.
Das die Werte 0 und 1 sind ist Zufall und kommt auch daher, weil es hier nur 2 Buttons gibt. Bei mehr Buttons könnte es auch 1, 2, 3 sein oder etwas ganz anderes.
Die Verwendung einer (Integer)Zahl anstatt eines Bools kommt daher, dass ich bisher "nur" mit der internen Visu gearbeitet habe und da setzt das Objekt Radio Button eine Variable je nach betätigtem Button auf eine bestimmte Zahl, da ist die Vorbelegung dann auch einfacher.
In der TE/TF2000 gibt es kein Objekt Radio Button, sondern es werden einzelne Buttons vom Typ Radio Button über die Eigenschaft "RadioGroup" gruppiert.
 
Also ich hab hier auch keine wirklich bessere Lösung. Bei mir ist es normalerweise so, dass ich in der SPS einen Enum habe, der mir dann den Zustand der Radio Buttons beschreibt.

Und in jedem Radio-Button muss man dann bei ".onAttached" den Startwert setzen. z. B. So:
1725603082187.png
Und bei ".onRadioStateChanged" macht man fast exakt das gleiche, nur umgedreht:
1725603180629.png

Führt dann zwar beim initialisieren dazu, dass der aktive Radio button seinen Status noch mal auf die SPS schreibt, aber das macht nix.

Wenn du es besser machen willst, dann kannst du dir ein Usercontrol erstellen, und da einfach nur den Radiobutton rein packen. Als parameter übergibst du das Enum und den Enum-Wert, der dem Button entspricht, sowie eine Radio-Group (darüber werden die Buttons intern verknüpft). Damit sollte es denke ich gehen, dass du alle aktionen in das Usercontrol packen kannst, und beim anlegen eigentlich nur noch die Parameter verknüpfen musst.
Für Radiobuttons habe ich das noch nicht so direkt umgesetzt, aber meine Menübuttons Verhalten sich eigentlich auch wie Radiobuttons und da habe ich das so gemacht.

Update:
Was mir gerade an der eigenen HMI aufgefallen ist:
Das Initialisieren ist innerhalb der Usercontrols etwas schwieriger. Wenn du den State des Radiobuttons bei ".onAttached" setzen willst, dann kann es sein, dass das Binding noch gar nicht hergestellt wurde. Die oben stehende Abfrage "If ControlMode == volumeFlow" (ControlMode wäre in dem Fall natürlich nicht die (blaue) Globale Variable, sondern ein (gelber) Parameter) würde also fehlschlagen, da ControlMode noch gar nicht da ist. Hier behelfe ich mir immer damit, dass ich die Aktion mit ControlMode trigger. Also so:
1725623678467.png
 
Zuletzt bearbeitet:
Hallo @PatrickSt bitte entschuldige die späte Rückmeldung, aber die Aktualisierung der Einführung in TC3 hatte eine ganze Zeit eine untergeordnete Priorität und ich sitze erst jetzt wieder daran.
Der Vorschlag mit dem .OnAttached macht genau das was ich möchte, nochmals vielen Dank für den Tipp. Jetzt ist der entsprechende Radio Button beim Öffnen der Visu aktiv.
 
Zurück
Oben