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

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 44

Thema: Archivierung per skript

  1. #31
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Wie kann ich dafür sorgen, dass mein String 1:1 in die csv-Datei eingetragen wird?
    Strings in doppelte Hochkomma " CHR(34) setzen:
    Code:
    ' Write values of variables in archive file (VAR1)
     f.lineprint(CStr(Now) & ";" & Chr(34) & SmartTags("PAL_ID") & Chr(34) & ";" & CStr(SmartTags("Hoehe")))
    Statt CStr(Now) würde ich den Zeitstempel unabhängig von den regionalen Einstellungen des Panels/Computers selber formatieren --> "31.12.2008 01:59:59"
    Code:
    ' Write values of variables in archive file (VAR1)
     ts = Now
    
     sts = Chr(34)& Right("0" & DatePart("d", ts), 2) & "." & Right("0" & DatePart("m", ts), 2) & "." & DatePart("yyyy", ts) & " " _
                  & Right("0" & DatePart("h", ts), 2) & ":" & Right("0" & DatePart("n", ts), 2) & ":" & Right("0" & DatePart("s", ts), 2) &Chr(34)
    
     f.lineprint(sts & ";" & Chr(34) & SmartTags("PAL_ID") & Chr(34) & ";" & CStr(SmartTags("Hoehe")))
    Schau Dir auch mal diesen Thread an: Prozessdaten einer CPU 317 auf Speicherkarte eines TP277 6'' speichern

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Onkel Dagobert (15.10.2013),Tigerente1974 (16.10.2013)

  3. #32
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Die Datei habe ich mit Excel geöffnet. Werde das mit dem Texteditor auch mal probieren.

    Danke für den Tip mit den Anführungszeichen.
    Über Probleme mit dem Zeitstempel hatte ich schon mal was gelesen. Da ging es glaube ich um Probleme, wenn der Zeitstempel in den Namen der Datei eingetragen werden soll. Welchen Nachteil gibt es noch?
    Werde aber auch den Tip mit dem Zeitstempel noch umsetzen.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  4. #33
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Hauptproblem bei der Datum/Uhrzeit-Formatierung ist, daß diese bei VBS abhängig von den regionalen Einstellungen im Control Panel (Systemsteuerung) des Erstellsystems ist. Hat das Zielsystem andere Einstellungen, dann gibt es Probleme beim Interpretieren des Zeitstempels.

    Datum/Uhrzeit für Dateinamen: die "automatische" Formatierung enthält je nach Einstellung ":" und "/" und diese Zeichen sind in Dateinamen nicht erlaubt.

    Es ist also immer besser, die Datumsformatierung (passend zum Zielsystem) selber vorzunehmen.

    Ein weiterer Stolperstein ist die Einstellung des Dezimalpunkts bei Gleitkommazahlen - dazu gibt es einen FAQ von JesperMP.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #34
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Hallo Harald.

    Danke für Deine Hilfe.
    Ich habe beides umgesetzt.
    Es funktioniert auch wie es soll. Allerdings ignoriert excel auch die "..." und macht eine gerundete Zahl daraus.
    Mit dem Editor geöffnet sieht man, dass in beiden Fällen korrekt archiviert wurde. Einmal mit den Gänsefüßchen, einmal ohne.
    Ich lasse die Gänsefüßchen jetzt nochmal weg und bespreche mit dem IT-ler, ob er die Daten korrekt auslesen kann.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  6. #35
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard

    Wenn du in Excel die Datei nicht öffnest sondern importierst kannst du glaube ich auch das Format angeben den der Wert darstellt. So solltest du das ev. Hingekommen. ...

    Gesendet von meinem GT-N7100 mit Tapatalk 2

  7. #36
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Der IT-Mensch kommt mit den Daten zurecht. Ich lass das jetzt so.
    Danke an alle für die Hilfen...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  8. #37
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Hallo Forum.

    Ich grabe diesen thread nun noch einmal aus, weil es jetzt ein neues Problem gibt, für das ich noch keine Lösung gefunden habe.
    Ich versuche das erstmal so gut wie möglich zu beschreiben. Vor gut einem Monat habe ich die Anlage erweitert. Es gibt nun eine 2. Stelle an der Daten archiviert werden sollen.
    Die Skripte sind dazu nicht verändert worden. Es ist alles noch so wie vorher.
    Um zu verhindern, dass ein Skript angestoßen wird, während die Skriptbearbeitung läuft habe ich mir ein Sperrbit gesetzt.
    Grundsätzlich liegt zwischen den Archivierungen aber ein Zeitraum von mindestens 30s, bedingt durch den Ablauf an der Anlage.
    Trotzdem hier die Frage: Angenommen der Code funktioniert nicht wie von mir gedacht, kann so etwas zu dem beschriebenen Verhalten führen?

    Das hat bisher fehlerfrei geklappt.
    Nun zu meinem Problem:
    Ich kann nicht sicher sagen, ob der Auslöser dafür auf der Seite des Kundenservers oder bei mir liegt.
    Angefangen hat es damit, dass der Kunde sich gemeldet hat, weil das HMI aus der Bedienoberfläche in die WinCE Oberfläche gesprungen ist.
    Dort wurde das Fenster "Transfer" eingeblendet. In dem Fenster stand "Connecting to host". Nach einem Neustart (24V getrennt) fuhr das HMI wieder hoch, sprang aber nach kurzer Zeit von selbst wieder zu der gleichen Anzeige.
    Ich habe das HMI per Fernwartung neu übertragen. Das Ergebnis blieb gleich.
    Weiter erhielt ich die Info, dass die Archivierung auf dem Kundenserver seit über einem Tag nicht mehr funktioniert hat.

    Da der Kunde ein Ersatzgerät zur Verfügung hatte, haben wir das ausgetauscht.
    Zunächst hat die Anmeldung am Server nicht geklappt, weil das Passwort für die Anmeldung mal geändert wurde und das nicht gut dokumentiert wurde.
    Das HMI hat dann jedes mal den Anmeldedialog zur Passworteingabe gebracht, wenn archiviert werden sollte.
    So hat das dann etwa 2 Stunden ohne Archivierung gelaufen, bis das HMI genau wie das erste von allein in die WinCE-Oberfläche gesprungen ist und auf Transfer gewartet hat.
    Wir haben dann den Netzwerkstecker zum Kundenserver gezogen. So läuft das wieder fehlerfrei, aber ohne Archivierung auf dem Kundenserver.

    Der IT-Mitarbeiter des Kunden hat nun weiter nach der Ursache geforscht. Mittlerweile klappt die Anmeldung mit dem richtigen Passwort wieder.
    Der Ablauf im sub-Skript "Datei kopieren" läuft bis Schritt 100. Dort wird die csv-Datei auf dem Kundenserver geöffnet.
    Dann steigt das HMI aus. Was der Kunde mit dieser Beschreibung meint, muss ich noch einmal nachfragen.

    Info des Mitarbeiters:
    - Ich kann vom Panel aus in diesem Ordner Dateien anlegen, umbenennen und löschen (Schreibzugriff vorhanden).
    - Ich kann vom Panel aus nicht testen, ob ich auch in den Dateien selbst Änderungen machen kann, da ich sie nicht öffnen kann (Fehlermeldung: Keine geeignete Applikation zum öffnen der Datei gefunden)
    - Ich habe mich an meinem Rechner angemeldet und konnte die Dateien auf dem Serverordner öffnen, ändern, speichern (mit Editor geöffnet)

    Hat jemand eine Idee?
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  9. #38
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Hier nochmal der Code:

    Code:
    Sub Datei_kopieren()
    'Sub Datei_kopieren
    Dim PathSearch, Path, Index, Result, fso, SourceFile, DestFile, f, fs, Header, StartTime, StopTime, DelayTime, i, Laenge, fileContent
    Set PathSearch = CreateObject("FileCtl.FileSystem")
    'USB-Stick suchen
    '--------------------
    Path = "Storage Card USB" 
        
    SmartTags("Archivierung\Status_kopieren") = 10                'Text: Suche USB-Stick
        
    If  PathSearch.Dir("\" & Path) = "" Then
     SmartTags("Archivierung\Status_kopieren") = 20            'Text: USB-Stick nicht gefunden!
        ElseIf PathSearch.Dir("\" & Path) = Path Then     
        SmartTags("Archivierung\Status_kopieren") = 30            'Text: Suche Zielordner
    End If
    '30: Ziellaufwerk suchen
    '-----------------------
    If SmartTags("Archivierung\Status_kopieren") = 30 Then
     Path = "\\DETET1AS0007\transfer$"
     'Path = "\\TGVM239\transfer$"
     'Path = "\\LAPTOP_CHRIS_WO\Logs"
     
     StartTime = Now
     DelayTime = 500  'Timer 100 endspricht 1sec.
     StopTime = StartTime + DelayTime / 24 / 360000
     Do                        
         Result = Ziel_pruefen (Path)
         If  Result = "transfer$" Then
         'If Result = "Logs" Then
          SmartTags("Archivierung\Status_kopieren") = 50      'Text: Schreibfreigabe prüfen
          Exit Do
         ElseIf Now >= StopTime Then    
             SmartTags("Archivierung\Status_kopieren") = 40      'Text: Zielordner nicht gefunden
      End If
     Loop Until Now >= StopTime
    End If 
    
    '50: Schreibfreigabe prüfen
    '--------------------------
    ' Die Datei "NVE.ok" muss im Zielordner vorhanden sein.
    If SmartTags("Archivierung\Status_kopieren") = 50 Then
     Path = "\\DETET1AS0007\transfer$\NVE.ok"
     'Path = "\\TGVM239\transfer$\NVE.ok"  
     'Path = "\\LAPTOP_CHRIS_WO\Logs\NVE.ok"                  
        Result = Ziel_pruefen (Path)
        If  Result = "NVE.ok" Then
         SmartTags("Archivierung\Status_kopieren") = 70          'Text: Zieldatei suchen
        Else  
            SmartTags("Archivierung\Status_kopieren") = 60          'Text: keine Schreibfreigabe
     End If
    End If 
    '70: Zieldatei prüfen
    '---------------------
    If SmartTags("Archivierung\Status_kopieren") = 70 Then
     
     Set f = CreateObject("FileCtl.File")
     Set fs = CreateObject("FileCtl.FileSystem")
     
     Path = "\\DETET1AS0007\transfer$\NVE.csv"
     'Path = "\\TGVM239\transfer$\NVE.csv"
     'Path = "\\LAPTOP_CHRIS_WO\Logs\NVE.csv"
     'Prüfen ob Ablagepfad vorhanden, wenn nicht -> erzeugen.
     Ordnerpfad_anlegen Path ' Übergabe des Ablagepfades aus dem Script "Script_Storage_Path" / Handing over of the storage path from the script "Script_Storage_Path"
     
     ' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
     f.open Path, 8         
     ' Tabellenkopf zusammenstellen (Anmerkung: Kunde wünscht keinen Header -> ausgeklammert)
     'Header = "Zeitstempel;Barcode;Hoehe" &  Chr(10)
     
     ' Wenn Datei 0 Byte groß, dann ist sie neu
     'If fs.FileLen(Path) = 0 Then       
        ' f.lineprint(Header)
     '=0 => Tabellenkopf muss eingefügt werden
      'End If 
      ' Datei wieder schließen
      f.Close
      
     Result = Ziel_pruefen (Path)
        If  Result = "NVE.csv" Then
         SmartTags("Archivierung\Status_kopieren") = 90            'Text: Quelldatei einlesen
        Else    
            SmartTags("Archivierung\Status_kopieren") = 80            'Text: Zieldatei nicht gefunden
     End If
    End If 
    '90: Datei suchen und auslesen
    '-----------------------------
    If SmartTags("Archivierung\Status_kopieren") = 90 Then
     
     Set fso = CreateObject("FileCtl.FileSystem")
     
     SmartTags("Archivierung\Name") = "PAL_ID.csv" ' fso.Dir("\Storage Card USB\*.csv")        'Suchen nach ersten Dateiname auf Stick
     f.open("\Storage Card USB\" & SmartTags("Archivierung\Name")),1,1
     Do
      If f.EOF = True Then Exit Do
      fileContent = fileContent & f.LineInputString & vbCrLf
     Loop
     'Leerzeile am Ende löschen
     Laenge = Len (fileContent)
     fileContent = Left(fileContent,(Laenge-2))
     ' Datei wieder schließen
      f.Close
      SmartTags("Archivierung\Status_kopieren") = 100    'Text: Quelldaten übertragen
    End If 
    
    '100: Einträge im Appendmodus anhängen
    '-------------------------------------
    If SmartTags("Archivierung\Status_kopieren") = 100 Then
     
     ' FileObject erstellen
     Set f = CreateObject("FileCtl.File")
     
     ' Datei öffnen im Append-Modus
     f.open "\\DETET1AS0007\transfer$\NVE.csv", 8 
     'f.open "\\TGVM239\transfer$\NVE.csv", 8 
     'f.open "\\LAPTOP_CHRIS_WO\Logs\NVE.csv", 8
     ' Einträge anhängen
     f.lineprint fileContent
     ' Datei wieder schließen
     f.Close 
     SmartTags("Archivierung\Status_kopieren") = 110   'Text: Quelldatei löschen
    End If
     
    '110: Quelldatei löschen
    '-----------------------
    If SmartTags("Archivierung\Status_kopieren") = 110 Then
      fs.Kill ("\Storage Card USB\" & SmartTags("Archivierung\Name"))
      SmartTags("Archivierung\Status_kopieren") = 200
    End If
    ' Verwendeten Speicher wieder freigeben
    Set f  = Nothing
    Set fs = Nothing
    Set fso = Nothing
    Set PathSearch = Nothing
    End Sub
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  10. #39
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Der Transfer-Dialog erscheint? - Die WinCC Runtime ist abgestürzt und meint offenbar, es sei keine gültige Runtime-Projektierung vorhanden. (Es scheint, als ob die Datei PDATA.FWX beschädigt ist oder ein anderes Problem mit dem Filesystem besteht.)

    Schritt 100:
    Du prüfst nicht, ob das Öffnen der Server-Datei für Append erfolgreich war.
    Du prüfst nicht, ob das Anhängen/Schreiben an die Server-Datei erfolgreich war.
    Du prüfst nicht, ob da Runtime-Errors aufgetreten sind.
    Ich vermute, daß das Skript da durch einen Runtime-Error unsanft abgebrochen wird. Hast Du eine Meldeanzeige für Meldeereignisse in der Runtime drin, welche auch Meldungen der Meldeklasse "System" anzeigt? Darin sollte man Meldungen bezüglich Deines Skript-Problems finden.

    Du solltest in dem Skript mit "On Error Resume Next" das Abbrechen des Skriptes verhindern und direkt nach den File-Operationen den Runtime-Error-Status auswerten:
    Code:
    Dim fs, f, ...
    Const ForAppending = 8
    On Error Resume Next
    ...
    
    ' FileSystemObject erstellen
    Set fs = CreateObject("FileCtl.FileSystem")
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    ' FileObject erstellen
    Set f = CreateObject("FileCtl.File")
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    ...
    
    '100: Einträge im Appendmodus anhängen
    '-------------------------------------
    If SmartTags("Archivierung\Status_kopieren") = 100 Then
    
      ' Datei öffnen im Append-Modus
      f.open "\\DETET1AS0007\transfer$\NVE.csv", ForAppending
      If Err.Number <> 0 Then
        ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
        Err.Clear
        Exit Sub
      End If
    
      ' Einträge anhängen
      f.lineprint fileContent
      If Err.Number <> 0 Then
        ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
        Err.Clear
        f.Close
        Exit Sub
      End If
    
      ' Datei wieder schließen
      f.Close
      SmartTags("Archivierung\Status_kopieren") = 110   'Text: Quelldatei löschen
    End If
    Für mein Gefühl erstellst Du unnötigerweise zu viele File-/Filesystem-Objekte. Im Schritt 100 benutzt Du eine bereits benutzte Objektverweis-Variable (f) für die Erstellung eines neuen File-Objektes ohne das vorhandene File-Objekt freizugeben - dadurch geht der Verweis zum vorherigen Objekt verloren. Möglicherweise geht durch die zu vielen Objekte und die Runtime-Errors der Arbeitsspeicher zur Neige und die WinCC Runtime stürzt deshalb ab?
    Ich würde vorschlagen, Du erstellst am Anfang des Skriptes je ein File-Objekt und FileSystem-Objekt und benutzt dann nur noch diese beiden Objekte.


    Der Schritt 90 ist nicht gut gelöst - wozu eine komplette Datei in den Arbeitsspeicher einlesen?
    Wie groß ist die Datei "\Storage Card USB\PAL_ID.csv"? - eventuell zu groß oder leer?
    Kann es vorkommen, daß die Datei leer ist? Ich weiß nicht, was VBS macht, wenn man "fileContent = Left(fileContent,(Laenge-2))" mit einer resultierenden negativen Länge aufruft.
    Wozu ungeprüft generell die letzten 2 Zeichen aus der Datei entfernen? Wo kommt die leere Zeile her?

    Ich würde anstatt Schritt 90 im Schritt 100 die Datei vom Panel zeilenweise in die Datei auf dem Server kopieren (beide Dateien öffnen, in einer Schleife bis EOF von Quelldatei eine Zeile einlesen, wenn Länge > 0 dann die Zeile in die Zieldatei schreiben).


    Ob das Panel alle erforderlichen Rechte auf dem Server hat kannst Du mit dem "Command Prompt" (Pocket CMD) des Panels ausprobieren, da bekommst Du eventuelle Fehlermeldungen auch gleich angezeigt. Etwa so:
    Code:
     Pocket CMD
    \> echo blablabla > \temp\test.txt
    \> copy \temp\test.txt \\DETET1AS0007\transfer$\test.csv
    \> echo append123 >> \\DETET1AS0007\transfer$\test.csv
    \> type \\DETET1AS0007\transfer$\test.csv
    blablabla
    append123
    \>
    Danach sollte auf dem Server die Datei test.csv den Inhalt
    blablabla
    append123
    haben.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Tigerente1974 (19.06.2017)

  12. #40
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Du solltest in dem Skript mit "On Error Resume Next" das Abbrechen des Skriptes verhindern und direkt nach den File-Operationen den Runtime-Error-Status auswerten:
    Code:
    ...
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    ...
    Der Aufwand macht natürlich nur Sinn, wenn Du in dem Skript auf den Fehler reagieren kannst/willst (z.B. einen Vorgang erneut versuchen oder etwas anderes versuchen). Wenn da nur eine Fehlermeldung ausgegeben und das Skript beendet werden soll, dann kannst Du das "On Error Resume Next" weglassen - das macht VBS sowieso automatisch so.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Archivierung / Reorganisation
    Von Manfred Stangl im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.08.2008, 22:49
  2. Azyklische Archivierung in WinCC V4.0
    Von Anfängerproggi im Forum HMI
    Antworten: 0
    Letzter Beitrag: 11.10.2007, 09:22
  3. Archivierung eines S7 Programms
    Von 1schilcher im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.03.2007, 08:15
  4. Tag Logging + Archivierung
    Von mrdanger im Forum HMI
    Antworten: 1
    Letzter Beitrag: 29.01.2007, 10:47
  5. ProTool; Archivierung in Access
    Von DiplomandSPS im Forum HMI
    Antworten: 5
    Letzter Beitrag: 13.05.2004, 14:25

Lesezeichen

Berechtigungen

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