WinCC Unified Verwendung Array beginnend mit 1 möglich?

Zuviel Werbung?
-> Hier kostenlos registrieren
Das Array nochmal in einen UDT zu packen & diesen dann ins hmi zu ziehen funktioniert auch.
Zumindest bei Comfort-Panels.
Da meine Kollegen noch nicht geheult haben, dass das bei Unified nicht geht, solle das da auch klappen.
So habe ich es bei meinem Projekt auch gemacht und dabei dann festgestellt, dass es im WinCC umgeschrieben wird, weil ein Skript nicht mehr richtig funktioniert hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn ich den Screenshot nicht eingestellt habe, bei mir sieht es genauso aus, wenn eine Variable aus einem Array einzeln ins HMI gezogen wird. Dann bleibt der Index1 erhalten und wird in die geschweiften Klammern gesetzt.
Wie die Variable im HMI dargestellt wird hängt von den Runtimeeinstellungen in der HMI ab.
Ich mache immer die Haken weg. Dann sehen die Variablen genauso aus wie im SPS-Programm.
1731843468386.png
 
Auch wenn ich den Screenshot nicht eingestellt habe, bei mir sieht es genauso aus, wenn eine Variable aus einem Array einzeln ins HMI gezogen wird. Dann bleibt der Index1 erhalten und wird in die geschweiften Klammern gesetzt.
Ja, aber ist das in den geschweiften Klammern wirklich ein Index, also kann ich dann im HMI mit TEST_Array{i} mit i=1 drauf zugreifen?
Oder ist das dann ne stinknormale HMI-Variable mit Sonderzeichen im Namen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du das Array aus dem UDT ins HMI ziehst oder wenn du direkt den UDT an sich nimmst?
In dem Fall habe ich einen UDT mit 3 Array´s und ziehe aus dem DB den Eintrag mit dem UDT ins HMI.
Aber auch wenn ich die Array´s einzeln ins HMI ziehe, beginnt das Array bei 0
 
Da wird doch in dem Script nen Variablenname als Text zusammengebaut?
Aber vermutlich ists dem VBS sogar egal, ob das jetzt ne Einzelvariable mit Sonderzeichen oder ne Arrayvariable ist...
Ich probier das demnächst mal aus.

Würd gern mein Adressmultiplexing umstellen. D.h. z.B. einfach nem EA-Feld die externe Variable Real[x] anbinden mit x als interner Variable.
 
Zuletzt bearbeitet:
also ich hab mir das mal angeschaut, warum eigentlich am Sonntag, mein Glühwein wird fast kalt ;)

Ich denke, ne Einzelvariable mit dem Namen "Test[3]" ist nicht wirklich ein Arrayelement sondern ne Einzelvariable mit Sonderzeichen im Namen (getestet mit nem Comfortpanel, kein Unified)
Dem VBS-Script ist das in dem Fall egal, weil der Variablenname, egal ob wirkliches Array oder nicht, auf die selbe Weise zuammengebaut wird.

Wenn ich aber multiplexen will, zur variablen Anbindung an ein EA-Feld, kann ich der Multiplexvariablen unter Multiplexen jetzt schon verschiedene Einzelvariablen zuweisen... Dafür kann ich die Einzelvariablen aber auch "Test_03" nennen... Mit Test[x] kann ich nie wirklich variabel auf die Einzelvariablen zugreifen...

mal sehn, wie das bei Unified wird... Voraussichtlich mit TIA V20 schau ich mir das mal an.

Aktuell vereinfacht das multiplexen extrem, wenn der DB in der SPS optimiert ist (hätte nie gedacht, dass ich das mal sage) UND der Arrayindex in der SPS zwingend bei 0 beginnt... *)

1731854659254.png
1731854779199.png

Arrayindizees umzusortieren bei optimierten DBs ist ein (händischer) Krampf, bei nichtoptimierten DBs ist das Adressmultiplexing jetzt immer ein Krampf, egal wo das Array in der SPS beginnt...

