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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Move *.* bzw. Dateien kopieren

  1. #1
    Registriert seit
    24.11.2007
    Beiträge
    39
    Danke
    9
    Erhielt 7 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Jungs!

    Hiermit möchte ich auch meinen bescheidenen Beitrag zum Forum bringen. Dies als Danke schön für all die Hilfe die ich schon bekommen habe und als Unterstützung für Die, die auch nicht sehr viel Zeit zum Entwickeln haben!


    Das folgende WinCC-Flex-Code ermöglicht ein Move von CSV-Dateien von einer MMC-Karte auf ein USB-Stick. Die CSV-Dateien sind Archivdateien (von einem MP277-Panel generiert), welche original als "Read only" deklariert sind. Es scheint mir deshalb ein wichtiger Punkt zu sein, weil ein "Read only" erst als "Normal" umgetauft werden muss um Ihn nach dem Kopierauftrag zu löschen (move).

    Der Löschauftrag ist in diesem Code nur auf .csv bezogen (fso.Kill ("\Storage Card MMC\*.csv")). Nun ist es auch mit *.* möglich jedoch kommt eine Fehlermeldung wenn auf dem MMC irgend ein Ordner bestehend ist. Bei mir habe ich immer ein "Simatic-Ordner" nach einem Download. Kommt mit Sicherheit vom Betriebssystem.
    Die Namensgebung dieser Archiven finde ich sehr lang. Ich kopiere immer vom "Root-MMC" auf das "Root-USB". Ist der Pathname zu lange, ist das Panel nicht erfreut!
    Offene Dateien haben es nicht gern wenn mann sie kitzelt!

    Ich hoffe das Progamm funktioniert bei Euch gleich problemlos wie bei mir!


    Benutzte Variablen in "normalen" WinnCC-Flex

    ---------------------------------------------------
    DataSaveText : Int-Variable steuert eine Textliste (siehe Kommentare)
    DataSourceFileName : Stringvariable (L90) um das Sourcefile am Panel einzublenden (wie Explorer: Kopieren Von x nach Y)
    DataDestFileName : Stringvariable (L90) um das Destinationfile am Panel einzublenden (wie Explorer: Kopieren Von x nach Y)
    ScriptIndex : Zeigt die Anzahl kopierter Dateien an (wie Explorer: 5 Datei(en) kopiert)

    Code:
     
    
      'Skript "CopyFile" / DI - 04.01.2011
    '===========================================
    
    Dim PathSearch, Path, fso, Result, Index, SourceFile, DestFile 
    
    Set PathSearch = CreateObject("FileCtl.FileSystem") 
    
    
    
        'USB-Stick suchen
    '----------------
    
        Path = "Storage Card USB"  
    
        SetValue SmartTags("DataSaveText"), 1                 'Text: Suche USB-Stick     
    
        For Index = 1 To 30000                                 'entspricht ca. 20 Sekunden     
            If  PathSearch.Dir("\" & Path) = ""_
            And Index >= 30000 Then
            SetValue SmartTags("DataSaveText"), 2             'Text: USB-Stick nicht gefunden!
    
            ElseIf PathSearch.Dir("\" & Path) = Path Then     'Gefunden!         
            SetValue SmartTags("DataSaveText"), 3            'Text: Datenübertragung gestartet
            Exit For
            End If
        Next
    
    'CSV-Daten suchen, Kopieren und Attribut auf Normal setzen     
    '---------------------------------------------------------    
    
        If SmartTags("DataSaveText")= 3 Then                'Datenübertragung gestartet 
            Set fso = CreateObject("FileCtl.FileSystem")
    
            Result = fso.Dir("\Storage Card MMC\*.csv")         
            If Result = "" Then
                                SmartTags("DataSaveText")= 4'Text:Keine Daten vorhanden
                            Else
                                SourceFile = "\Storage Card MMC\" & Result
                                DestFile   = "\Storage Card USB\" & Result
                                SmartTags("DataSourceFileName")= SourceFile
                                SmartTags("DataDestFileName")= DestFile
                                fso.FileCopy SourceFile,DestFile
                                fso.SetAttr  SourceFile, 0                        
                                For Index = 1 To 999
                                    Result = fso.Dir()    
                                    If Result = "" Then
                                        Exit For
                                    Else
                                        SourceFile = "\Storage Card MMC\" & Result
                                        DestFile   = "\Storage Card USB\" & Result
                                        SmartTags("DataSourceFileName")= SourceFile
                                        SmartTags("DataDestFileName")= DestFile
                                        fso.FileCopy SourceFile,DestFile
                                        fso.SetAttr  SourceFile, 0
                                    End If    
                                Next
                            SmartTags("DataSaveText")= 5    'Textdaten mit Erfolg übertragen
                            SetValue SmartTags("ScriptIndex"), Index                            
    
            End If                                 
        End If
    
    'Daten auf MMC löschen     
    '---------------------
    fso.Kill ("\Storage Card MMC\*.csv")
    
    'Init 
    '----
    Set PathSearch = Nothing
    Set fso = Nothing
    
    


    Geändert von Dino (07.01.2011 um 13:49 Uhr)
    Zitieren Zitieren Move *.* bzw. Dateien kopieren  

  2. Folgende 5 Benutzer sagen Danke zu Dino für den nützlichen Beitrag:

    Felse (09.01.2011),hausenm (07.01.2011),PN/DP (07.01.2011),rostiger Nagel (11.01.2011),Waldi1954 (15.01.2011)

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

    Standard

    ohne es getestet zu haben hielt ich es für wert dies in die faq zu kopieren.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  4. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    Dino (07.01.2011)

  5. #3
    Dino ist offline Benutzer
    Themenstarter
    Registriert seit
    24.11.2007
    Beiträge
    39
    Danke
    9
    Erhielt 7 Danke für 3 Beiträge

    Standard

    Hallo Harald

    Ich bin mit dem Händling von diesem Forum noch nicht so vertraut. Danke für den Typ [code]. Ich hatte die Funktion zwar gesucht und nicht gefunden.

    Gruss, Dino

  6. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Zitat Zitat von volker Beitrag anzeigen
    ohne es getestet zu haben hielt ich es für wert dies in die faq zu kopieren.
    Das ist tatsächlich ein schönes VBS-Beispiel mit Dateifunktionen unter WinCE zum darauf verweisen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #5
    Dino ist offline Benutzer
    Themenstarter
    Registriert seit
    24.11.2007
    Beiträge
    39
    Danke
    9
    Erhielt 7 Danke für 3 Beiträge

    Standard

    Hallo Jungs!

    Anbei noch eine Variante mit Namengebung des Destinationsfiles. Das oder die Dateien werden beim Kopiervorgang umbenannt in:
    "MeinString" & "Datum Zeit der Quelldatei".
    Achtung: diese Prozedur bedingt eine Änderung in den regionalen Settings (control panel). Leider habe ich keine bessere Lösung gefunden! Zwingend muss in "Time" das ":" gegen ein "." ausgewechselt werden. Nicht zwingend kann in "Date" das Format "JJJJ.MM.TT" gesetzt werden. Das letztere hat den Vorteil auf dem USB-Stick Ordnung zu schaffen. Es hat jedoch den Nachteil die Alarmliste auch in diesem ungewöhnlichen Format anzuzeigen.

    Im "normalen WinnCC-Flex" bitte folgende Variable deklarieren:
    DataMmcFilename: String (L32, kann auch anders sein)


    Code:
    'Skript "CopyRenameFile" / DI - 11.01.2011
    '===========================================
    
    Dim PathSearch, Path, fso, Result, Index, SourceFile, DestFile
    
    Set PathSearch = CreateObject("FileCtl.FileSystem")
    
    'USB-Stick suchen
    '----------------
    
        Path = "Storage Card USB" 
        
        SetValue SmartTags("DataSaveText"), 1                 'Text: Suche USB-Stick
    
        For Index = 1 To 30000                                 'entspricht ca. 20 Sekunden    
            If  PathSearch.Dir("\" & Path) = ""_
            And Index >= 30000 Then
            SetValue SmartTags("DataSaveText"), 2             'Text: USB-Stick nicht gefunden!
            
            ElseIf PathSearch.Dir("\" & Path) = Path Then     'Gefunden!
            SetValue SmartTags("DataSaveText"), 3            'Text: Datenübertragung gestartet
            Exit For
            End If
        Next
        
    'CSV-Daten suchen, mit neuem Namen kopieren und Attribut auf Normal setzen     
    '-------------------------------------------------------------------------        
    
        If SmartTags("DataSaveText")= 3 Then                'Datenübertragung gestartet
            Set fso = CreateObject("FileCtl.FileSystem")
                
            If  SmartTags("DataMmcFilename") = "" Then        'Leerer String als Dateiname
                SmartTags("DataMmcFilename")= "Archiv"        'ist unschön
            End If            
                    
            Result = fso.Dir("\Storage Card MMC\*.csv")        'Suchen nach ersten Dateiname
            If Result = "" Then
                                SmartTags("DataSaveText")= 4'Text:Keine Daten vorhanden
                            Else
                                SourceFile = "\Storage Card MMC\" & Result
                                DestFile   = "\Storage Card USB\" & SmartTags("DataMmcFilename")& "_" & fso.fileDateTime(SourceFile) & ".csv"
                                SmartTags("DataSourceFileName")= SourceFile
                                SmartTags("DataDestFileName")= DestFile
                                fso.FileCopy SourceFile,DestFile
                                fso.SetAttr  SourceFile, 0                        
                                For Index = 1 To 999
                                    Result = fso.Dir()        'Suchen nach weitere Dateinamen
                                    If Result = "" Then
                                        Exit For
                                    Else
                                        SourceFile = "\Storage Card MMC\" & Result
                                        DestFile   = "\Storage Card USB\" & SmartTags("DataMmcFilename")& "_" & fso.fileDateTime(SourceFile) & ".csv"
                                        SmartTags("DataSourceFileName")= SourceFile
                                        SmartTags("DataDestFileName")= DestFile
                                        fso.FileCopy SourceFile,DestFile
                                        fso.SetAttr  SourceFile, 0
                                    End If    
                                Next
                            SmartTags("DataSaveText")= 5    'Text:Daten mit Erfolg übertragen
                            SetValue SmartTags("ScriptIndex"), Index                            
                                    
            End If
        End If
        
    'Daten auf MMC löschen
    '---------------------
    fso.Kill ("\Storage Card MMC\*.csv")
    
    'Init
    '----
    Set PathSearch = Nothing
    Set fso = Nothing
    Ich wäre sehr froh wenn mich jemanden belehren könnte wie man einen WinCE-String mit WinCC-Flex ausseinander-schlachten und wieder zusammensetzen kann, zum Beispiel:
    2011.01.11 18:06:33 ändern in
    2011.01.11_18.06.33

    Schöner Gruss, Dino

  8. #6
    Registriert seit
    13.10.2007
    Beiträge
    12.065
    Danke
    2.794
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Du kannst String's mit den Befehlen 'LEFT'; 'MID' und 'RIGHT' zerlegen in
    Variabeln schieben und dann mit '&' wieder Zusammensetzen.
    Möchtest zb deinen Unterstrich hinzufügen, könnte da etwa so aussehen

    Code:
    VarNeuesDatum = VarDatum & "_" & VarUhrzeit
    Übrigens eine zeitfunktion in flexibel bekommst du so hin,
    da deine Schleife bestimmt Plattform abhängig ist.

    Code:
    'Timer 100 endspricht 1sec.
    Dim StartTime, StopTime, i
    StartTime = Now
    StopTime = StartTime + DelayTime / 24 / 360000
    Do
    Loop Until Now >= StopTime
    Geändert von rostiger Nagel (11.01.2011 um 19:12 Uhr) Grund: Zeitfunktion nachgereicht
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  9. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Dino (12.01.2011)

  10. #7
    Dino ist offline Benutzer
    Themenstarter
    Registriert seit
    24.11.2007
    Beiträge
    39
    Danke
    9
    Erhielt 7 Danke für 3 Beiträge

    Standard

    Hallo Helmut,

    Danke schön für die rasche Antwort. Kannst du mir bitte:
    - versichern, dass die Funktionen LEFT, RIGHT. MIDDLE auch mit Windows CE (auf einem MP277) funktionieren?
    - würdest du mir bitte ein kleines Beispiel des Zelegens vorzeigen? Das zusammensetzen ist mir klar. Ein Links auf eine FAQ oder so würde auch genügen.

    Übrigens thanks a lot for your example "Timer"

    Schöner Gruss, Dino

  11. #8
    Registriert seit
    13.10.2007
    Beiträge
    12.065
    Danke
    2.794
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Zitat Zitat von Dino Beitrag anzeigen
    Hallo Helmut,

    Danke schön für die rasche Antwort. Kannst du mir bitte:
    - versichern, dass die Funktionen LEFT, RIGHT. MIDDLE auch mit Windows CE (auf einem MP277) funktionieren?
    - würdest du mir bitte ein kleines Beispiel des Zelegens vorzeigen? Das zusammensetzen ist mir klar. Ein Links auf eine FAQ oder so würde auch genügen.

    Übrigens thanks a lot for your example "Timer"

    Schöner Gruss, Dino
    Neh versichern kann ich dir das nur wenn die Versicherungsprämie hoch
    genug ist. Ich hab das bisher nur auf PC Runtimes gemacht, aber denke das
    sollte gehen, da die Befehle ja nicht auf das file System zugreifen sonder auf
    einen String. Ich werde das morgen gerne mal testen und berichten.

    Gruss Helmut
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  12. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Zitat Zitat von Dino Beitrag anzeigen
    Kannst du mir bitte:
    - versichern, dass die Funktionen LEFT, RIGHT. MIDDLE auch mit Windows CE (auf einem MP277) funktionieren?
    - würdest du mir bitte ein kleines Beispiel des Zelegens vorzeigen? Das zusammensetzen ist mir klar. Ein Links auf eine FAQ oder so würde auch genügen.
    Die Left-, Right-, Mid-Funktionen funktionieren auf WinCE-Panels.

    In der WinCCflex-Hilfe gibt es eine VBS-Sprachreferenz mit Tutorium und Beispielen, da findet man die Left-, Right-, Mid- und andere Funktionen mit Beispielen beschrieben. Außer den speziellen WinCE-File-Funktionen funktionieren wahrscheinlich alle VBS-Funktionen auf WinCE-Panels, jedenfalls haben bei mir alle von mir bisher benutzten VBS-Funktionen auch auf WinCE-Panels funktioniert.
    Einfach im Script-Editor ein VBS-Schlüsselwort eintippen und F1 drücken
    und siehe WinCC flexible Information System > Arbeiten mit WinCC flexible > Referenz

    Jaja, Datum/Uhrzeit und regionale Settings sind schon ein nerviges Paar ...
    Deshalb erzeuge ich Zeit-Strings immer unabhängig von den regionalen Settings mit der DatePart-Funktion:
    Code:
    ' aus der Systemzeit einen String in der Form "31.12.2099 01:59:59" erzeugen
    Dim t, s
    t = Now ' Systemzeit
    s = Right("0" & DatePart("d", t), 2) & "." & Right("0" & DatePart("m", t), 2) & "." & DatePart("yyyy", t) & " " _
      & Right("0" & DatePart("h", t), 2) & ":" & Right("0" & DatePart("n", t), 2) & ":" & Right("0" & DatePart("s", t), 2)
    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)
    Dino, falls Du tatsächlich "2011.01.11_18.06.33" mit Punkten haben willst, dann bau Dir die Punkte in das letzte Beispiel ein.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Dino (12.01.2011),Jan (03.06.2013)

  14. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Übrigens ... eine Zeitfunktion realisiere ich ähnlich wie Helmut.
    Der folgende Code startet ein BAT-Programm (welches eine Befehlsausgabe in eine Textdatei schreibt) und wartet dann maximal 10 Sekunden auf das Erscheinen der Ausgabedatei:
    Code:
    ' 10 Sekunden = #00:00:10# = TimeSerial(0, 0, 10)
    Dim breaktime
    
    breaktime = Now + #00:00:10# 'max bis "Jetzt + 10 Sekunden" warten
    StartProgram "CMD.EXE", "/c \TEMP\gethostname.bat", hmiShowMinimized, hmiYes
    
    Do While Not FileExist("\TEMP\ipconfig.txt")
        If (Now > breaktime) Then Exit Do 'Zwangsausgang bei Überschreitung Wartezeit
    Loop 'auf Programmende warten
    (FileExist siehe VB-Script-FAQ und den Hinweis am Ende des Beitrags davor)

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Waldi1954 (15.01.2011)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 06.01.2011, 15:44
  2. Dateien auf CX kopieren?
    Von Mattin81 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 19.08.2010, 13:51
  3. Mehrere csv-Dateien kopieren
    Von Hausen im Forum HMI
    Antworten: 4
    Letzter Beitrag: 06.08.2010, 13:18
  4. bool Signal mit Move in DB kopieren.
    Von swisscrane im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 11.06.2008, 15:04
  5. Dateien sortiert kopieren
    Von volker im Forum Stammtisch
    Antworten: 8
    Letzter Beitrag: 23.10.2006, 21:18

Lesezeichen

Berechtigungen

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