WinCC Flex Werte in ein Array schreiben

Neuling74

Level-2
Beiträge
77
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde!
Ich habe dieses Thema schon einmal hier ins Forum gestellt. Folgendes Problem habe ich:

Ich habe eine TAB-Datei, die ich auslesen muss. Öffnen und die Werte einlesen klappt auch soweit. Nun möchte ich bestimmte Daten in ein Array schreiben, das ich in der Steuerung angelegt habe(100 Werte vom Typ REAL). Soweit alles noch okay. Aber wie bekomme ich jetzt einen Datensatz in dieses Array? So wie es im Anhang aufgeführt ist, geht es nicht(ist ein Auszug aus dem Script).

Ich arbeite mit WinCC flex neuste Version. S7-317-2DP Runtime auf PC

Kann mir da jemand helfen? Bin auch in VB nicht so der Crack.

Schon einmal Danke für die Bemühungen!
Gerne auch PN
 

Anhänge

  • VB_Script_1.doc
    21,5 KB · Aufrufe: 66
in diesem beispiel ist in der datei array.txt je zeile 1 wert abgelegt.
in protool/wccf richte eine var_1 (z.b. db10 ab dbw0) ein. (anzahl der elemente (hier 20))
es werden 20 dbw's im db10 beschrieben

Code:
Dim zeile,datei,textfile1,fs,inzeile

datei="array.txt"

Set fs = CreateObject("Scripting.FileSystemObject")
Set TextFile1 = fs.OpenTextFile(datei, 1)

Do While textfile1.AtEndOfStream <> true
    inzeile=textfile1.ReadLine
    VAR_1(zeile)=inzeile
    zeile = zeile + 1
    If zeile=20 Then Exit Do
Loop
 
Hallo Volker!
es funktioniert.:p Dabei war ich mir sicher das ich das so auch schon probiert habe. Wohl doch nicht. Schönen Dank noch einmal und ein schönes Wochenende Euch allen.
 
Hallo Volker!
Gibt es diese Funktion auch umgekehrt?

Versuche gerade ein Script zu basteln, mit dem ich 245 Messwerte (Real) aus einer Variablen (mit 245 Array-Elementen) in eine Textdatei schreiben kann.
Jede Wert sollte in eine neue Zeile geschrieben werden.

Den Dateinnamen möchte ich aus Datum, Uhrzeit und einer laufenden Nummer aus einer Variablen erstellen. Das funktioniert auch wunderbar.

