Read HiField(j,i) VB Skript

Hocheck

Level-1
Beiträge
69
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Nachdem ich die Sache mit dem Schreiben in die txt datei lösen konnte brauche ich nochmals etwas hilfe....:confused:

Die riesige Datenmenge ca 20 X 36 Variablen die ich in die txt Datei schreibe soll auch zurückgeladen werden in den Datenbaustein.
Das hatte auch funktioniert auf einem MP277 nur jetzt auf dem TP 277 läuft es natürlich nicht:shock:

Als Vorlage diente wieder das Read Skript von Siemens selbst.
Dort wird in einer Do While schleife bis zum Ende der Datei die Linie eingelesen, gesplittet und in ein Hifield(j,i) array ausgegeben.
Die eigentlichen Werte die in dem array hinterlegt sind schreiben die in der Do While Schleife noch in eine Variable.
Das mag auch bei deren Beispiel mit 3 Variablen gut funktionieren. Aber bei über 700 Variablen (Erfassungsszyklus 2s (nicht zu ändern wegen der write funktion)) dauert das gut und gerne 50 Minuten, da immer alles neu durchläuft.

Habe schon einige Dinge Probiert (blau) geändert usw...

Aber ich weis nicht warum genau das nicht in den DB geschrieben wird?!

Ich lese einen String aus der Datei ja aus und will das dann auswerten und zum Beispiel als Bool in den DB schreiben- Dafür habe ich das Cint oder CBool benutzt- läuft aber auch nicht...

Oh mann...
entschuldigt mein generve damit, bin wohl schon zu alt für solche programmierung:rolleyes:...


Do While fe.EOF= False
MyZf = fe.LineInputstring
field = Split(MyZf, ";") 'Aufteilen der Zeile in die einzelnen Strings
For i=0 To 1 'Wert von HiField x hier nach To zählt die Spalten
field(i) = Replace(field(i), " ", "")'Leerzeichen rausnehmen
HiField(j,i) = field(i) 'schiebe field in Hifield
Next
Daten(j,i) = Hifield(j,i)
j = j + 1
Loop

SmartTags("Programm.Schritt[1].Vorw_INT.Var_1") = Daten(10,1) or CBool(HiField(10,1))'Typ: BOOL

SmartTags("Programm.Schritt[1].Vorw_INT.Var_44") = HiField(45,1)'Typ: DINT
SmartTags("Programm.Schritt[1].Vorw_INT.Var_45") = CInt(HiField(45,1))'Typ: INT
….
SmartTags("Programm.Schritt[20].Vorw_INT.Var_1") = HiField(510,1)'Typ: BOOL

SmartTags("Programm.Schritt[20].Vorw_INT.Var_44") = HiField(710,1)'Typ: DINT
SmartTags("Programm.Schritt[20].Vorw_INT.Var_45") = HiField(772,1)'Typ: INT
 
... Aber bei über 700 Variablen (Erfassungsszyklus 2s (nicht zu ändern wegen der write funktion)) dauert das gut und gerne 50 Minuten, da immer alles neu durchläuft.

Hallo,
ich kann jetzt nicht wirklich etwas zu deinem Problem beitragen ... mich würde aber interessieren, warim "immer wieder alles neu durchläuft" ?

Gruß
LL
 
Hallo Larry,
Danke für die schnelle Antwort wieder:-D
Habe mich ziemlich undeutlich ausgedrückt.
Das Skript von Siemens umgemüntzt auf mein Projekt sieht so aus, wie unten angehängt- So läuft ja die Schleife immer mit dem loop durch... Ist aber wirklich komisch, da es so funktioniert und so wie das skript oben aus meinem ersten Post nicht...

Hallo Helmut
Das skripten ist denke ich in gewissem Umfang bei jedem moderneren TP/OP schon möglich. Bei dem TP 277 geht es auf jeden fall und ein TP 270 habe ich auch schon etwas geskriptet.

Do While fe.EOF= False
MyZf = fe.LineInputstring

field = Split(MyZf, ";") 'Aufteilen der Zeile in die einzelnen Strings
For i=0 To 1 'Wert von HiField x hier nach To zählt die Spalten
field(i) = Replace(field(i), " ", "")'Leerzeichen rausnehmen
HiField(j,i) = field(i) 'schiebe field in Hifield
Next

SmartTags("Programm.Schritt[1].Vorw_INT.Var_1") = CBool(HiField(10,1))'Typ: BOOL

SmartTags("Programm.Schritt[1].Vorw_INT.Var_44") = HiField(45,1)'Typ: DINT
SmartTags("Programm.Schritt[1].Vorw_INT.Var_45") = CInt(HiField(45,1))'Typ: INT
….

j = j + 1
Loop
 
Hallo Hochecker,

wie hat Dein Script und und Deine Csv-Datei ausgesehen und wie hast Du das HiField Deklariert?

Wenn ich von Deiner ersten Aussage ausgehe, dann müßte die Deklaration

Dim HiField(20,36) gewesen sein.

Doch hast DU nun alle Werte in einer Spalte untereinander aufgelistet wenn ich deinen letzten Skript richtig deute.
Dann müßte die Deklaration
Dim HiField(720,1) sein, oder?

Die Variablenwerte hast DU dann mit
z. Bsp.
SmartTags("Programm.Schritt[1].Vorw_INT.Var_45") = CInt(HiField(45,1))'Typ: INT
wobei "45" der Zeile
und "1" der Spalte der CSV-Datei entsprechen.
Ist das richtig? Habe leider unter der WinCC flexible Hilfe noch keine richtige Beschreibung gefunden. Ich will was ähnliches nur zum Neustart einlesen alerdings bei einer PC-Anwendung.
Bitte korrigiere mich
Gruß
SUZI
 
Zuletzt bearbeitet:
Zurück
Oben