Hallo zusammen,
habe mich in meiner Verzweiflung hier anmelden müssen, da ich es einfach nicht hinbekomme, meine Daten zu loggen.
Ich habe mein Projekt erfolgreich programmiert und bekomme keinerlei Fehlermeldungen.
Im programm versuche ich einen Zeitstempel, einen REAL-Wert und einen DINT wert zu loggen.
Hierzu verwende ich ausschließlich die manuelle Auslösung TRIG_M um Zykluszeiten zu loggen.
Leider Gottes wird keine Datei angelegt, ich habe bereits unterschiedliche Pfade genutzt, oder eben auch keinen Pfad, damit die Datei direkt auf dem Controller gespeichert wird, alles erfolglos.
Eine XML-Datei kann ich zwar schreiben und diese wird auch gespeichert, enthält aber wohl Fehler, da ich sie nicht über excel 2010 einlesen kann.
Hier ein Ausschnitt aus meinem Code:
FUNCTION_BLOCK CYCLE_LOG
VAR
xError_Cycle_Time_Too_Long: BOOL;
xLog_Cycle_Time: BOOL;
xAktor: BOOL;
rCycle_Time_REAL: REAL;
rCycle_Time_Last_Cycle: REAL;
Instanz1_F_TRIG: F_TRIG;
Instanz1_R_TRIG: R_TRIG;
Instanz1_TON: TON;
Instanz1_DLOG_DT: DLOG_DT;
Instanz1_DLOG_REAL: DLOG_REAL;
Instanz1_DLOG_DINT: DLOG_DINT;
Instanz1_DLOG_STORE_FILE_XML: DLOG_STORE_FILE_XML;
Instanz1_DLOG_STORE_FILE_CSV: DLOG_STORE_FILE_CSV;
X: DLOG_DATA;
END_VAR
VAR_INPUT
INPUT_DOOR_CLOSED: BOOL;
CYCLE_COUNT: DINT;
FILENAME_XML: STRING;
FILENAME_CSV: STRING;
END_VAR
(* Aufzeichnen aller Zykluszeiten von Beginn an. Zykluszeiten in REAL-Sekunden z.B. 15,324s *)
(*Deklarierung Öffnungs- und Schließimpuls*)
Instanz1_F_TRIG(CLK:=INPUT_DOOR_CLOSED); (*Tür öffnet mit fallender Flanke von "TÜR geschlossen"*)
Instanz1_R_TRIG(CLK:=INPUT_DOOR_CLOSED); (*Tür schließt mit steigender Flanke von "TÜR geschlossen"*)
(*Zählen der Zyklusdauer = Zeit zwischen F_TRIG und R_TRIG*)
IF Instanz1_F_TRIG.Q THEN
xAktor:= TRUE;
ELSIF Instanz1_R_TRIG.Q THEN
rCycle_Time_REAL:= INT_TO_REAL(TIME_TO_INT(Instanz1_TON.ET))/1000;
xAktor:= FALSE;
END_IF;
Instanz1_TON(IN:= xAktor, PT:= T#15s, Q=> xError_Cycle_Time_Too_Long);
(*Zykluszeit in Variable Schreiben bei Zyklusende und freigeben der Aufzeichnung eines Wertes*)
IF Instanz1_R_TRIG.Q AND rCycle_Time_REAL > 0 THEN
rCycle_Time_Last_Cycle := rCycle_Time_REAL;
xLog_Cycle_Time := TRUE;
ELSE
xLog_Cycle_Time := FALSE;
END_IF;
(*Aufzeichnen des letzten Zyklus' in einer XML-Datei*)
Instanz1_DLOG_DINT(
VALUE:= CYCLE_COUNT,
COLUMN:= 'Zyklusnummer',
X:= X);
Instanz1_DLOG_DT(
FMT:= ,
COLUMN:= 'Zeitstempel',
X:= X);
Instanz1_DLOG_REAL(
VALUE:= rCycle_Time_Last_Cycle,
N:= 3,
D:= '.',
COLUMN:= 'Zykluszeit',
X:= X);
(*
Instanz1_DLOG_STORE_FILE_XML(
ENABLE:= TRUE,
TRIG_M:= Instanz1_R_TRIG.Q,
TRIG_T:= ,
FILENAME:= FILENAME_XML,
DTI:= SysRtcGetTime(TRUE),
X:= X);
*)
Instanz1_DLOG_STORE_FILE_CSV(
ENABLE:= TRUE,
TRIG_M:= Instanz1_R_TRIG.Q,
TRIG_T:= ,
FILENAME:= FILENAME_CSV,
DTI:= SysRtcGetTime(TRUE),
SEP:= 59,
X:= X);
Im PLC_PRG wird der Baustein 3-mal Instanziert und entsprechend unterschiedliche Dateinamen daran deklariert.
Für XML funktioniert es wie gesagt, zumindest soweit, dass Dateien geschrieben werden, auch mit den korrekten Daten, nur kann ich diese nicht einlesen, daher will ich es mit CSV Dateien versuchen, diese werden aber nicht geschrieben.
Vieleicht kann mir ja jemand weiterhelfen, ich habe nach 4 Stunden Ursachenforschung wirklich keine Lust mehr....
Grüße,
Florian
____________________________________________________