Dim fso
Dim Datei
Dim Jetzt
Dim Luefter
Jetzt = Replace(Now(), ":", "-")
Luefter = SmartTags("Luefternummer")
Set fso = CreateObject("Scripting.FileSystemObject")
Set Datei = fso.CreateTextFile("C:\Daten\sicher\" & Jetzt & " Messwerte Lüfter " & Luefter & " .txt", True

Könnte da "ein wenig" Hilfe gebrauchen..

Schonmal danke

Steffen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn deine Variabel für das Array in etwa so aussieht
SmartTags("Variabel")(0)
..
..
SmartTags("Variabel")(254)

Code:
Dim x, zeiger, textfile
 
For x = 0 to 254
     zeiger = "Variabel" & x
     textfile.WriteLine SmartTags(zeiger)
next

den Syntax für das Schreiben für die Textdatei kannst du aus
Volker seinen FAQ nehmen http://www.sps-forum.de/showthread.php?t=15348
 
Schonmal vielen Dank für die schnelle Hilfe.

Volker's FAQ hab ich schon mehrere Stunden von oben bis unten durchsucht..aber verstehen tu ich da nich wirklich was..und wo ich die deine Syntax mit einpflegen soll raff ich schonmal gar net..

Zumindest hab ich jetzt das Script soweit, dass ich in einer Textdatei 245 Zeilen stehen habe:

Wert 0
Wert 1
Wert 2
Wert 3
Wert 4
Wert 5
Wert 6
Wert 7
Wert 8
Wert 9
..

Dahinter fehlt jetzt "nur" noch mein Messwert. Das krieg ich irgendwie nich hin..

Zur Zeit sieht das so bei mir aus:

Dim fso
Dim Datei
Dim Jetzt
Dim Luefter
Dim Wert
Dim x, zeiger
Jetzt = Replace(Now(), ":", "-")
Luefter = SmartTags("Luefternummer")
Set fso = CreateObject("Scripting.FileSystemObject")
Set Datei = fso.CreateTextFile("C:\Daten\sicher\" & Jetzt & " Messwerte Lüfter " & Luefter & " .txt", True)
For x = 0 To 245
zeiger = "Wert " & x & " "
Datei.WriteLine zeiger
Next

Meine Messwerte liegen, wie erwähnt, in meiner Variable "messdaten" mit den 245 Arrays.

Sorry, wegen der Begriffsstutzigkeit meinerseits
 
vielleicht gehts auch so:

in der Visu 2 Felder:
1. Variablennummer
2. Variable
3. Übertragen Button
beide verweisen auf einen Separaten Bereich in der SPS, nicht in dein Array

in der SPS:
Auswerten der Variablennummer und mit Bit Übertragen die Variable in das Array schreiben. Übertragen Bit zurücksetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn jetzt die Var "Luefternummer" ein Teil deines Arrays ist dann vlt so
Code:
Dim fso
Dim Datei
Dim Jetzt
Dim Luefter
Dim Wert
Dim x, zeiger
Jetzt = Replace(Now(), ":", "-")
Luefter = "Luefternummer"
Set fso = CreateObject("Scripting.FileSystemObject")
Set Datei = fso.CreateTextFile("C:\Daten\sicher\" & Jetzt & " Messwerte Lüfter " & Luefter & " .txt", True)
For x = 0 To 245
     zeiger = "Wert " & x & " " & SmartTags(Luefter)(x)
     Datei.WriteLine zeiger
Next
 
Vielen Dank für die Hilfe..

Bin endlich dazu gekommen, es zu testen...funktioniert (zur zeit zwar noch ohne Vorrichtung)..
 
Hallo und guten Tag!
versuche gerade ein Skript, das auf einem PC mit Runtime schon funktioniert hat auf ein Comfort Panel zu übertragen.

Über das Skript sollen 245 Messwerte (real) in eine Text oder CSV Datei geschrieben werden. Funktioniert auch soweit alles, nur werden die Werte alle untereinander geschrieben, anstatt hintereinander (wie ich es gerne hätte).

Gibt es eine Möglichkeit das zu ändern?

Skript als Anhang (denke ich)

Vielen Dank für Eure Hilfe!



Anhang anzeigen Skript Array in Textdatei.doc
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuch es mal so (oder ähnlich) :
fo.print "Werte :" + ";"
Code:
For x = 0 To 244 Step 1  'Array [0 .. 244] of Real aus DB
   Wert = SmartTags("Messdaten")(x) 'Messwert + Index
   fo.print Wert + ";" 'Messwert schreiben
next
fo.lineprint " "
Gruß
Larry
 
Hey Larry,

danke für den Hinweis, hat aber leider keine Besserung gebracht. Mit dem Befehl "Print" wird leider gar nichts geschrieben. wenn ich LinePrint verwende, habe ich das gleiche Ergebnis wie vorher:


14.02.2009;09:58:56;
0;
0;
0;
0;
0;
0;
0;
..usw.

und so soll es aussehen:
14.02.2009;09:58:56; 0;0;0;0;0;0;0;..usw

Die "0" wird natürlich nur angezeigt, weil ich keine SPS angeschlossen habe..

Macht es einen Unterschied, ob ich im TIA oder in WinCC programmiere?

Grüße
Steffen
 
Ich bitte um Endschuldigung - ich habe gerade kein Flex zur Hand und habe mich von deinem Ansatz verführen lassen.
Es sollte heissen : WRITE statt PRINT und WRITELINE statt LINEPRINT.

WRITE schreibt nur den übergebenen String und WRITELINE hängt noch ein CR-LF (Zeilenabschluß) hinten mit dran ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

sobald ich "Write" ins Skript einfüge, bekomme ich eine Fehlermeldung, dass "Write" nicht unterstützt wird (Object doesn't support this property or method: fo.write..). hast du evtl noch eine andere Möglichkeit im Ärmel? Habe alle mir erdenklichen Schreibweisen oder das was ich in Foren gefunden habe versucht..ohne Erfolg
Am besten hat es bisher funktioniert, wenn ich die Messwerte einfach hintereinander aufführe:
SmartTags ("Messwert")(0)& ";" & SmartTags ("Messwert")(1)& ";" &SmartTags ("Messwert")(2)& ";" &SmartTags ("Messwert")(3)& ";" ..
bei 245 Messwerten, allerdings etwas unübersichtlich..:D

Grüße & Danke
Steffen
 
habe die bzw. eine Lösung gefunden:

wert=CStr(SmartTags("Messwert")(0))



For i=0 To 244

wert=wert & ";" & CStr(SmartTags("Messwert")(i))
Next

f.LinePrint jetzt & ";"& wert
 
Zurück
Oben