*) da scheint auch im TIA V17 noch ne Bug zu sein, das SPS-Array kann bei 0 bis 9 beginnen, dann geht auch das Multiplexing im HMI, wenn das SPS-Array bei 10 beginnt, dann nicht mehr...:unsure: Ob dasHMI bei beginnendem SPS-Index=1 das dann richtig zurordnet, hab ich nicht getestet.
SPS und HMI muss dann mehr oder weniger zwingend im selben Projekt sein...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn ich den Screenshot nicht eingestellt habe, bei mir sieht es genauso aus, wenn eine Variable aus einem Array einzeln ins HMI gezogen wird. Dann bleibt der Index1 erhalten und wird in die geschweiften Klammern gesetzt.
Korrekt. Hatte die Variable per Drag&Drop angelegt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, aber ist das in den geschweiften Klammern wirklich ein Index, also kann ich dann im HMI mit TEST_Array{i} mit i=1 drauf zugreifen?
Oder ist das dann ne stinknormale HMI-Variable mit Sonderzeichen im Namen?
Das ist ein "echter" Index
Anhang anzeigen 83093
Was meinst du mit "echter" Index?

171_Filo_Te_24h_DB.Stunde[0] ... 171_Filo_Te_24h_DB.Stunde[23] sind 24 einzelne HMI-Variablen (24 Powertags) (*)
In deinem VBS-Skript wird der Name der einzelnen HMI-Variablen zusammengebastelt: SmartTags("171_Filo_Te_24h_DB.Stunde[" & schleife & "]")
Wenn 171_Filo_Te_24h_DB.Stunde ein Array wäre, dann müsste man im Skript SmartTags("171_Filo_Te_24h_DB.Stunde")(schleife) schreiben (und bei jeder Zuweisung in der Schleife würde das Schreiben des gesamten Arrays in die PLC ausgelöst).

(*) die könnten auch genausogut 171_Filo_Te_24h_DB.Stunde[a] ... 171_Filo_Te_24h_DB.Stunde[x] heißen, dann müsste im Skript der Name nicht mit den Zeichenfolgen '0' ... '23', sondern mit 'a' ... 'x' gebastelt werden.
 
Nabend.

Die Verwendung des jeweiligen (gewünschten) Klammerzeichens bei Array-Variablen ist auch von dieser Runtime-Einstellung abhängig:
1731871410121.png
Es kann also auch eine geschweifte Klammer vorkommen.


Die ganze Diskussion wird hier im Forum ja glaube ich nicht zum ersten Mal geführt.
Mich hat sie -und andere bereits genannte Umstände- immer schon dazu bewogen, Arrays bzw. deren Elemente grundsätzlich als Einzelvariablen im HMI-Projekt anzulegen.
Vorteile für mich sind die problemlose symbolische Verwendung in Skripten (auch und gerade wenn sie NICHT direkt in Bildern verwendet werden) und die mögliche Gleichbehandlung jedweder Arrayelemente-Typen (numerisch oder Chars/String)
Den Nachteil der eventuellen Unübersichtlichkeit (genauer: das Aufblähen einer Variablentabelle) nehme ich in Kauf.


Gruß, Fred
 
"In vielen Prozessorarchitekturen werden Arrays als zusammenhängende Speicherbereiche behandelt, und der Zugriff auf ein Element erfolgt durch eine Berechnung wie: Adresse=Basisadresse+Index×Größe des Elements. Wenn Arrays bei 0 beginnen, entfällt die Notwendigkeit, zusätzliche Berechnungen für eine Verschiebung (Offset) vorzunehmen. Das spart Rechenzeit."
Das spart genau einmal Rechenzeit und zwar beim Übersetzen.
Wenn der Programmierer z.B. ein Array von -2 bis 3 deklariert, damit es seinen Realitäten entspricht, kann doch der Übersetzer intern gerne ein Array von 0 bis 5 daraus machen.
Nein, nicht nur einmal, sondern bei jedem Zugriff auf ein vom Compiler "intern" so umdeklariertes Array müsste immer erst der angegebene Index-Wert auf den internen Wert umgerechnet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich hat sie -und andere bereits genannte Umstände- immer schon dazu bewogen, Arrays bzw. deren Elemente grundsätzlich als Einzelvariablen im HMI-Projekt anzulegen.
Jo eben, es sind dann eben auch Einzelvariablen, auch wenn der Name wie nen Arrayelement aussieht. Ausserhalb von Scripten kann man nicht variabel auf verschiedene Einzelvariablen zugreifen. Mit HMI-Arrays geht das aber auch nicht🤮 bleiben nur die Multiplexvariablen übrig...
Den Nachteil der eventuellen Unübersichtlichkeit (genauer: das Aufblähen einer Variablentabelle) nehme ich in Kauf.
Das wäre auch der wirklich einzige Vorteil von Arrays im HMI, weniger Tiparbeit in der Variablentabelle, vor allem bei vielen und sich oft ändernden Variablen...
 
Zurück
Oben