TIA VBScript Smarttags schreiben

Zuviel Werbung?
-> Hier kostenlos registrieren
Kurze Zwischeninfo:

Ich musste die externen Variablenarrays auf "Erfassungsart: Zyklisch im Betrieb" umstellen. Aktuell lese ich damit über 2000 Daten ein. Bin mal gespannt wie weit sich das noch aufblasen lässt

Info zum "Dummy"-Script und @PN/DP
Die Variablen des Externen-Arrays muss ich in diesem Script aufführen, damit WinCC diese beim Übersetzen überhaupt berücksichtigt. Sobald dies erfolgt ist kann ich per Script diese Array-Variablen mit diesem Kontrukt Smarttags("RAW_INPUT_ARRAY_0"&"["&"0"&"]") beschreiben.
Dabei scheint es tatsächlich egal zu sein ob ich dieses "Dummy"-Script jemals aufrufe oder nicht.

In meinem "Dummy"-Script hab ich die Variablen jetzt mit Smarttags("RAW_INPUT_ARRAY_0[0]")= "" "initialisiert"
 
Muss mal schaun ob ich die Ursache finde, oder ob es tatsächlich einfach so ist, dass ich mit meinen zig Tausend Variablen (die alle 100ms aktualisiert werden) die Datenkommunikation zerlege.
Warum sollen die Variablen alle 100ms aktualisiert werden? Willst Du die alle anzeigen und ändern die sich so schnell? Die Aktualisierungszeit hat keinen Einfluß darauf, wie schnell die Variablen in die SPS geschrieben werden. Geschrieben wird so schnell wie möglich nach jeder Zuweisung.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein die müssen eigentlich nur auf Anforderung in die SPS, allerdings hab ich als Auswahl lediglich "Zyklisch fortlaufend" oder "Zyklisch im Betrieb". Die Auswahl "auf Anforderung" gibts gar nicht. Steht allerdings in der Hilfe beschrieben dass es das geben soll :D
 
Warum sollen die Variablen alle 100ms aktualisiert werden? Willst Du die alle anzeigen und ändern die sich so schnell? Die Aktualisierungszeit hat keinen Einfluß darauf, wie schnell die Variablen in die SPS geschrieben werden. Geschrieben wird so schnell wie möglich nach jeder Zuweisung.

Genau ...!!!
Allerdings würde bei diesen Variablen eine hohe Aktualisierungsrate auch bewirken, dass in dem Raster versucht wird, sie einzulesen ... was deine sonstige Variablenaktualisierung (bei der Menge) auf jeden Fall negativ beeinflusst.
Ich hatte eigentlich noch nicht sehr viele Fälle wo es nötig war, Variablen öfter als im Sekundentakt zu aktualisieren ... und wenn dann waren das in einem Projekt höchsten mal "eine Handvoll" ...

Gruß
Larry
 
Der Thread hier ist schon ziemlich lang, deshalb für mich bitte nochmal zurück zum Anfang:
Ich habe in meinem Projekt eine HMI Variable, die eine projektierte Verbindung zur SPS hat.
Diese Variable ist ein ARRAY [0..1999]

Ich habe ein Script geschrieben, dass mir über eine Schleife diese Variable beschreiben soll.
Das Problem ist, sie beschreibt diese Variablen nur, wenn ich sie vorher einem E/A Feld zuweise.
1) Ist das immer noch Dein Problem?
2) Willst/musst Du die aktuellen Werte in der SPS eigentlich im HMI anzeigen oder reicht es Dir, nur die Werte in die SPS zu schreiben?

Um eine PLC-Variable in der SPS zu beschreiben muß es reichen, in WinCC eine HMI-Variable mit der PLC-Variable zu verbinden und der HMI-Variable z.B. in einem Skript einen Wert zuzuweisen. Dummy-EA-Felder und Variablenauflistung in Dummy-Skripts darf dazu nicht nötig sein - ich kann mir grad nicht vorstellen, daß Siemens nun solchen Mist in TIA V1x eingebaut hat (ich habe TIA V13 zur Verfügung, habe aber noch nie mit TIA-VBS gearbeitet, nur sehr viel mit WinCC flexible).

