WinCCflexible - In Text Datei schreiben

Fluffi

Level-2
Beiträge
451
Reaktionspunkte
69
Zuviel Werbung?
-> Hier kostenlos registrieren
WinCCflexible - In Text bzw. CSV Datei schreiben ?

hallo

da CreateObject("excel.sheet") nicht funktioniert in WinCCflex 2007, muss ich wohl einen anderen Weg suchen um Daten aus WinCC flex in eine "excel"-Datei zu speichern.
Eine Möglichkeit wäre die Daten getrennt mit ";" in eine leere Datei zu speichern ( also csv Datei).
Wie geht sowas mit Visaul basic ?
 
Zuletzt bearbeitet:
du hast recht.
ich dachte es läge speziell am objekt excel.application.
dem ist aber nur bedingt so. es liegt wohl am crateobjekt.

Set fso = CreateObject("Scripting.FileSystemObject") scheint zunächst auch abzustürzen. hat bei mir jetzt 2 minuten gedauert bis es bei flex weiterging. ist aber nicht abgestürzt.

das ist für mich mehr als tragisch. fast schon der supergau. ich muss in kürze was an einem op277 ändern wo ich auf diese art wichtige prozessdaten schreibe. wenn das mal gut geht. :twisted:
 
also bei mir stürzt es zum glück nicht ab. :eek:

aber eines muss ich noch wissen :
wie kann ich festlegen dass die datei immer von oben überschrieben wird und nicht bei nächsten mal die neu reingeschriebenen Daten unten an die alten angefügt werden , bzw wie kann ich eine datei löschen um so ein problem zu vermeiden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kann mir keiner helfen?
so sieht der code aus:

################################
Dim datei,fso,fs,textfile1,

Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("WScript.Shell")

datei="C:\test.csv"


If Not fso.FileExists (datei) Then

Set textfile1 = fso.CreateTextFile(datei, True,True)
textfile1.WriteLine ...usw
textfile1.Close
End If


If fso.FileExists (datei) Then
Set textfile1 = fso_OpenTextFile(datei, True,True)
textfile1.WriteLine usw...
textfile1.Close
End If

##########

wenn die datei nicht existiert wird sie erstellt und beschrieben
wenn die datei existiert passiert jedoch garnichts ,sie wird nicht mal überschrieben.
was ich möchte ist :
egal ob die datei existiert oder nicht , möchte ich sie anlegen und überschreiben
 
Zuletzt bearbeitet:
kommt auf den dateimodus an.

fso.createtextfile erzeugt eine datei true wird die datei überschrieben.
fso.opentextfile öffne eine datei entweder zum lesen oder zum anhängen.

schau dir die vbscript sprachdokumentation zu diesen befehlen an.
 
Hallo,
hier mal ein Beispiel zum "Scripting.FileSystemObject"
Das sollte dir auf jeden Fall weiterhelfen ...

