Variablen als String in csv- oder txt-Datei schreiben/speichern CoDeSys V3.5

Malcolm

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

wie kann man Variablen als String in ein logfile speichern? Ich habe schon mehrere Versuche mit der SysFile.lib unternommen, jedoch ohne Erfolg.


Grüße
Malcolm
 
Hallo Malcolm

Dann Beschreibmal dein Problem mit SysFile.lib. Was hast du bisher versucht ?
Um Eine Datei zu erzeugen ist das auf jeden fall der richtige Weg.
Es kann sein das es auch einen Herstellerbezogenen Lib. für das Filhändling gibt.
Welche Steuerung hast Du ?

MfG Jochen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,

bisher habe ich verschiedene Beispiele aus anderen Foren versucht. Jedoch habe ich das Problem, dass diese sich scheinbar auf ältere CoDeSys-Versionen beziehen.

Hier z.B.:

writeFile:= SysFileWrite(FileHandle, ADR(CurrentString), LEN(CurrentString), bla );

weiß ich nicht, was ich für "bla" einsetzten soll. Für meine Steuerung gibt es leider keine Lib für das Filehandling.

Grüße
Malcolm
 
Der letzte Parameter ist pResult ein Pointer auf eine Variable wo das Ergebnis dieser Funktion geschrieben wird.
Die Variable ist vom Type "SysTypes.RTS_IEC_RESULT" .
Bevor du etwas in die Datei Schreiben kannst muss die Dateien natürlich auch noch geöffnet werden "SysFileOpen"

Für ein etwas einfacheres Handling von Dateien schau dir die "CAA File" Lib an.
FILE.Open
FILE.Write
FILE.Close
 
Ja natürlich öffne ich zuerst die Datei, was meiner Meinung nach auch funktioniert. Nur schreibt er nichts in die Datei..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
hFileOpen := SysFile.SysFileOpen(..... gibt ja ein Filehandle zurück. Dieses soll später, nach dem Close, auch wieder geschlossen werden: hFileOpen := 0;
Würde man z.B. fälschlicherweise zyklisch ein SysFile.SysFileOpen(... machen, gehen womöglich die Ressourcen aus und es geht erst mal nicht mehr.
Um welches System handelt es sich denn?

Gruss
Lothar
 
ok, hab gerade herausgefunden dass man für die älteren Beispiele die SysFile23.lib benötigt.

@Lothar: Wie würde denn ein ganzes Bsp zum Schreiben einer Variable aussehen? Mein Programm schreibt einfach nichts..

Grüße
Malcolm
 
Hab das Problem gefunden mit den Beispielen für die ältere Versionen, man muss die SysFile23.lib verwenden..

@Lothar: Wie würde den ein ganzes Bsp für das Schreiben einer Variablen aussehen?

Grüße
Malcolm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

anbei das Demo.
Einfach den Deklarationsteil und dann den ganzen Codeteil reinkopieren.
Tricky ist immer die Angabe von Pfad/Dateiname: das ist seeeehr systemspezifisch: da musst Du schauen, wie bei Deinem System die richtige Syntax ist!
Das Beispiel
strFileName : STRING:= '/mnt/jogi.csv'; (*Pfadangabe ggf. anpassen*)
gilt für eine Boschrexroth-MTX und benennt die Datei jogi.csv im Verzeichnis mnt. Du siehst schon an der Unix-mässigen Syntax die Systemeigenheiten.
Interessant auch bei CF-Cards: da ist die Syntax für die Pfade meist auch sehr spezifisch!

Gruss
Lothar




Demo gelöscht
 
Zuletzt bearbeitet:
Ok, jetzt funktioniert alles. Danke!


Wie kann ich es umsetzen, anstatt z.B. "66 8,182097 TRUE" etwa "DT#2014-3-26-14:48:56.174 Info TRUE" auszugeben; Also DATE_AND_TIME anstatt Byte ?


Gruß
Malcolm
 
... probier doch so irgendetwas wie
str:=DT_TO_STRING(DT#1998-02-13-14:20);
(* Ergebnis ist 'DT#1998-02-13-14:20' *)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Perfekt, danke. Wie kann ich, wenn ich die Variablen in einer Schleife in die csv schreibe, einen Zeilenumbruch einfügen, so dass alle Variablen untereinander geschrieben werden?
 
... in dem Demo sollte das ja die Passage

// jetzt noch das CarriageReturn / LineFeed schreiben:
dwWriteSize_wNewLine := SysFile.SysFileWrite(hFile:=hFileOpen, pbyBuffer:=ADR(wNewLine), ulSize:=SIZEOF(wNewLine), pResult:= ADR(ResultFromFileWrite)); (* dwFileWrite ist Handle aus SysFileOpen *)

leisten.

In Deiner Applikation ggf. anpassen.

Gruss
Lothar
 
Zurück
Oben