-> Hier kostenlos registrieren
Hallo zusammen,
ich habe es nun soweit hinbekommen das es bei einer Runtime so funktioniert wie ich es mir vorstelle. Da unsere System aber z.B. auch auf einem MP377 laufen soll bzw. kann
habe ich mal versucht den Script dahin gehend zu erweitern. Aber ich bekomme es nicht hin das die Datei eingelesen wird. Es scheint mir als ob ich bei WinCe keinen Zugriff auf
die Kopie des Meldearchivs bekomme. Kann vielleicht jemand mal drüber schauen ob Ihr vielleicht was seht was ich falsch mache. Das ganze teste ich indem ich die Applikation
auf einem MP377 15" übertrage.
Zu den vorherigen Vorschlägen
Dahin gehend werde ich mein Projekt noch abändern. Da ich das in mehreren Scripten mache ist es etwas aufwendiger. Aber Danke für die Tipps, die kannte ich nicht.
Das habe ich mal ausprobiert. Wenn man das Archiv vorher nicht stoppt, wird das Archiv nicht kopiert und man bekommt eine Fehlermeldung das das System keine Berechtigung hat auf die Datei zuzugreifen.
Nun mein Script:
Würde mich freuen wenn Ihr mir da einen Tipp geben könntet
Gruß Hausen
ich habe es nun soweit hinbekommen das es bei einer Runtime so funktioniert wie ich es mir vorstelle. Da unsere System aber z.B. auch auf einem MP377 laufen soll bzw. kann
habe ich mal versucht den Script dahin gehend zu erweitern. Aber ich bekomme es nicht hin das die Datei eingelesen wird. Es scheint mir als ob ich bei WinCe keinen Zugriff auf
die Kopie des Meldearchivs bekomme. Kann vielleicht jemand mal drüber schauen ob Ihr vielleicht was seht was ich falsch mache. Das ganze teste ich indem ich die Applikation
auf einem MP377 15" übertrage.
Zu den vorherigen Vorschlägen
Was mir an Deinem Skript auffällt:
- wenn Date oder Time mehrfach im Skript verwendet wird, sollte man korrekterweise nur einmal die Systemzeit abfragen und in einer Variable zwischenspeichern
- Interpretation von Datums-/Uhrzeitteilen sollte man unabhängig von den regionalen Anzeigeeinstellungen mit der DatePart-Funktion vornehmen
Dahin gehend werde ich mein Projekt noch abändern. Da ich das in mehreren Scripten mache ist es etwas aufwendiger. Aber Danke für die Tipps, die kannte ich nicht.
- Ich meine, wenn man mit der Systemfunktion CopyLog (KopiereArchiv) ein Archiv kopiert, dann braucht man die Archivierung nicht stoppen - ich bin mir aber nicht sicher, zumindest würde ich mal ausprobieren, was mit Meldeereignissen während dem Kopieren passiert
Das habe ich mal ausprobiert. Wenn man das Archiv vorher nicht stoppt, wird das Archiv nicht kopiert und man bekommt eine Fehlermeldung das das System keine Berechtigung hat auf die Datei zuzugreifen.
Nun mein Script:
Code:
Dim f, fs, i, SourcePath, SourceFileName, DestinPath, DestinFileName, timeStamp, TextFileSource, TextFileDestin, Zeile, Zelle, Pruefung, Status, Datum, Uhrzeit, Meldenummer, Meldetext, Laenge, Meldeklasse, strDir
' Ausführen nur um 23:59Uhr und um 11:59Uhr
If Hour(Now) = 23 Or Hour(Now) = 11 Then
' Quelldatei festlegen
SourceFileName = "CopyErrors_0.csv"
' Ablagepfad festlegen
DestinPath = SmartTags("PDE\_Archiv_StoragePath")
' FileSystemObject erstellen
If SmartTags("SYS\_System_Runtime") Then
'Runtime
Set f = CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
Else
'WinCE
Set f= CreateObject("filectl.file")
Set fs = CreateObject("FileCtl.FileSystem")
End If
' Fehlerbehandlung
On Error Resume Next
If SmartTags("SYS\_System_Runtime") Then
'Runtime
' Quellpfad festlegen
SourcePath = "E:\Linie\AlarmFiles\"
If Not fs.FolderExists (DestinPath) Then 'Ablagepfad nicht vorhanden?
' -> erzeugen.
SYS_Create_StoragePath(DestinPath)
End If
If Not fs.FolderExists (DestinPath) Then 'Ablagepfad nicht vorhanden?
ShowSystemAlarm ("Meldearchiv: Speicherpfad nicht vorhanden / message archive: storage directory not available")
Exit Sub
Else
' Meldearchiv stoppen / stop message archive
ShowSystemAlarm "Meldearchiv stoppen / stop message archive"
StopLogging hmiAlarmLog, "Errors_"
' Warten / wait
SYS_Delay 2
' Meldearchiv kopieren / copy message archive
ShowSystemAlarm "Meldearchiv kopieren / copy message archive"
CopyLog hmiAlarmLog, "CopyErrors_", "Errors_", hmiOverwrite, hmiYes
' Warten / wait
SYS_Delay 2
' Meldearchiv starten / start message archive
ShowSystemAlarm "Meldearchiv starten / start message archive"
StartLogging hmiAlarmLog, "Errors_"
' Warten / wait
SYS_Delay 2
' Meldearchiv umformatieren und speichern / format and save message archive
ShowSystemAlarm "Meldearchiv umformatieren und speichern / format and save message archive"
Set TextFileSource = fs.OpenTextFile(SourcePath & SourceFileName, 1)
i=0
Do While TextFileSource.AtEndOfStream <> True
Zeile = TextFileSource.ReadLine
Zelle = Split(Zeile,";")
i = i + 1
If i > 1 Then
Pruefung = ""
Pruefung = Int(Left(Zeile,10))
If Pruefung <> "" Then
'Datum / date
If Len(Zelle(13)) = 21 Then ' Jahr 4-stellig / year 4 digits
Datum = Mid(Zelle(13),2,10)
Uhrzeit = Mid(Zelle(13),13,8)
End If
If Len(Zelle(13)) = 19 Then ' Jahr 2-stellig / year 2 digits
Datum = Mid(Zelle(13),2,8)
Uhrzeit = Mid(Zelle(13),11,8)
End If
' Status / status
If Zelle(2) = "1" Then Status = "K"
If Zelle(2) = "0" Then Status = "KG"
If Zelle(2) = "6" Then Status = "KGQ"
If Zelle(2) = "3" Then Status = "KQ"
If Zelle(2) = "2" Then Status = "KQG"
' Meldeklasse / status
If Zelle(3) = "1" Then Meldeklasse = "A" ' Fehler
If Zelle(3) = "2" Then Meldeklasse = "W" ' Warnung
If Zelle(3) = "3" Then Meldeklasse = "S" ' System
If Zelle(3) = "4" Then Meldeklasse = "D" ' Diagnosemeldung
' Meldenummer / message number
Meldenummer=Zelle(4)
' Meldetext / message text
Laenge = Len(Zelle(14))
Meldetext = Mid(Zelle(14),2,Laenge-2)
' Zeitstempel festlegen (0:00 bis 11:59Uhr = AM / 12:00 bis 23:59Uhr PM)
If Left(Uhrzeit,2) >= 0 And Left(Uhrzeit,2) < 12 Then
timeStamp = "AM"
Else
timeStamp = "PM"
End If
' Dateiname zusammensetzen -> Alarme_YYYY.MM.DD_xx.csv (xx = AM/PM)
If Mid(Datum,3,1) = "/" Then
' Datum/Uhrzeit im Englischen Format
DestinFileName = "Alarme_" & Right(Datum,4) & "." & Left(Datum,2) & "." & Mid(Datum,4,2) & "_" & Right(Uhrzeit,2) & ".csv"
Else
' Datum/Uhrzeit im Europäischem Format
DestinFileName = "Alarme_" & Right(Datum,4) & "." & Mid(Datum,4,2) & "." & Left(Datum,2) & "_" & timeStamp & ".csv"
End If
' Datei schon vorhanden / check if file exist
If fs.FileExists (DestinPath & DestinFileName) <> True Then
Set TextFileDestin = fs.CreateTextFile(DestinPath & DestinFileName, True)
TextFileDestin.WriteLine "Datum/date;Zeit/time;Status/status;Meldeklasse/message class;Meldenummer/message number;Meldetext/alarm message"
Else
Set TextFileDestin = fs.OpenTextFile(DestinPath & DestinFileName, 8)
End If
' Daten schreiben / write data
TextFileDestin.WriteLine Datum & ";" & Uhrzeit & ";" & Status & ";" & Meldeklasse & ";" & Meldenummer & ";" & Meldetext
TextFileDestin.Close
Else
Exit Sub
End If
End If
Loop
End If
Else
'WinCE
' Quellpfad festlegen
SourcePath = "\Storage Card MMC\AlarmFiles\"
strDir = fs.dir (DestinPath)
If strDir = "" Then 'Ablagepfad nicht vorhanden?
' -> erzeugen.
SYS_Create_StoragePath(DestinPath)
End If
' Prüfen ob der Speicherpfad vorhanden ist
strDir = fs.dir (DestinPath)
If strDir = "" Then 'Ablagepfad immer noch nicht vorhanden?
ShowSystemAlarm ("Meldearchiv: Speicherpfad nicht vorhanden / message archive: storage directory not available")
Exit Sub
Else
' Meldearchiv stoppen / stop message archive
ShowSystemAlarm "Meldearchiv stoppen / stop message archive"
StopLogging hmiAlarmLog, "Errors_"
' Warten / wait
SYS_Delay 2
' Meldearchiv kopieren / copy message archive
ShowSystemAlarm "Meldearchiv kopieren / copy message archive"
CopyLog hmiAlarmLog, "CopyErrors_", "Errors_", hmiOverwrite, hmiYes
' Warten / wait
SYS_Delay 2
' Meldearchiv starten / start message archive
ShowSystemAlarm "Meldearchiv starten / start message archive"
StartLogging hmiAlarmLog, "Errors_"
' Warten / wait
SYS_Delay 2
' Meldearchiv umformatieren und speichern / format and save message archive
ShowSystemAlarm "Meldearchiv umformatieren und speichern / format and save message archive"
' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
' Dateimodus 1 = lesen / 2 = schreiben / 8 = anhängen
Set TextFileSource = f.open(SourcePath & SourceFileName, 1)
i=0
Do While TextFileSource.EOF <> True
Zeile = TextFileSource.LineInputString
Zelle = Split(Zeile,";")
i = i + 1
If i > 1 Then
Pruefung = ""
Pruefung = Int(Left(Zeile,10))
If Pruefung <> "" Then
'Datum / date
If Len(Zelle(13)) = 21 Then ' Jahr 4-stellig / year 4 digits
Datum = Mid(Zelle(13),2,10)
Uhrzeit = Mid(Zelle(13),13,8)
End If
If Len(Zelle(13)) = 19 Then ' Jahr 2-stellig / year 2 digits
Datum = Mid(Zelle(13),2,8)
Uhrzeit = Mid(Zelle(13),11,8)
End If
' Status / status
If Zelle(2) = "1" Then Status = "K"
If Zelle(2) = "0" Then Status = "KG"
If Zelle(2) = "6" Then Status = "KGQ"
If Zelle(2) = "3" Then Status = "KQ"
If Zelle(2) = "2" Then Status = "KQG"
' Meldeklasse / status
If Zelle(3) = "1" Then Meldeklasse = "A" ' Fehler
If Zelle(3) = "2" Then Meldeklasse = "W" ' Warnung
If Zelle(3) = "3" Then Meldeklasse = "S" ' System
If Zelle(3) = "4" Then Meldeklasse = "D" ' Diagnosemeldung
' Meldenummer / message number
Meldenummer=Zelle(4)
' Meldetext / message text
Laenge = Len(Zelle(14))
Meldetext = Mid(Zelle(14),2,Laenge-2)
' Zeitstempel festlegen (0:00 bis 11:59Uhr = AM / 12:00 bis 23:59Uhr PM)
If Left(Uhrzeit,2) >= 0 And Left(Uhrzeit,2) < 12 Then
timeStamp = "AM"
Else
timeStamp = "PM"
End If
' Dateiname zusammensetzen -> Alarme_YYYY.MM.DD_xx.csv (xx = AM/PM)
If Mid(Datum,3,1) = "/" Then
' Datum/Uhrzeit im Englischen Format
DestinFileName = "Alarme_" & Right(Datum,4) & "." & Left(Datum,2) & "." & Mid(Datum,4,2) & "_" & Right(Uhrzeit,2) & ".csv"
Else
' Datum/Uhrzeit im Europäischem Format
DestinFileName = "Alarme_" & Right(Datum,4) & "." & Mid(Datum,4,2) & "." & Left(Datum,2) & "_" & timeStamp & ".csv"
End If
' Datei schon vorhanden / check if file exist
If f.FileExists (DestinPath & DestinFileName) <> True Then
Set TextFileDestin = f.open(DestinPath & DestinFileName, 2)
TextFileDestin.linePrint "Datum/date;Zeit/time;Status/status;Meldeklasse/message class;Meldenummer/message number;Meldetext/alarm message"
Else
Set TextFileDestin = f.open(DestinPath & DestinFileName, 8)
End If
' Daten schreiben / write data
TextFileDestin.LinePrint Datum & ";" & Uhrzeit & ";" & Status & ";" & Meldeklasse & ";" & Meldenummer & ";" & Meldetext
TextFileDestin.Close
Else
Exit Sub
End If
End If
Loop
End If
End If
'
TextFileSource.Close
' Fehlerbehandlung
If Err.Number <> 0 Then
' Kopierauftrag mit Fehlern beendet/abgebrochen
ShowSystemAlarm "Fehler/fault: " & Err.Description
Err.Clear
Exit Sub
Else
' Kopierauftrag ohne Fehler durchgeführt
ShowSystemAlarm "Meldearchiv kopieren abgeschlossen / copying message archive completed"
End If
' Verwendeten Speicher wieder freigeben
Set fs = Nothing
Set f = Nothing
End If
Würde mich freuen wenn Ihr mir da einen Tipp geben könntet
Gruß Hausen
Zuletzt bearbeitet: