# WinCC Flex Werte in ein Array schreiben



## Neuling74 (20 Juli 2007)

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


----------



## volker (21 Juli 2007)

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


```
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
```


----------



## Neuling74 (21 Juli 2007)

Morgen Volker!
Danke für Deine Antwort. Werde ich gleic h ausprobieren und dann heute nachmittag sagen ob es geklappt hat.

Gruß MichaEL


----------



## Neuling74 (21 Juli 2007)

Hallo Volker!
es funktioniert. 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.


----------



## Thermo (25 Februar 2011)

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


----------



## rostiger Nagel (25 Februar 2011)

wenn deine Variabel für das Array in etwa so aussieht
SmartTags("Variabel")(0)
..
..
SmartTags("Variabel")(254)


```
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


----------



## Thermo (25 Februar 2011)

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


----------



## winnman (25 Februar 2011)

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.


----------



## rostiger Nagel (25 Februar 2011)

Wenn jetzt die Var "Luefternummer" ein Teil deines Arrays ist dann vlt so

```
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
```


----------



## Thermo (1 März 2011)

Vielen Dank für die Hilfe..

Bin endlich dazu gekommen, es zu testen...funktioniert (zur zeit zwar noch ohne Vorrichtung)..


----------



## Thermo (24 Dezember 2015)

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


----------



## Larry Laffer (24 Dezember 2015)

Versuch es mal so (oder ähnlich) :
fo.print "Werte :" + ";"

```
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


----------



## Thermo (25 Dezember 2015)

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


----------



## Larry Laffer (25 Dezember 2015)

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


----------



## Thermo (29 Dezember 2015)

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..

Grüße & Danke
Steffen


----------



## Thermo (30 Dezember 2015)

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


----------

