WinCC flex Daten in Runtime in csv-datei

kuti

Level-1
Beiträge
354
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich drücke auf eine Startfläche, in der ein Skript aufgerufen wird, wo eine csv-Datei gelesen wird und in meine EA-Felder die jeweiligen Texte aus der csv-Datei abgespeichert werden.

Jetzt möchte ich den umgekehrten Weg gehen, also in der Runtime auf ein EA-Feld klicken und dort einen Text eingeben, wodurch dann dieser Text in die jeweilige Spalte in der csv-Datei abgeändert wird.
Ich programmiere momentan mit VBScript und WinCC flex. Hat jemand das schon mal gemacht?

Gruß
 
Hast du schon Volkers FAQ gelesen ?

Muss aber kommentieren, das du kannst nur eine komplette Zeile in den CSV schreiben, nicht nur ein Wert innerhalb von ein bestehende Zeile.
Entweder wird den CSV überschrieben, oder der Zeile wird angehängt nach die Zeilen die schon in den CSV gibt.

In Volkers FAQ ist beschrieben wie man einzelne Zellen in ein Excel Datei manipuliert.
 
Wie Jesper bereits erwähnt hat.
Wenn du mehrere Zeilen/Variablen in der csv speicherst mußt du die csv KOMPLETT neu schreiben mit allen Zeilen.
 
Hallo,

war ein paar Tage weg. Ich habe mal ein Skript hier in diesem Forum kopiert. Es werden zwar Daten in in die csv geschrieben, aber immer wenn neue Daten geschrieben werden, so werden dieses untereinander geschrieben. Besser wäre es natürlich, wenn die den gewünschten Platz beschreiben, die ich möchte, also z.B Spalte x und Zeile y. Kann mir da jemand weiterhelfen? Hier ist das Skript:
Dim fso, f, ts, Dateiname, VZ_NAME, DT_STRING, DT_SPLIT, i



Set fso = CreateObject ("Scripting.FileSystemObject")




' VERZEICHNIS
VZ_NAME = "C:\Users\Desktop\" 'SmartTags("DATEIABLAGE")

' Verzeichnis erzeugen (Objekt erzeugen)
Set fso = CreateObject("Scripting.FileSystemObject")
'Prüfung ob das Verzeichnis existiert
If Not fso.FolderExists(VZ_NAME) Then ' Wenn es nicht existiert, dann anlegen
fso.CreateFolder (VZ_NAME)
Else 'Fehlermeldung ausgeben
End If

' Schreiben zu Internem Medium. Vorwahl über Bildschirmgrafik.
Dateiname = VZ_NAME & "sasqs.csv"
' CSV-DATEI ANLEGEN UND SPALTENÜBERSCHRIFTEN EINTRAGEN
If Not fso.FileExists(Dateiname) Then
fso.CreateTextFile (Dateiname)
Set f=fso.GetFile(Dateiname)
Set ts=f.OpenAsTextStream(8,-2)
ts.WriteLine ("DATUM UND UHRZEIT; REZEPTUR_ID; WERT 0 ; WERT 1 ; WERT 2 ; WERT 3 ; WERT 4 ; WERT 5 ; WERT 6 ; WERT 7 ; WERT 8 ; WERT 9 ; WERT 10 ; WERT 11 ; WERT 12 ; WERT 13 ; WERT 14 ; WERT 15 ")
ts.Close
End If
' VARIABLEN IN CSV-DATEI SCHREIBEN
Set f=fso.GetFile(Dateiname)
Set ts=f.OpenAsTextStream(8,-2)
ts.WriteLine ( SmartTags("Variable_1") & ";" & SmartTags("Variable_2") & ";" & SmartTags("Variable_3") )
ts.Close



Set ts = Nothing
Set f = Nothing
Set fso = Nothing
Set Dateiname = Nothing

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Besser wäre es natürlich, wenn die den gewünschten Platz beschreiben, die ich möchte, also z.B Spalte x und Zeile y. Kann mir da jemand weiterhelfen?
Warum ist das besser ?
Was willst du erzielen damit ?
Egal, wie schon erklärt das kannst du nicht, zumindest nicht mit CSV Dateien.

