Systemzeit mit String kombiniert schreiben in Codesys3.5 Structured Text

AMueller

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin in der Programmierung von Codesys noch ein Anfänger und versuche gerade beim eintreten eines Ereignisses eine Meldung zu generieren.
Wird z.B. auf einen Digitaleingang Spannung geschaltet soll eine Meldung auf dem Frontpanel geschrieben werden.
Es genügt erstmal eine Meldung die von anderen Ereignissen einfach überschrieben werden kann. Im nächsten Schritt könnte man dann evtl. die letzten 5 Meldung in einer Tabelle anzeigen.
Im Moment hänge ich an dem Punkt, dass ich die aktuelle Systemzeit in meinem Programm benötige, diese in einen String (HH.mm.ss) schreiben und mit einem anderen String (Klartextmeldung) zusammenfassen muss.
So soll es aussehen: "12:45:15Uhr Sicherung XY ausgelöst"

Wie kann ich also in ST die aktuelle Zeit (HH.mm.ss) lesen und in einen String wandeln. Die Generierung einer Meldung bei einer Flanke eines DI funktioniert. Nur eben das Zeit erstellen nicht.
Auf dem Frontpanel ist es ja recht einfach die aktuelle Zeit per %t [HH.mm.ss] anzuzeigen. nur eben in ST stehe ich irgendwie auf dem Schlauch.
Das Zusammenfassen der beiden Strings kann ich ja dann über CONCAT machen.

Vielen Dank
 
Mit der in Codesys enthaltenden Bibliothek SysTime oder auch SysTimeRTC kann man die Uhrzeit des Systems auslesen.
Diesen Zeitstempel kann man dann in einen String umwandeln.
 
Hallo,

dwTime := SysTimeRtcGet(udiDummy);
SysTimeRtcGetTimezone(stTimezoneInformation);
dwTime := dwTime + INT_TO_DWORD(stTimezoneInformation.iBias)*60;
SysTimeRtcConvertUtcToDate(dwTime,stSYSTIMEDATE);
sMinute := WORD_TO_STRING(stSYSTIMEDATE.wMinute);

Als Beispiel.
 
Vielen Dank.
Damit kann ich mir zumndest die Bestandteile auslesen die ich benötige.

dwTime: DWORD;
udiDummy: RTS_IEC_RESULT;
stTimezoneInformation: TimezoneInformation;
stSYSTIMEDATE: systimedate;
sMinute: STRING;
sSecond: STRING;

dwTime := SysTimeRtcGet(udiDummy);
SysTimeRtcGetTimezone(stTimezoneInformation);
dwTime := dwTime + INT_TO_DWORD(stTimezoneInformation.iBias)*60;
SysTimeRtcConvertUtcToDate(dwTime,stSYSTIMEDATE);
sMinute := WORD_TO_STRING(stSYSTIMEDATE.wMinute);
sSecond := WORD_TO_STRING(stSYSTIMEDATE.wSecond);

Jetzt belibt nur noch eine Frage offen:
Bin ich Beispielsweise bei 5 Sekunden, zeigt der String ja nur 5 an. Um die Uhrzeit zusammenzusetzen müsste der String ja immer zwei Elemente enthalten, also 05 da stehen.
Ist dies mit einer einfachen Formation machbar?
 
Zuletzt bearbeitet:
Sollte auch so gehen:
Code:
sMinute := RIGHT(WORD_TO_STRING(stSYSTIMEDATE.wMinute + 100),2);
sSecond := RIGHT(WORD_TO_STRING(stSYSTIMEDATE.wSecond + 100),2);

Harald
 
Zurück
Oben