WinCC VBScript Variable fuer Array

Canopus231171

Level-2
Beiträge
93
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte die ByVal Variable für die Array Ziffer einsetzen.
Aber irgendwie möchte VB das so nicht akzeptieren. Meine Recherche im Netz blieb erfolglos.
Hat jemand eine Idee wie das funktioniert, ich möchte gerne von dem Case weg und direkt kopieren.


1758091739045.png
 
Zugriff auf ein Arrayelement über (x) also "ZYLINDER(ZylNr)" soweit ich mich erinnere...

Ein lese/Schreibzugriff liest/schreibt aber das ganze Arrray!!!

Bringt also eine erhebliche Kommunikationslast mit sich.

EDIT: Als pseudo Array: Der Variablenname wird als String ausgewertet.

Also: "ZYLINDER[" & ZylNr & "].Text"
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey danke für dein Vorschlag. Funktioniert so leider auch nicht. Gibt direkt ein Syntaxfehler.
Das Skript wird nur mit einem Übernahmebutton aufgerufen und sehr selten, daher ist die Kommunikationslast nicht so schlimm.
 
Der Aufruf-Vorschlag von @NBerger sollte funktionieren - was meines Wissens die Visu aber nicht mag ist wenn da noch ein Leerzeichen mit drin steht. Bei der String-Wandlung von ZylNr wird daraus (z.B.) sowas : " 1" - nicht "1". Du könntest also mal versuchen, den String korrekt zu machen mit CStr und Trim.
Wie wird deine Prozedur aufgerufen ? Aus einer anderen Prozedur ? Die Frage hier ist, wie du die Variable übergibst ...
Du könntest du dir also als System-Meldung einfach mal den Wert von ZylNr anzeihenm lassen ...
 
ich möchte die ByVal Variable für die Array Ziffer einsetzen.
Deine HMI-Variablen sehen gar nicht aus wie Arrays (bzw. WinCC kann meines Wissens gar keine "Array of Struct")?

Wenn die HMI-Variable wirklich ein Array ist, dann erfolgt der Zugriff auf ein Array-Element so:
Code:
SmartTags("MyHMI-Variable")(index) = value
Beachte: Jeder Lese/Schreibzugriff auf ein Array-Element einer Array-HMI-Variable mit PLC-Anbindung (PowerTag) löst das Lesen/Schreiben/Aktualisieren des gesamten Arrays aus --> Kommunikationsüberlastung droht!

Alternative:
Viele einzelne HMI-Variablen anlegen, deren Name wie ein Array aussieht, und dann den Variablenname zusammenbasteln. Die HMI-Variablen müssen vor dem Zugriff bereits existieren. Das erhöht ggf. die Anzahl PowerTags!

für HMI-Variablen nach dem Muster: MyHMI-Variable_00000, MyHMI-Variable_00001, MyHMI-Variable_00002, ...
Code:
varname = "MyHMI-Variable_" & Right("00000" & CStr(index), 5)
SmartTags(varname) = value

oder wie bei dir:
Code:
SmartTags("DB_Bildbaustein_ZYLINDER[" & CStr(ZylNr) & "].xyz" = value

Irgendwie habe ich im Hinterkopf, dass es in WinCC flexible oder -TIA manchmal Probleme gab, wenn der Variablenname innerhalb der Klammer von SmartTags(...) zusammengebastelt wird, deshalb bastele ich den Variablenname meistens vorher zusammen und weise einer Variablen zu und setze dann die Variable ein bei SmartTags(varname)

PS: Ob in neueren TIA-Versionen der Name von PLC-Variablen bei symbolischer Anbindung an HMI-Variablen zusammengebastelt werden kann, weiß ich nicht (glaube ich aber nicht).
 
Zuletzt bearbeitet:
Ich habe folgenden Baustein der mir Werte ausliest, den Index muss man hinten Separat übergeben.


Code:
Sub WerteAusArray(ByVal ArrName, ByVal LV, ByVal VarName_Out)
  SmartTags(VarName_Out)=SmartTags(ArrName)(LV)
End Sub

1758106763864.png

von Aussen werden Strings übergeben mit den Variablennamen.
1758106991186.png
 
Hey die hinter dem Rem stehen hab ich probiert.
Es werden lediglich die Daten in den ersten Array geschrieben.
In deinem Bild sind nur die PLC-Variablen zu sehen, richtig?
Wie hast du denn die HMI-Variablen projektiert?
Welche Runtime-Errors erhältst du in der Panel Simulation?
Wahrscheinlich wird dein Skript irgendwo beim ersten Runtime-Error abgebrochen und die HMI-Variablen erhalten gar keine Zuweisung.

Du solltest Testausgaben zum Debuggen deines Skriptes einbauen:
Code:
Dim varname

varname = "ZYLINDER[" & CStr(ZylNr) & "].Ueberschrift"
ShowSystemAlarm "varname: '" & varname & "'"  '##DEBUG##
SmartTags(varname) = SmartTags("Ueberschrift")
Mache in ein Bild eine Meldeanzeige, die auch Meldungen der Meldeklasse "System" aus dem Meldepuffer anzeigt, damit du Systemmeldungen und deine Testausgaben sehen und in aller Ruhe nachlesen kannst.

Solche Testausgaben mit ShowSystemAlarm mache an jeder Stelle, wo dich interessiert, ob und was das Skript so tut.
 
Zurück
Oben