Ich würde ja gerne mal Deine Aufgabe zum Test zusammenprogrammieren, habe aber momentan nicht die Zeit, mich einen ganzen Tag mit der Aufgabe zu beschäftigen. Wie wir hier schon mehrmals angedeutet haben bestehen bei WinCC VBS diverse Fallstricke, die Du als WinCC-VBS-Anfänger noch nicht kennst und deshalb einige grundsätzliche Fehler machst. Was z.B. noch gar nicht angesprochen wurde, ist das Problem, daß man in WinCC-VBS kein Array auf ein SmartTags-Array kopieren/zuweisen kann (nur umgekehrt, oder geht das nun mittlerweile in TIA???) (ich finde da jetzt grad nicht den Thread, wo wir das Problem hier im SPS-Forum diskutiert hatten) Wenn man aber jedes SmartTags-Array-Element einzeln beschreibt, dann bekommt man Kommunikationsüberlastung... ein Teufelskreis...

Wie die umgekehrte Richtung SPS-->CSV-Datei via Rezeptur für viele kByte sicher funktioniert kannst Du hier mal sehen.
Prozessdaten einer CPU 317 auf Speicherkarte eines TP277 6'' speichern
Das gleiche Prinzip muß auch in der Richtung CSV-->SPS gehen - es dauert halt nur etwas lange bei ...zig kByte. Für bessere Performance müßte man zusehen, die Rezeptur so groß wie möglich zu machen ohne gleich mehrere 1000 Rezepturvariablen deklarieren zu müssen. (Kann man bei TIA Arrays in Rezepturen packen??? Dann würde ich die Struktur im DB als Byte/Word/DWord-Array in der HMI-Rezeptur abbilden, das geht aber nur bei nicht-"optimierten" DB)

Wie man Daten aus csv-Dateien in die WinCC-PC-RT einlesen kann gibt es dieses Siemens-Beispiel
Wie speichern Sie mit der WinCC (TIA Portal) PC Runtime Informationen mit einem Skript in eine Datei?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo @PN/DP

ich versuche mal den Thread zusammenzufassen. Erst mal zu deinen Fragen:
Zu 1) Durch den Work-Around ist das Problem temporär behoben
Zu 2) Ich bin mir noch unschlüssig ob ich die Variablen auch auf der HMI anzeigen lassen möchte. Das Hauptaugenmerk liegt darin die Daten der Variablen in die SPS zu bekommen. Anzeige auf der VISU ist aktuell "nice-to-have"

Jetzt aber mein Versuch der Zusammenfassung:
Es geht darum, dass ich in WinCC eine Variable erstellt habe, die ein ARRAY[0..1999] of String ist. Diese Variable zeigt auf eine identische Variable in einem SPS-DB. Dieses Powertag dient lediglich der Datenübertragung in den SPS-DB, wurde also im HMI nirgends verwendet (keine Querverweise).
Nun wollte ich dieses Variablen-Array mit Hilfe eines VB-Sriptes beschreiben und musste erst einmal feststellen, dass die schreibweise für interne Variablen Smarttags("ARRAY")(i) bei Powertags nicht funktioniert. Auch ein Smarttags("ARRAY") ist nicht möglich.
Der einzige Schreibweise die akzeptiert wird ist Smarttags("ARRAY" & "[" & i & "]").
Dieses zusammengebaute Variable kennt WinCC aber nicht, solange die zu dem "i" gehörige Variable zum Zeitpunkt der Generierung nicht in der VISU real verwendet wird.
Deswegen habe ich den gesamten Array einmal in einem Script aufgelistet. Beim Generieren übersetzt WinCC auch dieses Script, selbst wenn das Script Ansich zu keinem Zeitpunkt Verwendung in der Runtime findet.

EDIT!!! Ein externes ARRAY belegt zwar nur ein Powertag, durch die komplette Auflistung eines Array in einem Skript kostet ein ARRAY dann dafür 2000 Variablen!!
 
Zuletzt bearbeitet:
Hi zusammen.
Ich habe einen Weg gefunden ein Array of String im Script mit einer For-Schleife zu beschreiben.
Ich hatte exakt das selbe wie hier im Thread diskutiert wird.
Mit einem Array of Int oder sonst was geht das alles. Aber nicht mit String. Mittlerweile haben wir TIA 15 und es geht immernoch nicht. Echt traurig.
Sei wie es will...
Auch das mit dem unbenutzten Script kann ich bestätigen. Es geht dann ist aber echt nicht schön.

Es geht aber auch sauberer:
Die ganzen Arrays of String in eine Rezeptur anlegen und dann im Script mit GetDataRecordFromPLC holen.
Laut anderen Posts ist das eh der einzigste wirklich sichere weg (auch bei anderen Datentypen)
Ich hoffe ich kann hier noch ein paar helfen die in Zukunft noch hier landen ;)
 
Zurück
Oben