TIA TP1900 Comfort VB Script für textbasierte Datei auslesen

Ondel

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebe Forianer,

ich könnte vielleicht mal etwas Rat und Hilfe von eurem Fachwissen gebrauchen.
Aktuell steh ich vor einer kleinen Herausforderung und versuche diese so gut es geht zu meistern.
Mein aktuelles Projekt das mir zugeteilt wurde besteht unter anderem aus folgender Aufgabenstellung:

Über ein Siemens TP1900 Comfort Panel (6AV2-124-0UC02-0AX0) Version 13.0.1.0 soll eine textbasierte Datei im .gio Format von einem Windows-Server ausgelesen werden und die ausgelesenen Werte in einer Siemens S7-1215C/DC/DC (6ES7 215-1AG40-0XB0) FW. 4.2 weiterverarbeitet werden. Als Programmierumgebung nutze ich das TIA Portal V14 in der Prof. Version.

Ich habe mittlerweile auch ein VB-Script im Panel laufen, welches die Aufgabenstellung ausführen soll. Leider werden mir aber die ausgelesenen Daten nicht im zugeteilten DB gespeichert und ich bekomme vom Script jedoch die Rückmeldung "ShowSystemAlarm "Reading of data was successful!" Leider bin ich ein völlig blutiger Anfänger was Visual Basic und das Scripten auf einem Comfort Panel angeht. Daher hoffe ich auf euer kompetentes Schwarmwissen mit dem Ihr mir vielleicht sagen könnt, was im Script noch falsch ist bzw. wie ich es umschreiben muss, das die ausgelesenen Werte auch im DB abgespeichert und mir angezeigt werden.

Für die bessere Nachvollziehbarkeit habe ich euch einmal das Script und die auszulesende Datei bereit gestellt.

Auszulesende Datei:
Anhang anzeigen GIO Datei.txt

Script:
Anhang anzeigen Script.txt

Ich danke euch schon mal für eure Mühen
MfG Andreas
 
Zuletzt bearbeitet:
Hallo,

entfern doch mal die Zeile "On Error Resume Next" und schau ob Fehler ausgegeben werden.
Sind die Variablen (Pos1Coil, Pos1Anzahl, ...) auch SPS Variablen oder nur interne Variablen?

Was wird angezeigt wenn du als vorletzte Zeile schreibst:
Code:
ShowSystemAlarm HiField(0,0)

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Andreas
... ich bekomme vom Script jedoch die Rückmeldung "ShowSystemAlarm "Reading of data was successful!" ...
Dein Script scheint immerhin die Hoffnung noch nicht aufgegeben zu haben. Die "Lesung" war also erfolgreich.
So, Du hast also alle Zeilen der Datei eingelesen. Zeile für Zeile die vorherige Zeile in data mit der aktuellen überschrieben.
Dann schaust Du, was in data drin steht (die "1" aus der letzten Zeile dürfte dort zu finden sein) und versuchst diese in 10 Informationen aufzusplitten und wartest darauf, dass diese 10 wie von Geisterhand in den 5 Zeilen und 10 Spalten von HiField auftauchen ...

