Hallo Sven,
hier also mal ein abgespecktes Beispiel für die SysRtc23.lib:
Deklarations-Editor:
Programm-Editor:
Hier hast du 2 Varianten um ein zeitgesteuertes Ereignis auszuführen.
Sicherlich würde ich persönlich hier mit Arrays und Strukturen arbeiten, aber zur Veranschaulichung sollte das erstmal ausreichen.
Für das Aufsplitten der DATE_OF_TIME habe ich die vorgefertigten Oscat-Funktionen verwendet.
Dies setzt natürlich voraus, dass du die Oscat_Basic.lib im Codesys implementiert hast. ;)
Gruß
hier also mal ein abgespecktes Beispiel für die SysRtc23.lib:
Deklarations-Editor:
Code Auswählen
VAR
dt_Systemzeit :DT;
i_actuStunde :INT;
i_actuMinute :INT;
i_actuSekunde :INT;
i_actuWochentag :INT;
i_actuTag :INT;
i_actuMonat :INT;
i_actuJahr :INT;
dt_Soll_Datum :DT:=DT#2020-5-6-12:00:00; (* <-- Initialwert entspricht 06.05.2020 - 12:00:00 Uhr *)
i_Soll_Stunde :INT;
i_Soll_Minute :INT;
i_Soll_Sekunde :INT;
i_Soll_Wochentag :INT; (* 1=Mo, 2=Di, 3=Mi, 4=Do, 5=Fr, 6=Sa, 7=So *)
i_Soll_Tag :INT;
i_Soll_Monat :INT;
i_Soll_Jahr :INT;
x_ZeitgesteuertesEreignis_1 :BOOL;
x_ZeitgesteuertesEreignis_2 :BOOL;
END_VAR
(*
Referenzierte Bibliotheken:
- SysRtc23.lib
- Oscat_Basic.lib
*)
Programm-Editor:
Code Auswählen
//Bereitstellung bzw. Erfassung Systemzeit der Zielsteuerung:
dt_Systemzeit:=SysRtcGetTime(TRUE);
//DT-Variable aufsplitten:
i_actuStunde :=OSCAT_BASIC.HOUR_OF_DT(dt_Systemzeit);
i_actuMinute :=OSCAT_BASIC.MINUTE_OF_DT(dt_Systemzeit);
i_actuSekunde :=OSCAT_BASIC.SECOND_OF_DT(dt_Systemzeit);
i_actuWochentag :=OSCAT_BASIC.DAY_OF_WEEK(DT_TO_DATE(dt_Systemzeit));
i_actuTag :=OSCAT_BASIC.DAY_OF_MONTH(DT_TO_DATE(dt_Systemzeit));
i_actuMonat :=OSCAT_BASIC.MONTH_OF_DATE(DT_TO_DATE(dt_Systemzeit));
i_actuJahr :=OSCAT_BASIC.YEAR_OF_DATE(DT_TO_DATE(dt_Systemzeit));
//Variante 1 Ereignissteuerung --> per Vergleich DT-Variablen:
IF dt_Systemzeit = dt_Soll_Datum THEN
x_ZeitgesteuertesEreignis_1:=TRUE;
END_IF;
//Variante 2 Ereignissteuerung --> per Vergleich Einzel-Sollwerte:
IF
i_actuStunde = i_Soll_Stunde AND
i_actuMinute = i_Soll_Minute AND
i_actuSekunde = i_Soll_Sekunde AND
i_actuWochentag = i_Soll_Wochentag AND
i_actuTag = i_Soll_Tag AND
i_actuMonat = i_Soll_Monat AND
i_actuJahr = i_Soll_Jahr THEN
x_ZeitgesteuertesEreignis_2 :=TRUE;
END_IF;
Hier hast du 2 Varianten um ein zeitgesteuertes Ereignis auszuführen.
Sicherlich würde ich persönlich hier mit Arrays und Strukturen arbeiten, aber zur Veranschaulichung sollte das erstmal ausreichen.
Für das Aufsplitten der DATE_OF_TIME habe ich die vorgefertigten Oscat-Funktionen verwendet.
Dies setzt natürlich voraus, dass du die Oscat_Basic.lib im Codesys implementiert hast. ;)
Gruß