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

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

Thema: Wincc Flex Datei erstellen und schreiben

  1. #1
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    194
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich würde gerne mit meinem TP eine Datei erstelln (CSV oder TXT) die als Name das Datum haben soll und entsprechend täglich neu erzeugt wird, dabei soll natürlich die Datei vom Tag zuvor nicht gelöscht werden.

    In der Datei selber soll dann mehrmals täglich zeilenweise etwas geschrieben und beigefügt werden.
    D.h.

    Dateiname: 13.09.2015.txt

    1.Zeile WERT; Uhrzeit
    2.Zeile WERT; Uhrzeit
    ...
    ..
    .
    usw.

    Das ganze soll dann auf eine Festplatte die an dem HMI über USB verbunden ist abgespeichert werden.

    Ich hab nur eine ganz magere Ahnung was ich zu tun habe, wobei mir dazu noch das wissen fehlt wie ich das ganze Programmieren soll.

    Grob meine ich es folgendeweise machen zu müssen:

    1. Datei erstellen und abfragen ob diese existiert wenn nicht erstelle diese mit dem neuen Datum. Wenn die Datei existiert öffne diese..
    2. Datei öffnen Wert und datum in die neue Zeile schreiben
    3. Datei schliessen.

    Ich hab bisher nur sehr wenig mit VB programmiert, deswegen würde ich mich über jede Hilfe freuen.Und ich sehe dass es auch noch unterschiede gibt wenn man mit CE arbeitet

    Das ist mein erster Ansatz derzeit unter Windows

    Code:
    
    Dim fso, Datei, f
    
    Datei abfragen und erstellen:
      
    Datei=“D:\Daten.txt"                                                    //wie kann ich meine txt mit dem heutigen Datum benennen
     
    Set fso = Createobject ("scripting.FileSystemObject")     //FileSystem bedeutet, dass die Datei lokal abgespeicher wird?!
     
    If fso.fileExists.(Datei) then
    Fso.createtextfile (Datei)                                             //Wenn die Datei mit dem aktuellt Date nicht exisitiert erstelle diese
    End if
     
     
    Schreiben:
     
    set f=fso.getfile(datei)
    set ts=f.openastextstream (8,-2) 
    
    ts.writeline ("Datum; " &date &";" &smarttags("Wert") &";")
    ts.close
    Geändert von Junge (13.09.2015 um 14:22 Uhr)
    Zitieren Zitieren Wincc Flex Datei erstellen und schreiben  

  2. #2
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    Zitat Zitat von Junge Beitrag anzeigen
    Wie kann ich eigtl. einen Wert aus dem HMI einer Variable hier "WERT" zuweisen? einfach so?!: db100.dbd10= wert
    Hatte hier mal sämtliche Möglichkeiten für den HMI-Variablen-Zugriff innerhalb von Flex-Skripten gepostet.
    http://www.sps-forum.de/hmi/77312-wi...tml#post543437

    Zum Thema "Dateien schreiben mit Vbs" empfehle ich als Start das zugehörige FAQ
    http://www.sps-forum.de/faq/15348-pr...vb-script.html

    Es gibt auch noch viele andere Beiträge zu dem Thema hier, auch über die Ablage mittels Netzwerkpfad.
    Einfach mal die Forensuche anstarten.

    Zitat Zitat von Junge Beitrag anzeigen
    Code:
    Datei=“D:\“now.date.txt“                                                    //kann ich so meine txt mit dem heutigen Datum benennen
     
    Set fs = Createobject (Datei.FileSystem)                             //FileSystem bedeutet, dass die Datei lokal abgespeicher wird?!
     
    If fs.dir fileExists.(Datei) =now.date"txt" then
    Der Zusammenbau deines Dateinamen wird so kaum hinhauen. Strings fügt man in VBS mit "&" zusammen, die Datentypen
    muss man logischerweise auch von DateTime, Date auf String konvertieren.
    Auch der der fileExist Aufruf passt so nicht. Müsste mindestens...
    Code:
    Dim fso,fs,datum,zeit,datei,textfile1
    
    Datei=“D:\“ & CStr(Now) & "." & CStr(Date) & ".txt“
    If Not fso.FileExists (datei) Then
    Set TextFile1 = fso.CreateTextFile(datei, true)
    'usw... Siehe FAQ
    ...heißen.

    Hier noch ein schönes Beispiel von PN/DP wie man einen Datum-String ganz besonders gut als Dateinamen formatieren kann.
    Uhrzeit und Datum in Char Variable speichern
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  3. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Junge (13.09.2015)

  4. #3
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    194
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Also mit

    Code:
    ..
    ..
    Datum = Date
    Datei= "D:\" &(Datum) & ".txt"
    ..
    ..

    Kann ich mir eine Datei erstellen die das als Name das Aktuelle Datum hat jippi.
    Und der Rest hat auch funktioniert, also Werte in die Textdatei schreiben und weitere Werte unten dran hängen.

    Jetzt bleiben für mich nur noch die Fragen:

    -( ich möchte ja gern eine Festplatte mit USB an das HMI stecken)
    Woher weiss ich den Pfad?

    und

    -wie ist jetzt der richtige Quelltext für Windows CE!! so wie ich das hier lesen kann unterscheiden die sich ja.


    Für Leute mit ähnliche Probleme hier nochmal der ganze Quellcode mit WinccFlex Simuliert noch nicht aufn HMI getestet: D.H. mit Windows 7 funktioniert es mit Windows CE k.a.

    Code:
    Dim fso, Datei, f, ts, Datum
    
    Datum= Date
    Datei= "D:\" &(Datum) & ".txt"
    
    set fso CreateObject("Scripting.FileSystemObject")
    
    If Not fso.FileExists(Datei) Then
    fso.CreateTextFile Datei
    End If
    
    Set f=fso.GetFile(Datei)
    
    Set ts=f.OpenAsTextStream(8,-2)
    ts.WriteLine("Datum;"&Date&";"&"Uhrzeit";"&Time"&Smarttags("Wert")&";")
    ts.Close
    
    Set ts=Nothing
    Set f=Nothing
    Set fso=Nothing
    Geändert von Junge (13.09.2015 um 16:22 Uhr)

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von Junge Beitrag anzeigen
    Dateiname: 13.09.2015.txt
    Ich würde keine Punkte oder sonstige Trennzeichen zwischen die Datumsteile setzen und das Datum umgekehrt angegeben, also YYYYMMDD --> 20150913.txt, dann werden Dateinamen in Listen sinnvoller sortiert angezeigt.

    Zitat Zitat von PN/DP Beitrag anzeigen
    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)
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    194
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Das ist auf jeden Fall ein guter Einwand!

    ...aber könnte mir bitte einer noch dabei helfen/Tipp geben das ganze für Windows CE kompatibel zu machen?! Und dann noch die Frage mit dem Festplattenpfad ...

    Code:
    DIM Datum, f
    
    Datum=date
    Datei="\Storage Card2\"&(Datum)&".txt"
    
    set f=createobject ("fileCtl.File")
    
    if not f.dir("datei")then
    f.mkdir("datei")
    end if
    
    f.open Datei, 8
    f.lineprint("Datum; "&Date&"; "&"Uhrzeit"&Time";"&SmartTags("Wert")&";")
    f.close
    set f=nothing

    auspobieren kann ich das zwar jetzt nicht, weil ich kein Panel hier hab, aber so sollte es dann hoffentlich funktionieren...
    obwohl mir jetzt immer noch nicht klar ist wieso das USB Verzeichnis so heißt und wieso da so ein unterschied in der Programmierung ist (CE vs. Win7)
    Geändert von Junge (13.09.2015 um 17:28 Uhr)

  7. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von Junge Beitrag anzeigen
    -( ich möchte ja gern eine Festplatte mit USB an das HMI stecken)
    Woher weiss ich den Pfad?
    - auf dem HMI-Panel den Windows Explorer öffnen und schauen, unter welchem Name der USB-Stick erscheint
    - oder im WinCC flex Projekt ein Meldearchiv oder Variablenarchiv anlegen und sehen, welchen Ablage-Pfad man wählen kann

    Beides wird Dir wahrscheinlich zeigen, daß der USB-Stick als "\Storage Card USB\" angesprochen wird.


    Zitat Zitat von Junge Beitrag anzeigen
    Für Leute mit ähnliche Probleme hier nochmal der ganze Quellcode mit WinccFlex Simuliert noch nicht aufn HMI getestet: D.H. mit Windows 7 funktioniert es mit Windows CE k.a.
    Dein Quellcode erzeugt die Formatierung von Datum und Uhrzeit entsprechend den regionalen Settings des darunterliegenden Windows. Solange Du die CSV-Datei mit dem selben PC öffnest, mit dem die Datei erzeugt wurde, wirst Du kein Problem bemerken. Sobald Du aber die CSV-Datei mit einem anderen Computer öffnest sind Probleme vorprogrammiert. Also gib Dir etwas mehr Mühe und formatiere Datum und Uhrzeit unabhängig von den Windows-Einstellungen.

    Stolpersteine bei der CSV-Erstellung


    Zitat Zitat von Junge Beitrag anzeigen
    -wie ist jetzt der richtige Quelltext für Windows CE!! so wie ich das hier lesen kann unterscheiden die sich ja.
    In dem von RONIN verlinkten FAQ findest Du eine PDF mit den Namen und Beschreibung der WinCE-VBScript-File-Funktionen. Und Skript-Beispiele in der Windos32- und WinCE-Version. Kriegst Du die Übersetzung hin?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Junge (13.09.2015)

  9. #7
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    194
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Ok danke, damit sollte ich es eigentlich schaffen

    Und ich werde auch das mit dem Dateinamen anpassen, allerdings kann ich das alles erst morgen mit dem Panel ausprobieren, weil da CE drauf ist.
    Falls ich dann auf Schwierigkeiten stoßen sollte würde ich mich nochmal an euch wenden mit der Hoffnung auf erneute Hilfe.

    Vielen Dank dass hier euch an einem Sonntag Zeit nimmt für solche sachen! ..naja es regnet ja eh draussen, zumindest bei uns

  10. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Versuche es mal so:
    Code:
    'VBS für WinCE
    Const ForAppend = 8
    DIM t, fDatum, Datum, Uhrzeit, USB, path, datei, fso, f
    
    t=now
    fDatum  = DatePart("yyyy", t) & Right("0" & DatePart("m", t), 2) & Right("0" & DatePart("d", t), 2)
    Datum   = Right("0" & DatePart("d", t), 2) & "." & Right("0" & DatePart("m", t), 2) & "." & DatePart("yyyy", t)
    Uhrzeit = Right("0" & DatePart("h", t), 2) & ":" & Right("0" & DatePart("n", t), 2) & ":" & Right("0" & DatePart("s", t), 2)
    
    USB   = "\Storage Card USB"
    path  = USB & "\Logs"
    datei = path & "\" & fDatum & ".txt" ' --> "\Storage Card USB\Logs\20150913.txt"
    
    
    Set fso = CreateObject("FileCtl.FileSystem")
    If fso.Dir(USB) <> "" Then 'USB-Stick gesteckt?
    
      'Ordner \Logs\ ggf. erstellen
      If fso.Dir(path) = "" Then 'Ordner \Logs\ existiert noch nicht?
        fso.MkDir path
      End If
    
      'CSV-Datei öffnen oder erstellen (Tip: wenn nicht exist --> erstellen + Kopfzeilen)
      Set f = CreateObject("FileCtl.File")
      f.Open datei, ForAppend
      f.LinePrint "Datum; " & Datum & "; Uhrzeit" & Uhrzeit "; Wert; " & SmartTags("Wert") & ";"
      f.Close
    
    Else 'kein USB-Stick gesteckt
      ...
    End If
    Tip: mache Dir eine Meldeanzeige für Systemmeldungen in ein Bild, damit Du die Runtime-Fehlermeldungen siehst und nachlesen kannst.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #9
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    194
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Wow, Danke schön!

    Genauso hatte ich es mir vorgestellt nur selbst noch nicht hinbekommen weil ich noch etwas Übung brauche.


    Das einzige was dann noch ergänzt werden müsste, da die Datei für jeden neuen Tag noch nicht exisitert:

    Code:
     'Datei erstellen   
    If fso.Dir(datei) = "" Then 'Datei existiert noch nicht?     
    fso.MkDir datei   End If
    Kopfzeile wird in dem Fall nicht benötigt, da ja die Zeilen schon selbst betitelt sind.

    Super, Danke!

  12. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich bin grad' nicht sicher, doch ich meine, daß auch beim Modus Append unter WinCE die Datei notfalls automatisch erstellt wird, falls sie noch nicht existiert.
    Weiters: mit MkDir kann man keine Dateien erstellen sondern nur Ordner (directory). Dateien werden durch öffnen im Schreibmodus (und vermutlich auch im Appendmodus) erstellt.

    In csv-Dateien, insbesondere wenn man sie als Archiv benutzt, ist es nicht üblich, in jeder Zeile erneut die Spaltennamen/Variablennamen zu schreiben. Das ist Platzverschwendung und verlangsamt auch das Schreiben und besonders das Einlesen der Datei. Möchte man in einer csv-Datei auch die Spaltennamen/Variablennamen mitteilen, dann macht man das üblicherweise einmalig im Kopfbereich der Datei.

    Wenn man wegen eventuellen Kopfzeilen sowieso vor dem Öffnen ermittelt, ob eine Datei schon existiert, dann ist es unerheblich ob Append eine Datei erstellt, weil man bei Nicht-Existenz die Datei am besten im Schreibmodus öffnet und die Kopfzeile(n) schreibt, bevor man die Datenzeile anhängt.

    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. Step 7 Wincc Flexible CSV Datei erstellen
    Von Junge im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.08.2015, 12:40
  2. WINCC flex - Daten in csv-Datei schreiben
    Von dirknico im Forum HMI
    Antworten: 8
    Letzter Beitrag: 02.12.2013, 11:39
  3. Antworten: 13
    Letzter Beitrag: 12.07.2012, 21:26
  4. Antworten: 2
    Letzter Beitrag: 18.06.2012, 13:09
  5. Antworten: 2
    Letzter Beitrag: 10.01.2012, 12:44

Lesezeichen

Berechtigungen

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