WinCC Flex Wincc flexible 2008 CSV Datei schreiben per Script

olmuk

Level-2
Beiträge
61
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

bitte um Hilfe zur Erzeugung einer CSV Datei.
Ich scheitere am Weiterschreiben einer hier exemplarischen Temperatur ( kommen noch andere Werte hinzu ).
Der Header soll bleiben und dann immer in einer neuen Zeile den Wert alle Sekunde aufgenommen.

Vielen Dank für Tipps

Hier mein Script

Code:
'Deklaration von lokalen Variablen
Dim fso, f, ts, path, file, myfile, Trigger, Shut

Shut = SmartTags("AM: Prf running")
Trigger = SmartTags("M :Trigger")
myfile = Dateiname
path = "C:\test\"
file = path & myfile & ".csv"

'Abfrage ob Dateinamen eingegeben wurde
If myfile = "" Then 
    Error_Dateiname = 1
Else
    Error_Dateiname = 0    
End If

'Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")

'Abfrage Ordner vorhanden, wenn nicht dann erzeugen
If Not fso.FolderExists("c:\test") Then 
    fso.CreateFolder("c:\test")
End If

'Abfrage Datei vorhanden, wenn nicht dann erzeugen
If Not fso.FileExists(file) Then   
    fso.CreateTextFile(file)              
End If 

Set f = fso.GetFile(file)    
Set ts = f.OpenAsTextStream(2, -2)    

'Werte in die Datei schreiben
ts.WriteLine("Schritt Nr; " & SmartTags("DB: DATA TEMP SEQ 1 W.Step_Nr") & ";")
ts.WriteLine("Solldruck; " & SmartTags("DB: DATA TEMP SEQ 2 W.Sollwert_PropVentil_PRF") & ";")


If Trigger = True Then
SmartTags("DB: BUTTON HMI.Test121") = 1
ts.WriteLine("Schritt Nr; " & SmartTags("DB: INST ANALOG IN.ACTUAL_VALUES.TEMP_SCHRANK") & ";")
Else
    
SmartTags("DB: BUTTON HMI.Test121") = 0

End If

If Shut = True Then

'Close file - Datei schließen
ts.Close

Set ts  = Nothing
Set f   = Nothing
Set fso = Nothing

End If
 
Du mußt die Datei im Modus 8 "Append" öffnen, beim Modus 2 wird der Dateiinhalt beim Öffnen gelöscht. (siehe Hilfe zur OpenAsTextStream-Methode)

Wenn die Datei noch nicht existiert, dann neu anlegen und Header schreiben.
Danach/Sonst die Datenzeile schreiben.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Harald,
leider verstehe ich nicht Deine Antwort - bedeutet das bei jedem Aufruf des Scriptes die Datei neu beschrieben wird ?
Ich rufe das Script beim Öffnen eines Bildes auf.
Schau erst mal die Hilfe nach.

Gruss Uwe
 
Hier ein funktionierendes Beispiel:

Wenn die Datei nicht existiert, wird sie erstellt und eine Headerzeile sowie eine Datenzeile geschrieben
Wenn die Datei existiert, wird nur eine Datenzeile geschrieben:
Code:
Dim f, fs ,datei 
'Objekt erzeugen
Set f = CreateObject("FileCtl.File")
Set fs=CreateObject("FileCtl.Filesystem")
datei = "\Storage Card USB\Dateiname.csv"
'Abfrage ob Datei schon existiert
If fs.dir(datei) = "" Then
f.Open datei, 8 
f.Lineprint "Wert1;Wert2"
f.Close
End If

f.Open datei, 8
f.LinePrint (SmartTags("Wert1"))&";"&( SmartTags("Wert2"))
f.Close                
Set f = Nothing
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
leider verstehe ich nicht Deine Antwort - bedeutet das bei jedem Aufruf des Scriptes die Datei neu beschrieben wird ?
Ich rufe das Script beim Öffnen eines Bildes auf.
Hallo Uwe,

Du solltest das Skript nur aufrufen, wenn Du auch was in die Datei schreiben willst. Wann das ist, das mußt Du wissen.
Oder Du mußt im Skript vor dem Öffnen + Schreiben prüfen, ob ein Trigger erfüllt ist.

Da Du eine PC-Runtime programmierst, müßte ein funktionierendes Minimal-Skript etwa so aussehen:
Code:
Const ForAppend = 8
Dim fso, f, file

file = "C:\test\myfile.csv"

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists (file) Then 
    Set f = fso.CreateTextFile(file, True)
    f.WriteLine "Wert1;Wert2"
    f.Close
End If

If fso.FileExists (file) Then
    Set f = fso.OpenTextFile(file, ForAppend)
    f.WriteLine SmartTags("Wert1") & ";" & SmartTags("Wert2")
    f.Close
End If

Zu Dateien lesen/schreiben siehe auch mal
Wie können an einem PC mit WinCC flexible Informationen in einer Textdatei mit Hilfe eines Skripts gespeichert und ausgelesen werden?
FAQ: Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script

Harald
 
