Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: WinCC Flex 2007 : Meldearchiv mit VBScript

  1. #21
    Registriert seit
    10.06.2010
    Beiträge
    66
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> 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


    Zitat Zitat von PN/DP Beitrag anzeigen
    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.

    Zitat Zitat von PN/DP Beitrag anzeigen
    - 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
    Geändert von Hausen (19.10.2015 um 10:25 Uhr)

  2. #22
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    Zitat Zitat von Hausen Beitrag anzeigen
    Hallo Volker,

    was macht in dem Script die folgende Zeile? Also was da gemacht wird weiß ich, jedoch welchen Sinn die Abfrage hat verstehe ich nicht ganz.

    Code:
    pruf = int(left(zeile,10))
    Gruß Hausen
    damit wird geprüft ob die zeile mit einer zahl beginnt um z.b. solche zeilen zu ignorieren
    "$RT_COUNT$";405;;;;;;;;;;;;;;;
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  3. #23
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von Hausen Beitrag anzeigen
    Zitat Zitat von PN/DP Beitrag anzeigen
    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
    Würde mich freuen wenn Ihr mir da einen Tipp geben könntet
    Meine Kritik bezog sich darauf, daß Du bei jeder Verwendung der Uhrzeit erneut die Systemuhr abfragst, was dazu führen kann, daß spätere Abfragen eine andere Uhrzeit ermitteln als die erste Abfrage:
    Zitat Zitat von Hausen Beitrag anzeigen
    Code:
    ' Zeitstempel festlegen (0:00 bis 11:59Uhr = AM / 12:00 bis 23:59Uhr PM)
    If Hour(Now) = 12 Then
        'Um 12Uhr werden die Meldungen von 0:00 bis 11:59Uhr = AM gespeichert
        timeStamp = "AM"
    Else
        'Um 00Uhr werden die Meldungen von 12:00 bis 23:59Uhr = PM gespeichert
        timeStamp = "PM"
    End If
    
    
    ' Dateiname zusammensetzen -> Archiv_YYYY.MM.DD_xx.csv  (xx = AM/PM)
    If Mid(Date,3,1) = "/" Then
        ' Datum/Uhrzeit im Englischen Format    
        FileName = "Alarme_" & Right(Date,4) & "." & Left(Date,2) & "." & Mid(Date,4,2) & "_" & Right(Time,2) & ".csv"    
    Else
        ' Datum/Uhrzeit im Europäischem Format
        FileName = "Alarme_" & Right(Date,4) & "." & Mid(Date,4,2) & "." & Left(Date,2) & "_" & timeStamp & ".csv"
    End If
    Alle rot markierten Stellen fragen die Systemuhr ab. Besser ist es, zuerst die Uhrzeit von der Systemuhr in eine lokale Variable zu lesen und danach nur diese Variable zu verwenden.

    Wie man direkt aus einer Datum/Uhrzeit-Angabe die Datums-/Uhrzeitteile ermittelt (statt einen regional unterschiedlich formatierten String auszuwerten) --> klicke den Link --> der geht zu zwei Programmbeispielen mit der DatePart-Funktion, wo nur einmal die Systemuhr abgefragt wird und dann die lokale Variable ausgewertet wird. Falls der Link bei Dir nicht funktioniert, hier nochmal das Beispiel:
    Zitat Zitat von PN/DP Beitrag anzeigen
    Zeit-Strings immer unabhängig von den regionalen Settings mit der DatePart-Funktion:

    Datum_Uhrzeit-String für Dateinamen erzeugen:
    Code:
    ' aus der Systemzeit einen String in der Form "20991231_015959" erzeugen
    Dim t, s
    t = Now ' Systemzeit
    s = DatePart("yyyy", t) & Right("0" & DatePart("m", t), 2) & Right("0" & DatePart("d", t), 2) & "_" _
      & Right("0" & DatePart("h", t), 2) & Right("0" & DatePart("n", t), 2) & Right("0" & DatePart("s", t), 2)
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #24
    Registriert seit
    10.06.2010
    Beiträge
    66
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Harald,

    sorry, habe gerade erst gesehen das da in meinem Post ein Fehler drin war. Das mit der Systemzeit hatte ich schon verstanden und werde ich auch noch abändern.
    Aber nachdem ich den Script generell laufen habe. Denn diese Abfrage habe ich öfters in meinen Scripten verwendet und dann werde ich das an allen Stellen gleich abändern.
    Aber trotzdem Danke für Deine erneute Erläuterung.

    Das mit dem Tipp geben bezieht sich auf mein Problem das mein Script unter WinCe nicht funktioniert. Kannst Du da vielleicht nochmal drüber schauen?

    Gruß Hausen

  5. #25
    Registriert seit
    01.02.2008
    Beiträge
    93
    Danke
    9
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Sorry das ich so einen "Alten" Post nochmal hochhole aber ich habe eine ähnliche Problematik und wollte mal Wissen sie das zum Schluss "Ausgegangen" ist.
    ------------------------------------------------------------------------------------
    Ein Danke schadet niemanden spornt aber an


    Wer Rechtschreibfehler findet soll diese behalten....

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 06.01.2011, 15:44
  2. Antworten: 4
    Letzter Beitrag: 28.01.2010, 10:38
  3. Antworten: 14
    Letzter Beitrag: 31.01.2009, 16:36
  4. Antworten: 7
    Letzter Beitrag: 17.10.2007, 18:16
  5. Umlaufarchiv in WinCC Flex. mit VBScript
    Von rookie_2001 im Forum HMI
    Antworten: 7
    Letzter Beitrag: 19.10.2006, 12:43

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •