WinCC flexible, Dateien auf MP277 SD-Karte schreiben

adi

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> 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...'. :confused:

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
 
Vorschlag:

Mach doch Tageweise, oder in einem für dich sinnvollen Abstand neue Ordner, und verkleinere damit die Anzahl der Daten in einem Ordner! Oder lösche Werte, die bereits an den Server übermittelt worden sind.

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Marcel - danke für Deine Hinweise.

Die Dateien werden nach Übertragung zum Server schon gelöscht.

Daran, die Spooldateien auf mehrere Ordner zu verteilen, habe ich auch schon gedacht. Zugegeben, den Verwaltungsaufwand (zusätzliche Ordner anlegen,
zum Übertragen der Dateien ggf. mehrere Ordner absuchen und Dateien verschieben, Ordner wieder löschen,...) habe ich bisher gescheut.

Wird aber wohl darauf hinauslaufen ...

Albert
 
Zurück
Oben