Du mußt die Datei im Modus 8 "Append" öffnen, beim Modus 2 wird der Dateiinhalt beim Öffnen gelöscht. (siehe Hilfe zur OpenAsTextStream-Methode)
leider verstehe ich nicht Deine Antwort - bedeutet das bei jedem Aufruf des Scriptes die Datei neu beschrieben wird ?
Meine Antwort bezog sich auf Deinen Code:
Ich scheitere am Weiterschreiben einer hier exemplarischen Temperatur ( kommen noch andere Werte hinzu ).
Der Header soll bleiben und dann immer in einer neuen Zeile den Wert alle Sekunde aufgenommen.
[...]
Code:
Set ts = f.OpenAsTextStream([COLOR="#FF0000"][B]2[/B][/COLOR], -2)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

es hat sich etwas an den Anforderungen geändert so das ich nun immer aufzeichne ( pro sek ).
Anbei das Script welches fuppt - die Funktion append war sehr hilfreich.
Das Script wird nun mit Start der Prüfung ( M13.0 ) aufgerufen und mit CPU-Takt 1 sek getriggert.
Das erzeugt leider dopplete Einträge - hat hier jemand eine Idee ?

Code:
Const ForAppend = 8
Dim fso, f, file, myfile, path


myfile = SmartTags("DB: MISC.Dateinamen")
path = "C:\test\"
file = path & myfile & ".csv"

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists (file) Then 
    Set f = fso.CreateTextFile(file, True)
    f.WriteLine(" Header Zeile 1; " & ";")
    f.WriteLine(" Header Zeile 2; " & ";")
    f.WriteLine(" ; " & ";")
    f.WriteLine(" Zeitachse; " & " Temperatur; " & " Istdruck;" & ";")
End If

If fso.FileExists (file) Then
    Set f = fso.OpenTextFile(file, ForAppend)
    f.WriteLine SmartTags("DB: INST TIMER GESAMT.TON_GESAMT.ET") & ";" & SmartTags("DB: INST ANALOG IN.ACTUAL_VALUES.TEMP_SCHRANK") & ";" & SmartTags("DB: INST ANALOG IN.ACTUAL_VALUES.DRUCK_PRUEFUNG")
    f.Close
End If

Trigger.PNG
CSV1.PNG
 
wenn du ein bit nimmst hast du nur die Möglichkeit wertänderung. also wird das script bei kommenden und gehenden Ereignis aufgerufen
entweder du nimmst ein Byte und die Funktion grenzwert überschritten oder im script

if Smarttags(M13.0) = false then Exit sub
 
Das Script wird nun mit Start der Prüfung ( M13.0 ) aufgerufen und mit CPU-Takt 1 sek getriggert.
Das erzeugt leider dopplete Einträge - hat hier jemand eine Idee ?
Am einfachsten Du prüfst am Anfang des Skriptes, ob es das 0-1-Ereignis der Wertänderung des CPU-Taktes ist:
Code:
If Not SmartTags("AM: Prf running") Or Not SmartTags("M: CLOCK: 1S / 1Hz") Then
    Exit Sub
End If

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

anbei das funktionierende Script :

Code:
'*** Daten aus Prüfung in Datei schreiben       ***
'    Informationen als Header und Abfrage ob
'    Ordner Speicherort vorhanden
'    UJ / 02.09.2016
'**************************************************
'
Const ForAppend = 8
Dim fso, f, file, myfile, path


myfile = SmartTags("DB: TEXTLISTEN.Dateinamen")
path = "C:\Checkdata\"
file = path & myfile & ".csv"

'Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")

'Abfrage Ordner vorhanden, wenn nicht dann erzeugen
If Not fso.FolderExists("c:\Checkdata") Then 
    fso.CreateFolder("c:\Checkdata")
End If

If Not fso.FileExists (file) Then 
    Set f = fso.CreateTextFile(file, True)
    f.WriteLine(" Dateiname :  ; " & SmartTags("DB: TEXTLISTEN.Dateinamen") & ";")
    f.WriteLine(" Datum     :  ; " & Date & ";")   
    f.WriteLine SmartTags("DB: TEXTLISTEN.Kommentar1") & ";"
    f.WriteLine SmartTags("DB: TEXTLISTEN.Kommentar2") & ";"
    f.WriteLine(" ; " & ";")
    f.WriteLine(" Zeitachse [ sek ]; " & " Temperatur [ °C ]; " & " Istdruck [ mbar ];" & " Solldruck [ mbar ];" & " Ölniveau [ 0/1 ];" & ";")
End If

If fso.FileExists (file) Then
    Set f = fso.OpenTextFile(file, ForAppend)
    f.WriteLine SmartTags("DB: INST TIMER GESAMT.TON_GESAMT.ET") & ";" & SmartTags("DB: BERECHNUNGEN.Istwert_Temp_RND") & ";" & SmartTags("DB: DATA TEMP SEQ 2 W.Anzeige_Drucksensor") & ";" & SmartTags("DB: DATA TEMP SEQ 2 W.Sollwert_PropVentil_PRF") & ";" & SmartTags("DB: BERECHNUNGEN.Status_Oelstand")
    f.Close
End If

Danke für die Hilfen !!

Gruss Uwe
 
Zurück
Oben