Code:
[FONT=courier new]xLine& = 0: [COLOR=#222222]xRow& = 0: [/COLOR][COLOR=#222222]xTmp$ = [/COLOR]""
While fo.EOF = False
    xTmp$ = " " & trim$(xTmp$ & fo.LineInputString) & " "
[LEFT][COLOR=#222222]    xLine& = [/COLOR][COLOR=#222222]xLine& + 1 ' ZeilenNr der gio-Datei erhöhen[/COLOR][/LEFT]
    if ([COLOR=#222222]xLine& mod 6) = 0 then
[/COLOR][LEFT][COLOR=#222222][LEFT][COLOR=#222222]        splitdata = Split(trim$(xTmp$), delimiter)[/COLOR][/LEFT]
        SmartTags("Pos1Coil") = HiField(xRow&, 0)
        SmartTags("Pos1Anzahl") = HiField(xRow&, 1)
        SmartTags("Pos1LängeA") = HiField(xRow&, 2)
        SmartTags("Pos1StrahlungA") = HiField(xRow&, 3)
        SmartTags("Pos1LochA") = HiField(xRow&, 4)
        SmartTags("Pos1LängeB") = HiField(xRow&, 5)
        SmartTags("Pos1StrahlungB") = HiField(xRow&, 6)
        SmartTags("Pos1LochB") = HiField(xRow&, 7)
        SmartTags("Pos1Typ") = HiField(xRow&, 8)
        SmartTags("Pos1Falzung") = HiField(xRow&, 9)
        xRow& = xRow& + 1 ' ZeilenNr des HiField erhöhen
        xTmp$ = ""
        endif
[/COLOR][/LEFT]
    Wend
[/FONT]
Ungetestet, aber hoffentlich etwas näher an der gewünschten Funktionalität.
Beim Einlesen jeder Zeile wird ihr Inhalt an xTmp$ angehängt.
Wenn 6 Zeilen eingelesen sind, sollten 10 Werte in xTmp$ stehen, die dann auf die 10 Spalten der aktuellen HiField-Zeile aufgeteilt werden.
Gruss, Heinileini

Anm.: dieser verflixte Editor schiebt die Informationen immer nach eigenem Gutdünken zurecht und fügt sporadisch LFs ein - das artet in SchischipfuschArbeit aus ;o)
 
Zuletzt bearbeitet:
Wir hatten hier gerade erst fast die gleiche Aufgabe mit genau den selben Anfängerfehlern, schau mal hier: CSV Datei in DB einlesen
besonders die Beiträge #8 und #24

Welche Hürden allgemein beim Lesen/Schreiben HMI<-->PLC auftreten siehe mal hier: https://www.sps-forum.de/hmi/32924-...lab-eines-skriptes-schleife-5.html#post344409
und benutze mal die Forumssuche mit den Suchbegriffen
- csv einlesen
- SetDataRecordTagsToPLC

PS: bei Deinem Skript kann nichts in den 10 Variablen ankommen, weil Du da zuerst durch alle Zeilen der gio-Datei durchrast (While fo.EOF = False / data=fo.LineInputString / Wend) und dann den einen Wert aus der letzten Zeile in 10 Werte splitten willst - daß das Split(..) gar keine 10 Werte ergeben hat hast Du generös ignoriert... Du müsstest nach jedem LineInputString die eingelesene Zeile analysieren und die Werte entnehmen, was bei der ungleichmäßigen Struktur Deiner Eingabedatei ziemlich aufwändig wird. Oder Du müsstest zunächst alle Zeilen Zeile für Zeile einlesen und hintereinander verketten und danach erst splitten.

Harald
 
Zuletzt bearbeitet:
... Du müsstest nach jedem LineInputString die eingelesene Zeile analysieren und die Werte entnehmen, was bei der ungleichmäßigen Struktur Deiner Eingabedatei ziemlich aufwändig wird. ...
In der Beispiel-gio-Datei sieht die Komplexität der "ungleichmässigen Struktur" ganz überschaubar aus.
2 Zeilen mit je 1 Wert
2 Zeilen mit je 3 Werten
2 Zeilen mit je 1 Wert
Hatte bei meinem Vorschlag den Weg gewählt, 6 Zeilen zu lesen und dabei die 10 Werte zu sammeln.
Dann in 1 Rutsch die 10 Werte in eine Zeile des HiField zu beamen u.s.w. ...
Ganz ohne Prüfung allerdings, ob die Daten in der Datei dem erwarteten "Format" entsprechen und ob der Datenstrom vorzeitig versiegt.
Es ging ja mehr um's Prinzip ... wenn das verstanden ist, kann man sich um die Feinheiten kümmern (und zur Not den eingeschlagenen Lösungsweg in die Tonne treten und völlig neu strukturieren - nur Mut ;o) .
Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure schnellen Antworten, ich werde mir eure Ratschläge mal zu Gemüte führen und schauen was ich hier noch zurecht biegen kann.
Ich bin wie gesagt im Bereich VB Script ein blutiger Anfänger und hatte bis zu dieser Aufgabenstellung noch nichts damit am Hut.
Das Script was ich hier verwendet habe hab ich als Beispiel-Script im Internet gefunden, aber es scheint dann wohl nicht so einfach auf meine Belange umsetzbar zu sein.

Ich halte euch auf dem laufenden wie es bei mir mit dem Script aussieht, jetzt muss ich erst mal schauen wann ich wieder an die Anlage ran komme um die änderungen zu testen.

MfG Andreas
 
Du könntest das Skript auch komplett simuliert auf Deinem PG entwickeln und testen (PLCSIM + WinCC Runtime)
Man beachte und vergleiche die unterschiedlichen Befehle, je nachdem, ob das Skript unter WinCE (MP270)
oder Win32 (PC-Windows) läuft.
[...]
Damit ich meine Panel-Projekte komplett unter Windows XP testen/simulieren kann,
habe ich im WCCflexible-Projekt eine interne Panel-Variable "_System\!_RT-Sim_!"
vom Typ Byte, deren Startwert ich auf 0 oder 1 festlege, je nachdem, ob die Runtime
auf dem Panel oder auf dem WinXP-Testsystem laufen soll:
0=RT auf WinCE-OP / 1=RT auf PC (Simulation/Test)

Eine Gegenüberstellung der unterschiedlichen VBS-Datei-Operations-Befehle findest Du hier:
FAQ: Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script

Harald
 
Zurück
Oben