Es gibt auch den Möglichkeit Excel-Dateien zu manipulieren, aber das öffnet viele andere Probleme.
CSV ist einfacher als Excel, und mMn. dann ist Einfacher=Besser.
 
Wie gesagt lese ich eine csv-Datei mit mehreren Zeilen und Spalten, wo Texte stehen, aus. Diese Texte werden dann in der Runtime in den EA-Feldern angezeigt. Nun möchte ich manchemal ein Text ändern. Wenn ich also diesen Text ändere, so muss das auch in der csv-datei abgespeichert werden.

Sowas kann ich mit csv-dateien nicht machen?
 
Du kannst die bestehende Zeilen in ein ein bestehende CSV nicht manipulieren, ausser:
Du kannst neue Zeilen anhängen nach die bestehende Zeilen, oder..
Du kannst den CSV komplett neu schreiben (sprich: überschreiben), mit alle Zeilen und Werte usw.
 
Ich verstehe nicht was du mit den CSV Datei willst.
In den allererste Kolonne hast du DATUM_UND_UHRZEIT.
Ist es ein art Log ?
Dann kannst du ja nicht nachträglich Werte ändern.

Oder ist es ein Art Rezepturverwaltung ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, wie gesagt, alle meine Texte stehen in den csv-Dateien. Ich muss mit den csv-Dateien arbeiten. Das obere Skript ist nur ein Beispiel. Ich muss ein anderes Skript schreiben, wo man gezielt die bestimmte Zelle ändern kann, wenn man sich in der Runtime befindet. Gibt es keine andere Möglichkeit
 
Hallo,
im Grunde hat es Jesper schon ganz gut angesprochen - du hast es nur nicht verstanden. Deshalb versuche ich es jetzt noch einmal.
Du kannst in einer CSV-Datei nicht einfach so ein bestimmtest Feld ändern (so wie bei ExCel - Cells(3,7) = "blablabla").
Was du aber z.B. machen kannst ist : Du liest dir die Datei komplett in deinen Speicher (z.B. in ein Array), änderst dann in dem Array das entsprechende Element, löscht die alte CSV-Datei auf deinem Datenträger und schreibst sie dann aus deinem Array heraus neu.
Das hört sich jetzt vielleicht kompliziert an - es ist aber im Grunde relativ einfach. Willst du dir die Mühe machen ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist möglich die Rezepturen selber zu basteln, aber der Fehlerhantierung wird nicht einfach. Da ist mindestens so viel Arbeit als nur die Daten in ein CSV zu lesen und schreiben. Und ich bezweifle das man alle Fehlermöglichkeiten mit Skripte hantieren kann.
Wenn du den standard Rezepturverwaltung verwendest, wird es für dich automatisch erledigt.

Es kostet aber ein extra Lizenz für Rezepturen.
 
Wenn ich es verstanden habe (von den anderen Thread) dann soll man die CSV Dateien auch ekstern ändern können (von Hand).
Das öffnet viele Fehlermöglichkeiten.
Was passiert wenn einfach ein Fehlerhafter CSV per Skript in den SPS übertragen wird ?
 
Hallo,
zum Beispiel so :
Code:
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject") 
 fs.DeleteFile "Datei.csv" , True

Hierzu ist aber auch die Flex-Hilfe recht brauchbar ...

Gruß
Larry
 
Was du aber z.B. machen kannst ist : Du liest dir die Datei komplett in deinen Speicher (z.B. in ein Array), änderst dann in dem Array das entsprechende Element, löscht die alte CSV-Datei auf deinem Datenträger und schreibst sie dann aus deinem Array heraus neu.
Das hört sich jetzt vielleicht kompliziert an - es ist aber im Grunde relativ einfach. Willst du dir die Mühe machen ?

Gruß
Larry

Kann ich das auch machen, wenn ich 120 Zeilen und 25 Spalten habe? :oops: Dann bräuchte ich doch 120*25 = 3125 Variablen.
 
Zurück
Oben