Hallo Irek,
vielen Dank, die Idee finde ich sehr gut. Mein Problem ist aber, dass ich das Datum nicht in das STRING Format bekomme, hast du eine Idee dazu?
Was meinst du mit Vorlage? Die CSV-Datei sieht zum Beispiel wie folgt aus: 01.01.1970; 00:00; 01:00; 0;
01.01.1970; 01:00; 02:00; 0;
01.01.1970; 02:00; 03:00; 1;
Vielen Dank und viele Grüße,
Nils
Hi,
fuer Beckhoff gilt das, wenn andere Controller am Werk sollte es auch funktionieren.
Wichtig ist nur wo ich es bekomme.
Wenn du den Prinzip mit CONCAT verstanden hast, kannst du dir alles nach wunsch "zusammenbauen"
Wenn mit dem Datum funktioniert, dann brauchen wir ein Array (denke an die Menge der Eintraege) wo alles reinkommt.
Wird ein Struct definiert mit Datum, Uhrzeit und dem Zustand, dann kann man das Blockweise speichern (1x Stunde) und geordnet wieder einlesen.
Schreib doch bitte in paar Zeilen wie das Programm funktionieren soll, also was zuert und was danach.
Du wirst dich wundern, wie schnell man dann vorankommt.
FUNCTION_BLOCK FB_PLC_Systemtime
VAR_INPUT
END_VAR
VAR_OUTPUT
DT_String:STRING(20);
XML_Datum:STRING;
XML_Time:STRING;
END_VAR
VAR
(* 1s Timer for internal logging based of Systemtime and sync with SNTP*)
fbTime :FB_LocalSystemTime:=( bEnable := 1, dwCycle := 1 );
logTimer : TON := ( IN :=1, PT := T#1000ms );(* 1s Clock for logging Timebase = 1x pro sec wird Zeit aktualisiert*)
Year:STRING(6);
Month:STRING(4);
Day:STRING(4);
Hour:STRING(4);
Minute:STRING(4);
Sec:STRING(4);
XML_Year:STRING(6);
XML_Month:STRING(4);
XML_Day:STRING(4);
XML_Hour:STRING(4);
XML_Minute:STRING(4);
XML_Sec:STRING(4);
END_VAR
(* PLC Time => GV PLC_Systemtime:STRING(20); !*)
MAIN
fbTime();(*Das ist der Baustein fuer interne Systemzeit b. Beckhoff*)
Year:=WORD_TO_STRING( fbTime.systemTime.wYear);(*Einfach das Jahr(Systemintern als WORD) in String umwandeln*)
Month:=WORD_TO_STRING( fbTime.systemTime.wMonth);(*Genauso*)
IF fbTime.systemTime.wMonth < 10 THEN(* 9 wird als 09 ausgegeben, will heissen immer konstante Breite*)
Month:=CONCAT(STR1:='0',STR2:=Month);
END_IF;
Day:=WORD_TO_STRING( fbTime.systemTime.wDay);(*wenn kleiner 10 dann mach daraus "09" *)
IF fbTime.systemTime.wDay < 10 THEN
Day:=CONCAT(STR1:='0',STR2:=Day);
END_IF;
Hour:=WORD_TO_STRING( fbTime.systemTime.wHour);
IF fbTime.systemTime.wHour < 10 THEN
Hour:=CONCAT(STR1:='0',STR2:=Hour);
END_IF;
Minute:=WORD_TO_STRING( fbTime.systemTime.wMinute);
IF fbTime.systemTime.wMinute < 10 THEN
Minute:=CONCAT(STR1:='0',STR2:=Minute);
END_IF;
Sec:=WORD_TO_STRING( fbTime.systemTime.wSecond);
IF fbTime.systemTime.wSecond < 10 THEN
Sec:=CONCAT(STR1:='0',STR2:=Sec);
END_IF;
(************************************************************************)
XML_Year:=CONCAT(STR1:='D_',STR2:=Year);(* Und "D_2013 *)
XML_Month:=CONCAT(STR1:='_',STR2:=Month);(* "D_2013_10" *)
XML_Day:=CONCAT(STR1:='_',STR2:=Day);(* "D_2013_10_20" = Datum als String*)
XML_Hour:=CONCAT(STR1:='T_',STR2:=Hour);(* "T_20" *)
XML_Minute:=CONCAT(STR1:='_',STR2:=Minute);(*"T_20_30" *)
XML_Sec:=CONCAT(STR1:='_',STR2:=Sec);(*"T_20_30_59" = Zeit *)
Year:=CONCAT(STR1:=Year,STR2:='-');(*Eine andere Variante*)
Month:=CONCAT(STR1:=Month,STR2:='/');
Day:=CONCAT(STR1:=Day,STR2:='/');
Hour:=CONCAT(STR1:=Hour,STR2:=':');
Minute:=CONCAT(STR1:=Minute,STR2:=':');
DT_String:=CONCAT(STR1:=Day,STR2:=Month);
DT_String:=CONCAT(STR1:=DT_String,STR2:=Year);
DT_String:=CONCAT(STR1:=DT_String,STR2:=Hour);
DT_String:=CONCAT(STR1:=DT_String,STR2:=Minute);
DT_String:=CONCAT(STR1:=DT_String,STR2:=Sec);
XML_Datum:=CONCAT(STR1:=XML_Year,STR2:=XML_Month);
XML_Datum:=CONCAT(STR1:=XML_Datum,STR2:=XML_Day);
XML_Time:=CONCAT(STR1:=XML_Hour,STR2:=XML_Minute);
XML_Time:=CONCAT(STR1:=XML_Time,STR2:=XML_Sec);
Irek