Code:
[SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][SIZE=2] fs , f , i , Verzeichnis , Ziel , Datei , Werte_String_1 , Werte_String_2[/SIZE]
[SIZE=2][COLOR=#0000ff]Const[/COLOR][/SIZE][SIZE=2] ForReading = 1, ForWriting = 2, ForAppending = 8[/SIZE]
 
[SIZE=2]...[/SIZE]
 
[SIZE=2][COLOR=#008000]' Ziel-Verzeichnis schon vorhanden ?[/COLOR][/SIZE]
[SIZE=2][COLOR=#008000]' ... wenn nein, dann erst erzeugen ...[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][SIZE=2] fs = CreateObject("Scripting.FileSystemObject")[/SIZE]
[SIZE=2][COLOR=#0000ff]If [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][SIZE=2] fs.FolderExists (Verzeichnis) [/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2]   fs.CreateFolder (Verzeichnis)[/SIZE]
[SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[SIZE=2][COLOR=#008000]' Ziel-Datei schon vorhanden ?[/COLOR][/SIZE]
[SIZE=2][COLOR=#008000]' ... wenn nein, dann erst erzeugen ...[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]If [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][SIZE=2] fs.FileExists (Ziel) [/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]   Set[/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel , ForWriting, [/SIZE][SIZE=2][COLOR=#0000ff]true[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]   f.WriteLine "Messdaten Anlage 198"[/SIZE]
[SIZE=2][COLOR=#0000ff]Else[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]   Set[/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel , ForAppending)[/SIZE]
[SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
 
[SIZE=2]...[/SIZE]
 
[SIZE=2]f.Close [/SIZE]
 
wie kann ich eigentlich einen Wert aus einer csv datei einlesen und in variablen speichern

ich hab das mal so gemacht (gemäß dem beispiel hier) :
zuerst liesst das skript jeden wert der in einer zeile steht in name(x)
x steht für zeilennummer.
und am ende geb ich eine entsprechende zeile zu einer bestimmten SPSvariablen .
Warum klappt das nicht?
TempRestore.csv existiert natürlich und hat pro zeile ein paar zahlen.


Dim fso,fs,datum,zeit,datei,textfile2,x,name

Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("WScript.Shell")

datei = "C:\TempRestore.csv"

Set textfile2 = fso_OpenTextFile(datei, 1)
x = 0

Do While textfile2.AtEndOfStream <> True
x = x + 1
name(x) = textfile2.ReadLine

Loop


SmartTags("SPSvar1") = name(1)
SmartTags("SPSvar2") = name(2)
...usw


textfile2.Close
 
:confused: was klappt den konkret nicht ...?
Du bekommst doch ggf. eine Fehlermeldung, oder nicht ?

Was ist name ? Ein ARRAY innerhalb des Scriptes ?
Wie lang ist eine Zeile, die du einliest ? Mehr als 254 Zeichen ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn ich das Skript ausführe und die Variablen beobachte werden die Werte einfach nicht übernommen. fehlermeldungen gibts keine.
das skript wurde auch erfolgreich kompiliert.

name soll ein array sein. Er ist jedoch nur mit Dim name deklariert
ein dim name AS ... wie unter VB zb in Excel geht ja leider nicht unter WinCC.
in einer zeile stehten nur ein paar zahlen höchstens 8 :zb 1234


gibts eigentlich ùnter VB WinCC irgendeine kleine funktion die mir zb ein meldefenster aufmacht oder den PC Speaker kurz anmacht um zu testen ob das Programm eine gewisse Codestelle erreicht hat ?
 
Eine MessageBox oder so gibt es nicht ...

Versuch doch mal die Zeilen direkt einzulesen. Meine Vermutung wäre, dass deine " Do While textfile2.AtEndOfStream <> True"-Schleife so nicht funktioniert. Das habe ich bisher nicht eingesetzt ... Alles andere sieht bei mir so ähnlich aus ...

Gruß
LL
 
... fehlermeldungen gibts keine.
das skript wurde auch erfolgreich kompiliert.
ich behaupe mal, es gibt eine fehlermeldung. und zwar 'typen unverträglich'

definiere die var: name mal so-> name(1000) wobei 1000 die grösse des arrays angibt.

das funzt (getestet mit protool)
Code:
Dim datei,fso,textfile2,name(100),x

Set fso = CreateObject("Scripting.FileSystemObject")

datei="E:\s7_daten\protool\test.txt"
Set textfile2 = fso.OpenTextFile(datei, 1)
x = 0
Do While textfile2.AtEndOfStream <> true
x = x + 1
name(x) = textfile2.ReadLine
Loop
VAR_1=name(1)
VAR_2=name(2)
VAR_3=name(3)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke , mit name(100) funktionierts !!
ich schreib das alles im winCC VB editor und der gibt bei Typen unverträglich leider keine Meldung heraus. Auch sonst generiert das Teil oft ohne Fehlermeldung einen Code auch wenn etwas nicht ganz passt.
 
Hallo,

also ich habe mit diesen Beispielen meine Probleme:

Dim datei,fso,fs,textfile1

Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("WScript.Shell")

datei="C:\test.csv"

If Not fso.FileExists (datei) Then

Set textfile1 = fso.CreateTextFile(datei, True,True)
textfile1.WriteLine
textfile1.Close
End If

Darf ich hier erwarten, dass WinCC Flexible 2008 mir eine Datei erzeugt?
Ich warte vergebens auf diese Datei beim Ausführen des Skripts.
Bediengerät ist "WinCC flexible Runtime 1.4.0.0"

Wenn ich nach jeder Zeile ein Bit auf true setze (soll Debug-Modus sein), dann fällt mir auf das Skrit hat Schwierigkeiten bei --> datei="C:\test.csv" <--

Ich bitte um Hilfe
 
Das wird es wohl sein, also direkt unter C:\ geht es nicht, außer ich erstelle Unterordner.
Was auch nicht geht ist Beispielsweise D:\Test\Test.txt -> wenn der Unterordner bereits nicht angelegt ist, wird es unter D:\ abgelegt.

Ein anderes Problem. Wenn ich die Datei habe, dann will ich sie zu festen Zeitpunkten öffnen und an die letzt Zeile die neuen Daten reinschreiben:

Set fout = fso_OpenTextFile(Dateiname,8 ) 'Adresse, wo Datei liegt
fout.WriteLine SmartTags("Ein_Wert")

Das Problem ist, dass er das nicht Zeile für Zeile hintereinander wegschreibt. Nur 1 zeile. Ich nehme an ich verwende den falschen Befehl?
 
Zuletzt bearbeitet:
Set fout = fso_OpenTextFile(Dateiname,8) 'Adresse, wo Datei liegt
fout.WriteLine SmartTags("Ein_Wert")

Das Problem ist, dass er das nicht Zeile für Zeile hintereinander wegschreibt. Nur 1 zeile. Ich nehme an ich verwende den falschen Befehl?
Ich empfehle dir die Paramter der Methode OpenTextFile mal anzusehen. Parameter 2 mit Wert 8 - Open for Appending. https://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspx

Des weiteren kannst du dir auch Volkers FAQ zu dem Thema durchlesen. Da si d auch viele Codeschnipsel drin. Pass nur auf dass du WinCE (Touchpanel) und Windows (PC-Runtime) nicht verwechselst.
http://www.sps-forum.de/faq/15348-protool-winccflex-daten-lesen-schreiben-mit-vb-script.html

Wenn du die Exceptions in deine Skripten sehen willst kannst du folgendermaßen vorgehen.
Code:
On Error Resume Next

'Code der Fehler verursacht...
If Err.Number <> 0 Then
     ShowSystemAlarm("Mein Fehler: " & Err.Description)
End If
Den SystemAlarm bekommst du dann angezeit wenn du ein WinCC-Alarmcontrol einfügst, die Systemmeldungen anhakst und Anzeigeart Meldeereignisse verwendest. 0 Then
ShowSystemAlarm(
 
Zuletzt bearbeitet:
Zurück
Oben