TIA VBScript Array For Schleife kopiert nicht so wie sie soll

Butterfly

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

mir ist gerade ein sehr komisches Phänomen aufgetreten, was ich mir noch nicht wirklich erklären kann.
Ich habe in einem HMI Script eine For-Schleife in der ich ein SmartTag Array mit immer dem gleichen String beschreibe. Im Grunde nichts wildes aber eventuell aufgrund der späten Stunde doch zu schwierig :) und ich will der Empfehlung meiner Frau einfach nicht folgen, erst schlafen zu gehen und mich mit neuer Kraft wieder dran zu setzen.

Screenshot (432).png

Das Array ist auf eine Größe von 0..10 definiert.
Screenshot (430).png

Wenn ich das Script nun in der Simulation ausführe schmiert mir direkt die Simulation mit der Fehlermeldung, dass das erste Arrayelement nicht bekannt ist. Weiß einer von euch vielleicht was ich übersehe?

Screenshot (433).pngg
 

Anhänge

  • Screenshot (429).png
    Screenshot (429).png
    22,1 KB · Aufrufe: 15
  • Screenshot (431).png
    Screenshot (431).png
    4,4 KB · Aufrufe: 16
Es ist schon spät, ich bin mir nicht ganz sicher, aber probier mal folgendes:
Code:
Archivmeldungen{" & i & "}
 
Zuletzt bearbeitet:
Nabend.

Hast du die einzelnen Array-Elemente irgendwo sonst im Projekt mit vollständigem Namen (Also ohne variablen Bestandteil) verwendet?

Wenn nein, dann ist das Smarttag-Objekt mit diesem Namen zur Laufzeit noch nicht erzeugt worden und du kannst ergo nicht darauf zugreifen. TIA meldet dies mit der m.M.n. etwas irreführenden "No tag"- Message.

Als Test:
Besetze die gewünschten Array-Elemente -einzeln und mit vollausgeschriebenem Variablennamen- mal im Script(!) mit einen Text vor.


Gruß, Fred


PS: Ich meine, dass ich vor kurzem sogar hier im Forum etwas über dieses Verhalten gelesen habe, weiß aber nicht mehr, wo.
 
Du bastelst den Name von HMI-Variablen (SmartTags) zusammen. SmartTags("Archivmeldungen["&i&"]") erzeugt z.B. den Name "Archivmeldungen[1]". Hast Du eine HMI-Variable mit dem Name "Archivmeldungen[1]" ???
Anscheinend hast Du aber eine HMI-Variable "Archivmeldungen", die ein Array ist? Die Elemente von SmartTags-Arrays adressiert man so: SmartTags("variable")(index), also z.B. SmartTags("Archivmeldungen")(i) = "Index"

Harald
 
Guten Morgen zusammen,

@PN/DP
bei einem Array of String ist die Syntax doch anders als bei den Anderen. Der Compiler meckert mir den Versuch auch direkt an.
Screenshot (437).png


@faust
Das habe ich ausprobiert und du hast recht, es muss irgendetwas damit zu tun haben. Ich habe vor meine Schleife ein einzelnes Element des Array of String angesprochen und danach die Schleife laufen lassen und prompt geht es. Es ist zwar eine Lösung ein SmartTag Array of String zu Beginn mal kurz direkt anzusprechen aber so richtig erklären kann ich es mir noch nicht.
Screenshot (439).png

AKTUALISIERUNG:
Zu früh gefreut. Wenn ich die For Schleife nicht bis 5 sondern bis 10 laufen lasse passiert mir der gleiche Fehler :(
Screenshot (440).png
 

Anhänge

  • Screenshot (438).png
    Screenshot (438).png
    28,5 KB · Aufrufe: 12
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Butterfly.

Weiß nicht, ob ich deine Erläuterung in "AKTUALISIERUNG" richtig verstanden habe, aber ...

Du musst wirklich JEDES Arrayelement mindestens einmal vorher mit vollständigem Namen verwenden!
Das kann entweder gemäß meinem Vorschlag in einem Script geschehen, eine andere Möglichkeit ist die Anbindung an ein Visu-Objekt (z.B. E/A-Feld).

Ich habe ein ähnliches Problem mit HMI-UDTs, deren Elemente ich nur in Scripten verwende und dort nur mit zusammengesetztem Namen anspreche.
Musste deshalb ein Script projektieren, das ALLE HMI-UDT-Elemente (Und das sind einige bei mir!) einzeln mit einem Dummywert vorbesetzt und beim Starten der Visu direkt ausgeführt wird.


Gruß, Fred
 
Du musst wirklich JEDES Arrayelement mindestens einmal vorher mit vollständigem Namen verwenden!
Das ist korrekt!!! Die Variable wird sonnst intern nicht angelegt...

Neben bei bemerkt: Man sollte möglicht auf Arrayvariablen im HMI verzichten, lieber jedes Element einzeln im HMI anlegen.
Grund: Bei einem Lese oder Schreibzugriff auf EIN Array-Element werden ALLE Array-Elemente gelesen/geschrieben. Das verursacht teilweise eine extreme Kommunikationslast.
 
@faust
@NBerger
Ohje, das vermiest mir gerade meine Stimmung. Bei kleinen Arrays wäre es vom Aufwand her noch vertretbar jedes Element anzusprechen aber bei größeren, hier wäre eine Initialisierungsfunktion in TIA Gold wert. Ich werde deinen Tipp mit dem Script zur Vorbesetzung mal mitnehmen, ich bin auch gespannt wie stark dann die Kommunikationslast ausgereizt wird und dann entscheiden wie groß das Array sein wird.
Ich danke euch für die Hilfe.
 
Zurück
Oben