-> Hier kostenlos registrieren
Hallo,
Mit einem Skript in WinCC flexible schreibe ich Betriebsdaten aus der SPS in TXT-Dateien.
Diese TXT-Dateien werden zunächst lokal in ein Verzeichnis auf der SD-Karte des MP277 geschrieben.
Von dort werden sie auf einen Server, ebenfalls mit einem Skript, verschoben. Dies hat den Vorteil,
falls der Server einmal nicht verfügbar ist, werden die Betriebsdaten auf der SD-Karte gespoolt und
der Betrieb der Anlage kann ungestört weitergehen.
Folgendes Problem hat sich nun ergeben: Das Spoolen der Dateien funktioniert bis 999 Dateien im
Spool-Verzeichnis sind. Versucht man die 1000-ste Datei zu sichern erhält man eine Fehlermeldung
-2147024784 'There is not enough space on the disk...'.
Tatsächlich ist aber noch genügend Platz auf der SD-Karte. Von den 2GB Gesamtspeicher werden gerade mal
466 KB genutzt (eine Datei belegt 478 Byte). Ich habe es auch mit 32MB und 1GB-SD-Karten getestet.
Immer das gleiche Problem.
Im Explorer von Windows CE kann ich ohne Probleme mehr als 999 Dateien in das Spool-Verzeichnis kopieren.
Gibt es hier irgend welche Beschränkungen bzgl. Skripting in WinCC flex das man in ein Verzeichnis nicht
mehr als 999 Dateien schreiben kann?
Wie kann ich den eigentlich massenhaft vorhandenen Speicherplatz doch noch zum Spoolen nutzen?
Grüsse
Albert
Hier noch das relevante Skript:
Mit einem Skript in WinCC flexible schreibe ich Betriebsdaten aus der SPS in TXT-Dateien.
Diese TXT-Dateien werden zunächst lokal in ein Verzeichnis auf der SD-Karte des MP277 geschrieben.
Von dort werden sie auf einen Server, ebenfalls mit einem Skript, verschoben. Dies hat den Vorteil,
falls der Server einmal nicht verfügbar ist, werden die Betriebsdaten auf der SD-Karte gespoolt und
der Betrieb der Anlage kann ungestört weitergehen.
Folgendes Problem hat sich nun ergeben: Das Spoolen der Dateien funktioniert bis 999 Dateien im
Spool-Verzeichnis sind. Versucht man die 1000-ste Datei zu sichern erhält man eine Fehlermeldung
-2147024784 'There is not enough space on the disk...'.

Tatsächlich ist aber noch genügend Platz auf der SD-Karte. Von den 2GB Gesamtspeicher werden gerade mal
466 KB genutzt (eine Datei belegt 478 Byte). Ich habe es auch mit 32MB und 1GB-SD-Karten getestet.
Immer das gleiche Problem.
Im Explorer von Windows CE kann ich ohne Probleme mehr als 999 Dateien in das Spool-Verzeichnis kopieren.
Gibt es hier irgend welche Beschränkungen bzgl. Skripting in WinCC flex das man in ein Verzeichnis nicht
mehr als 999 Dateien schreiben kann?
Wie kann ich den eigentlich massenhaft vorhandenen Speicherplatz doch noch zum Spoolen nutzen?
Grüsse
Albert
Hier noch das relevante Skript:
Code:
##################################################################################################
' Script : 00_Make_BDE_File
' Version : 2012-04-02
'
' Aufgabe : BDE-Daten aus SPS lesen und als txt-Datei im Spoolverzeichnis ablegen
'
'##################################################################################################
' Konstanten
'##################################################################################################
Const conSchreiben = 2 ' Modus Dateizugriff
Const conPfad = "storage card mmc\spooler" ' Pfad zum Ablegen der Dateien
Const conAnzByte = 180 ' Anzahl Bytes, die aus DB zu lesen sind
'##################################################################################################
' Variablen
'##################################################################################################
Dim objFS ' Filesystem-Control
Dim objF ' File-Control
Dim strDateiname ' Dateiname
Dim strTemp ' Schmierstring
Dim i ' Laufvariable
Dim dtmAktTime ' Aktuelle Zeit
Dim strStationsID ' Stations-ID
Dim iStationsID ' Stations-ID (Integer)
'##################################################################################################
If SmartTags("OO_ModeasDat_bereit") Then
Set objFS = CreateObject("filectl.filesystem")
Set objF= CreateObject("filectl.file")
' Falls Spool-Verzeichnis nicht existiert -> erstellen
If objFS.Dir(conPfad) = "" Then
objFS.MkDir(conPfad)
End If
dtmAktTime = Now
If (dtmAktTime <> SmartTags("OO_Modeas_LastTime")) Then
SmartTags("OO_Modeas_DatIndex") = 1
Else
SmartTags("OO_Modeas_DatIndex") = SmartTags("OO_Modeas_DatIndex") + 1
End If
SmartTags("OO_Modeas_LastTime") = dtmAktTime
strStationsID = CStr(SmartTags("OO_Modeas_Daten")(2) * 256 + SmartTags("OO_Modeas_Daten")(3))
strStationsID = String(5 - Len(strStationsID), "0") & strStationsID
' Dateinamen (DatumZeitIndex_StationsID.txt) zusammenbauen
strDateiname = conPfad & "\" & _
Mid(dtmAktTime,7,4) & Mid(dtmAktTime,4,2) & Mid(dtmAktTime,1,2) & _
Mid(dtmAktTime,12,2) & Mid(dtmAktTime,15,2) & Mid(dtmAktTime,18,2) & _
"0000000" & SmartTags("OO_Modeas_DatIndex") & "_" & strStationsID & ".txt"
objF.open strDateiname, conSchreiben
strTemp=""
' Bytes aus DB einlesen und in String umwandeln, ';' als Trennzeichen zw. den Bytes
For i = 0 To conAnzByte - 1
strTemp = strTemp & SmartTags("OO_Modeas_Daten")(i) & ";"
Next
'- ShowSystemAlarm strDateiname
objF.LinePrint strTemp
objF.Close
End If
Set objF = Nothing
Set objFS = Nothing