Das Skript mit den 15 Variablen ist Beispielhaft denn ich Schreibe kein Skript mit 5000 Variablen wenn ich nicht weiß ob es klappt.
Das Problem ist folgendes: Ich Teste das gerade und lese mit dem geposteten Skript eine CSV Datei ein mit 5 Spalten und 4 Zeilen. das lasse ich mir auf meinem Panel in 20 E/A Feldern anzeigen also Jeder wert der CSV eine Variable.
Also wenn Du schon nicht das Einlesen von 20 Variablen aus 4 Zeilen mit je 5 Werten logisch auf die Reihe bekommst - wie soll das erst mit 5000 Variablen aussehen?
Das Einlesen Deiner 4 Zeilen mit je 5 Werten in 20 Variablen müsste etwa so aussehen:
Code:
fo.open path, mode
If Err.Number <> 0 Then
...
End If
data = fo.LineInputString [COLOR="#008000"]'1. Zeile mit 5 Werten[/COLOR]
data = Replace(data, vbTab & vbTab, delimiter)
splitdata = Split(data, delimiter)
[COLOR="#008000"]'hier sollte UBound(splitdata) geprüft werden! Mit Ausgabe Fehlermeldung mit Zeilennummer![/COLOR]
SmartTags("Variable_01") = splitdata(0)
SmartTags("Variable_02") = splitdata(1)
SmartTags("Variable_03") = splitdata(2)
SmartTags("Variable_04") = splitdata(3)
SmartTags("Variable_05") = splitdata(4)
data = fo.LineInputString [COLOR="#008000"]'2. Zeile mit 5 Werten[/COLOR]
data = Replace(data, vbTab & vbTab, delimiter)
splitdata = Split(data, delimiter)
[COLOR="#008000"]'hier sollte UBound(splitdata) geprüft werden! Mit Ausgabe Fehlermeldung mit Zeilennummer![/COLOR]
SmartTags("Variable_06") = splitdata(0)
SmartTags("Variable_07") = splitdata(1)
SmartTags("Variable_08") = splitdata(2)
SmartTags("Variable_09") = splitdata(3)
SmartTags("Variable_10") = splitdata(4)
data = fo.LineInputString [COLOR="#008000"]'3. Zeile mit 5 Werten[/COLOR]
data = Replace(data, vbTab & vbTab, delimiter)
splitdata = Split(data, delimiter)
[COLOR="#008000"]'hier sollte UBound(splitdata) geprüft werden! Mit Ausgabe Fehlermeldung mit Zeilennummer![/COLOR]
SmartTags("Variable_11") = splitdata(0)
SmartTags("Variable_12") = splitdata(1)
SmartTags("Variable_13") = splitdata(2)
SmartTags("Variable_14") = splitdata(3)
SmartTags("Variable_15") = splitdata(4)
data = fo.LineInputString [COLOR="#008000"]'4. Zeile mit 5 Werten[/COLOR]
data = Replace(data, vbTab & vbTab, delimiter)
splitdata = Split(data, delimiter)
[COLOR="#008000"]'hier sollte UBound(splitdata) geprüft werden! Mit Ausgabe Fehlermeldung mit Zeilennummer![/COLOR]
SmartTags("Variable_16") = splitdata(0)
SmartTags("Variable_17") = splitdata(1)
SmartTags("Variable_18") = splitdata(2)
SmartTags("Variable_19") = splitdata(3)
SmartTags("Variable_20") = splitdata(4)
Bemühe mal Deine Fantasie wie das Skript wohl aussieht wenn Du mal wirklich 5000 Werte einliest. Bei 5000 Werten ist es essentiell wichtig sich vorher Gedanken und ein Konzept zu machen, bevor man den kompletten Code eintippt und dann feststellt, daß das ganze Konzept untauglich ist...
Willst Du wirklich 5000 HMI-Variablen (PowerTags) nur für das Einlesen der Variablen aus der csv-Datei "verballern"? Willst Du wirklich Deinem Kunde 2000 oder 3000 EUR Mehrkosten für die WinCC-Runtime-Lizenz aufbürden nur weil Du anscheinend fast keine Ahnung von VBS hast? Lassen sich Deine 5000 Daten wirklich nicht irgendwie als Array strukturieren und in mehreren Blöcken einlesen? Oder wenigstens die Namen der 5000 HMI-Variablen irgendwie Schleifen-/Index-/bastelfreundlich machen? Die von Dir standhaft ignorierten mehrfachen Hinweise und Nachfragen nach Strukturierbarkeit der Daten als Array waren nicht grundlos...
Hast Du schon mal überschlagen, daß Dein Monster-Skript zum linearen Einlesen von 5000 einzelnen Werten ca. 500 kByte groß wird?!! (und da ist noch nichtmal eine Fehlerprüfung dabei)
(Wie groß darf überhaupt ein VBS-Skript in WinCC Adv. sein??)
Graust es Dir nicht ein bisschen bei dem Gedanke, daß Du ein Skript mit 8000...10000 Zeilen für die 5000 Variablen fehlerfrei eintippen mußt?
Hast Du Dir schon Gedanken gemacht, wie Deine SPS erkennen kann, wann alle 5000 Werte komplett im DB angekommen sind? Dafür bräuchtest Du eine geeignete Prüfsumme und ein Handshake, oder Du müsstest die Daten als Rezeptur in die SPS schreiben. Das Handling zum Sicherstellen der kompletten Übertragung sollte auch mit 20 Werten schon funktionieren und ausgetestet sein, bevor es auf 5000 Werte erweitert wird.
Wie lange darf das Einlesen der 5000 Werte in die SPS dauern?
Wie/wann soll das Skript zum Einlesen der csv-Datei aufgerufen werden? Mit einem Button in einem Bild? Weißt Du von der Eigenart, daß die WinCC Adv. Runtime beim Aufruf des Bildes mit dem Button (unnötigerweise) zunächst alle erkennbar im Skript verwendeten HMI-Variablen aus der SPS ins HMI einliest? Das gibt dann jedesmal beim Bildaufruf eine schöne Kommunikationslast, vielleicht sogar eine Kommunikationsüberlastung.
Weißt Du daß bei jedem Schreiben auf ein Element einer Array-HMI-Variable das Schreiben des gesamten Arrays ausgelöst wird? Spätestens hier wird es Kommunikationsüberlastungen geben.
Harald