TC3 HMI - Werte dynamisch in Array schreiben

MasterOhh

Level-3
Beiträge
1.600
Reaktionspunkte
407
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich weiß ja nicht, wie viele hier mit dem TC3 HMI arbeiten (HMI Server, nicht die Target Visu oder die alte Web Visu).
Ich arbeite mich gerade etwas in die Thematik ein und bin dabei auf eine Problem gestoßen, bei dem ich nicht weiterkomme. Und da die Dokumentation, Beckhoff typisch, wieder sehr zu wünschen übrig lässt, frage ich einfach mal hier in die Runde.

Folgender Sachverhalt:
Ich habe ein Array vom Typ eines FBs. Dieser FB enthält mehrere Strukturen. Auf die einzelnen Elemente der Strukturen möchte ich über das das HMI schreibend und lesend zugreifen.
Dazu habe ich im HMI eine Servervariable "i" erstellt, die als Feldindex für das Array dient. Über 2 Buttons kann ich den Wert von "i" erhöhen oder verringern. Abhängig vom Wert von "i" sollen dann die Inhalte der Strukturen der zugehörigen FB Instanz in Textboxen angezeigt werden.
Nach einigem Herumprobieren, direkt im Code kam ich dafür zu folgender Lösung:
Beispiel Datenbindung einer TextBox

Code:
data-tchmi-text="%f%%s%W4_LightMangement.MAIN.arrLights%/s%[%i%i%/i%].stControl.bOn%/f%"

(das %i%i%/i% definiert, das hier die Server-Integervariable "i" verwendet werden soll. Hieße die Variable "k" stünde dort %i%k%/i%)

Damit kann ich MAIN.arrLights.stControl.bOn auslesen. Durch Änderung von i werden automatisch die Werte vom entsprechenden Feldindex zur Laufzeit geladen.


Leider funktioniert dieses Vorgehensweise beim Schreiben von Werten NICHT.
Wenn ich einen Button erstelle, bei dem ich im OnClick-Event auf MAIN.arrLights.stControl.bOn schreiben will, kommt der Server mit
Code:
"symbolExpression": "%f%%s%W4_Licht.MAIN.arrLights%/s%[%i%i%/i%].stControl.bOn%/f%"
in der Datenanbindung nicht klar.


Hat sich schon mal jmd von euch mit diesem oder einen ähnlichen Thema beschäftigt und kann mir eine Lösung oder einen Workaround vorschlagen?
 
Hey,

ich kenne mich jetzt zwar noch nicht mit der PLC HMI aus, aber ich würde das konzeptionell wahrscheinlich anders machen,
Oder willst du es unbedingt auf HMI Seite machen. Ich würde es eher in der SPS machen.
HMI Element bekommt eine Anbindung an temporäre Variable W4_Licht.MAIN.tempLights und in der SPS würde ich dann die Zuweisung je nach der Indexvariable machen:
Code:
arrLights[i] := tempLights;

Gruß snej
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wir setzen bei uns auch die TC3 HMI ein.

So kann es funktionieren:

PLC:

aData: array[0..10] of int;


HMI:
1. In der Texteingabe des Controls ein Binding zu dem Array aData erstellen
2. hinter dem Binding schreiben -> schaut dann so aus: aData
3. aData und i sollte jeweils farbig hinterlegt sein, damit es funktioniert

Gruß

Tobi
 
Hi
Ist zwar schon ein etwas älterer Beitrag aber gleiches Problem.
Kann das sein, dass bei Tobi-212 die Hälfte vom Lösungsvorschlag fehlt?

Ich möchte eigentlich auf ein Array dynamisch lesend und schreiben zugreifen. Wenn ich aber im Multiline Editor folgendes schreibe, dann ist der Zugriff nur immer lesend möglich (Fehler: nur readOnly).
Code:
meinArray[meineIndexVariable]

"MeinArray" und "meineIndexVariable" sind blau hinterlegt. Die Klammern sind einfach reingeschrieben.
 
Zurück
Oben