Log-Datei erzeugen CoDeSys 2

DachBahn

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte eine Log-Datei, in meinem SPS-Panel anlegen.
Alle 30 Sekunden sollen wichtige Daten weggeschrieben werden.

Bis jetzt habe ich alles geschafft, aber wie fange ich in der TXT-Datei eine neu Zeile und wie bekomme ich eine Variabel mit Zeit und Datum ?

Code:
R_TRIG_Save(CLK:=speichern );
IF R_TRIG_Save.Q THEN
(* Öffnen zum Daten anhängen *)
hFile := SysFileOpen('\temp\logger.txt','a');
(*hineinschreiben der Daten*)
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText),Size:=LEN(WegSpeicherText));
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText_2),Size:=LEN(WegSpeicherText_2));
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText),Size:=LEN(WegSpeicherText));
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText_2),Size:=LEN(WegSpeicherText_2));
(*schließen der Datei mit Datei-Nummer*)
hFileclose1:=SysFileClose(File :=hFile);
END_IF

Vieln Dank
 
Eine neue Zeile kann mit dem String '$R$N' erzeugt werden. Das muss mit in den Textstring rein. CONCAT(String1, String2) z.B. fügt zwei Strings zu einem neuen zusammen. $X sind Escapesequenzen, stehen z.B. hier: http://en.wikipedia.org/wiki/IEC_61131-3
DT_TO_STRING(dtVar) wandelt ein Datum in einen String um. xx_TO_STRING gibt es auch für die anderen Variablentypen.
Damit solltest du weiterkommen :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, hier ist meine Lösung.

(* Öffnen und Daten anhängen*)
hFile := SysFileOpen (FileName,'a');

(*hineinschreiben der Daten*)
Echtzeit := SysRtcGetTime(Echtzeit_Start);
WegSpeicherText := DT_TO_STRING(Echtzeit);
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText),Size:=LEN(WegSpeicherText));
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText_2),Size:=LEN(WegSpeicherText_2));
 
So, hier ist meine Lösung.

(* Öffnen und Daten anhängen*)
hFile := SysFileOpen (FileName,'a');

(*hineinschreiben der Daten*)
Echtzeit := SysRtcGetTime(Echtzeit_Start); (*Zeitspempel erzeugen*)
SpeicherText := DT_TO_STRING(Echtzeit);(*Zeitspempel erzeugen*)
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(SpeicherText),Size:=LEN(SpeicherText));
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(SpeicherText_2),Size:=LEN(SpeicherText_2));
(*weitere Daten schreiben lassen*)

(*Zeilenzeilenumbruch - neue Zeile*)
SpeicherText := '$R$N';
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(SpeicherText),Size:=LEN(SpeicherText));
(*schließen der Datei mit Datei-Nummer*)
hFileclose1:=SysFileClose(File :=hFile);

So fertig, und das mach mein Programm. Alle 30Sekunden.
mfg
 
Hallo Dachbahn,

Wie hast du die Variablen Echtzeit und Echtzeit_Start deklariert ? Ich vermute als (Date_And_Time) ?
Ausserdem sehe ich nicht die Berechnung für das Schreiben alle 30 Sekunden. Wie hast du das gemacht?
Danke und Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und guten Morgen,
Leider ist das alles sehr lange her.

Alles in CoDeSys 2:
Echtzeit habe ich als DT deklariert.
Echtzeit_Start ist eine Bool, die der Funktion SysRtcGetTime sagen soll jetzt geht es los.

Für das schreiben im Intervall, habe ich einen einfachen Blinker/Timer erzeugt. Wenn dieser High ist, wird der Logger nur einmal durchlaufen. Bis der Blinker/Timer wieder ein High hat.

Ich hoffe das Hilft
 
Ich habe einen Blinker erstellt, welches 30S High und 30 Sekunden Low ist.
Während der Zeit in der, der Blinker auf High ist, möchte ich alle meine Daten in einer Datei schreiben.
meine Daten bestehen aus Bool Variablen, DINT Variablen, String und und ......
Mein Ziel ist, jede 30 Sekunden die Zustände meiner Variablen zu protokollieren, sobald ich in Automatik Modus bin
Aber ich bekomme unlesbare Zeichen

meine Deklaration sieht so aus :

VAR
hFile: DWORD ;
Filename:STRING := '\InternalStorage\Probe.txt' ;
Echtzeit: DT;
Echtzeit_Start: BOOL;
SpeicherText: STRING;
hFileclose1: BOOL;

BLK: BLINK;
start: BOOL;
Status:BOOL;
END_VAR

Mein Code

BLK(ENABLE:=Automatik_Start , TIMELOW:=t#10S , TIMEHIGH:=t#10s , OUT=>Status );
IF Status THEN
hFile := SysFileOpen (FileName,'a');
Echtzeit:=SysRtcGetTime (Echtzeit_Start);
SpeicherText:=DT_TO_STRING(Echtzeit);
SysFileWrite(File:= hFile ,Buffer:= ADR(SpeicherText),Size:=LEN(SpeicherText));
SysFileWrite(File:= hFile , Buffer:=ADR(Pumpe_Start),SIZE:=(Pumpe_Start));

SpeicherText := '$R$N';
hFileclose1:=SysFileClose(File :=hFile);
 
Zurück
Oben