WinCC Variablenwerte über script in .csv-Datei auf SD-Karte/Netzwerk speichern

felixwhl

Member
Beiträge
12
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Tag zusammen!

Ich hoffe ihr könnt mir weiterhelfen, versuche gerade über einen script Werte in eine csv zu schreiben.
Habe dabei eine Vorlage von einer extern programmierten Anlage bei der dieser Script 100% funktioniert.
Ich bekomme es dennoch nicht hin, dass vorerst nur auf der SD-Karte eine csv erstellt wird. :confused:
Aktuell arbeite ich noch nicht mit Variablenwerten, da ich derzeit nur probieren will, ob eine Datei erstellt wird.

Wisst ihr wo der Fehler liegt?

S7-1200
TP900 Comfort

Mein Script:

Sub VBFunktion_3()


If SmartTags("Prüfprotokoll_manuell_speichern") = 1 Then


Dim f, fs, pfad, datum


Set fs = CreateObject("filectl.filesystem")


pfad="\Storage Card SD\protocols"
datum="20"&Right(Date,2)&"."&Mid(Date,4,2)&"."&Left(Date,2)

If fs.dir(pfad) = "" Then
fs.mkdir(pfad)
End If


Set f= CreateObject("filectl.file")
f.open "\Storage Card SD\Logs\protocol.csv", 8
f.LinePrint "Logbuch der Pumpe"
f.LinePrint "Datum (JJJJ.MM.TT);"&"Uhrzeit;"&"Schaltspiele;"&"Betriebsstunden [h]"
f.Close


End If


End Sub
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
18.292
Punkte Reaktionen
5.429
Vermutlich gibt es den Ordner "Logs" nicht auf der SD-Card. Weitere Änderungsvorschläge in Blau:
Code:
Sub VBFunktion_3()

[COLOR="#0000FF"]Const ForAppend = 8[/COLOR]
Dim f, fs, pfad, datum

If SmartTags("Prüfprotokoll_manuell_speichern") = 1 Then

    Set fs = CreateObject("filectl.filesystem")

    pfad="\Storage Card SD\[COLOR="#FF0000"]protocols[/COLOR]"
[COLOR="#0000FF"]    datum = Date [/COLOR][COLOR="#008000"]'Date nur einmal abfragen![/COLOR]
[COLOR="#0000FF"]    datum = "20" & Right(datum,2) & "_" & Mid(datum,4,2) & "_" & Left(datum,2) [/COLOR][COLOR="#008000"]'Achtung: Datumsformat abhängig von Control Panel Einstellungen![/COLOR]
 
    If fs.dir(pfad) = "" Then
        fs.mkdir(pfad)
    End If

    Set f= CreateObject("filectl.file")
    f.open "\Storage Card SD\[COLOR="#FF0000"]Logs[/COLOR]\protocol.csv", [COLOR="#0000FF"]ForAppend[/COLOR]
    f.LinePrint "Logbuch der Pumpe"
    f.LinePrint "Datum (JJJJ.MM.TT);"&"Uhrzeit;"&"Schaltspiele;"&"Betriebsstunden [h]"
    f.Close

End If

End Sub

Tipp: zum Posten von Code benutze die Code-Tags - der #-Button im Beitragseditor

Harald
 
OP
F

felixwhl

Member
Beiträge
12
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Danke für deine Antwort!

Beim Verzeichnis habe ich mich verschrieben, anstatt "Logs" gehört natürlich "protocols" rein. Funktioniert trotzdem nicht.
Hab deinen Code probiert mit "protocols" anstatt "Logs", leider nur Leere auf der SD Karte.

Das ist meine Vorlage die funktioniert:

Code:
Sub VBFunktion_2()


Dim fs, f, FName, Header, n, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, Pruefdaten, Messen, M1Oelreinheit, M12Oelreinheit
Dim P1, P2, P3, P3a, P3b, P3c, P4a, P4b, P4c, P5a, P5b, P6, P7, P8, P9, P10a, P11
' SM20010,310000,310001
' Archivierungspfad (Eingangsparameter) und Dateiname zusammensetzen 
' Combine archivepath (input parameter) and filename
FName = "\\Server\Pruefprotokolle\"&  SmartTags("Speicherort")& "\" & CStr(DatePart("yyyy",Date)) & CStr(Right("0" & DatePart("m",Date),2)) &"\" & SmartTags("Identnummer")& ".csv"




If SmartTags(Messdaten_speichern") Then
	
	 Header = "Datum;Auftragsnummer;Identnummer;Bemerkung;"& _
					  
	 		Chr(10)'Nächste Zeile
	
	 Set fs = CreateObject("FileCtl.FileSystem") 
	 
	If fs.dir("\\Server\Pruefprotokolle\"&  SmartTags("Speicherort")& "\" & CStr(DatePart("yyyy",Date)) & CStr(Right("0" & DatePart("m",Date),2)) ) = "" Then
	    fs.mkdir ("\\Server\Pruefprotokolle\"&  SmartTags("Speicherort")& "\" & CStr(DatePart("yyyy",Date)) & CStr(Right("0" & DatePart("m",Date),2)) ) 
	End If 
	
	 Set f = CreateObject("FileCtl.File")
	
	 f.open FName, 8 								
	
	 If fs.FileLen(FName) = 0 Then 					 
	   f.lineprint(Header)
	 End If 
	
	n=";"
	
	Pruefdaten = Now&n&SmartTags("Auftragsnummer")&n&SmartTags("Identnummer")&n&SmartTags("Bemerkung")&n
	 
	f.lineprint(Pruefdaten)
	 
	f.Close


	Set f  = Nothing
	Set fs = Nothing
 
End If


End Sub

Dabei wird ein Ordner in einem Verzeichnis unseres Netzwerks erstellt mit dem heutigen Datum und in dieses Verzeichnis eine csv erstellt mit entsprechendem Header und Zeileninhalt.
 
OP
F

felixwhl

Member
Beiträge
12
Punkte Reaktionen
0
Habe meinen Fehler gefunden!

Ich war der Meinung, dass das Script kontinuierlich läuft und ich meine Protokollerstellung über den ersten If-Befehl starte.
Nun habe ich auf meinen "Protokoll-speichern" Button das Script gelegt und es funktioniert. :roll:

Bin halt noch Anfänger beim Scripten, habt bitte Nachsicht. :s17:
 
Oben