CoDeSys Wago Uhrzeit auslesen und eingeben

Münchnerjunge

Level-1
Beiträge
314
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag an alle Forumsteilnehmer,

wie der Titel schon erahnen lässt, möchte ich bei einer Wago Steuerung die Uhrzeit(Systemzeit) auslesen und ggf. auch verändern. Es handelt sich um eine Wago 750-881.

Da ich aus der Siemens-Welt komme und hier die handelüblichen Systembausteine verwende, habe ich nach dergleichem ausschau gehalten, bin aber nicht fündig geworden.

Kann mir jemand ad hoc weiterhelfen, oder handelt es sich hier um einen komplizierteren Vorgang?

Vielen und besten Dank im Voraus für alle hilfreichen Antworten!
 
Danke für die Hilfe!

In der Zwischenzeit bin ich auch selbst fündg geworden.

Für alle die später per Suche hierauf stoßen:

In der syslibrtc.lib die Bausteine SysRtcSetTime und SysRtcGetTime verwenden.
 
Hallo,
mit SysRtcGetTime kann ich nur die Lokalzeit vom Wago-Controller auslesen. Beim 750-8202 müsste auch die UTC vorhanden sein (zumindest im WBM). Diese kann ich aber damit nicht auslesen.

Ich habe versucht die UTC mit dem Baustein WagoConfigToolLIB mit dem Befehl get_clock_data time-utc auszulesen. Leider kann ich als Anfänger diesen Baustein nicht gut einbinden: Ich müsste den Funktionsbaustein regelmäßig mit einem Trigger beschalten, damit ich ständig aktuelle Werte erhalte. Wie mache ich das am sinnvollsten? Im Sekundentakt? Wie könnte ich abwechselnd die Lokalzeit und die UTC-Zeit aus dem Controller auslesen und in zwei Variablen schreiben?

Ich benötige die Lokalzeit und die UTC in DT für die Verwendung zur Sonnenstandsberechnung. Wie habt ihr das elegant gelöst ohne die SPS-Uhr auf UTC zu stellen und alles im Codesys zu berechnen? Danke.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo annD,
zunächst kann ich Dir mitteilen, dass Du für den FbSunset (Sonnenstandsberechnung) aus der Gebäude_allgemein.lib nur noch den Eingang dtUTC_Time belegen musst, der Eingang dtActualTime brauchst Du seit neuestem nicht mehr belegen.
Wie Du schon richtig geschrieben hast, kannst Du z.B. die UTC-Time beim PFC200 mit dem Baustein Fb_configToolFB (Bibliothek WagoConfigToolLIB.lib/WAGO) mit 'get_clock_data time-utc' am Eingang "stCallString" auslesen. Die jeweiligen Stringeinträge für "stCallString" stehen im Handbuch des Controllers. Das Auslesen der Zeit erfolgt über den Eingang "bEnable", diesen kannst Du über einen FbBlinker (Bibliothek Util.lib/CODESYS) antriggern. Das Zeitformat String müsstest du aber noch in das Format DT umwandeln.
Ein sehr einfacher Weg wäre wenn Du die LocalTime mit FbSysRTCGetTime (SysLibRTC.lib/WAGO) ausliest und 1 Stunde (für Deutschland) abziehst.
Ich hoffe dieses hilft dir weiter, schöne Grüße und viel Erfolg.
 
Zuletzt bearbeitet:
Hallo,
einen habe ich auch noch zum Thema CoDeSys, Wago und Uhrzeit. Die Uhrzeit aus einem Controller auszulesen, ist ja kein Problem.
Schreibe ich nun zeitgesteuerte Programme und möchte zunächst nur in der Simulation diese testen, habe ich keine Controllerzeit wohl aber kann ich über
%t %d.%m.%Y %X die PC-Zeit in der Visu anzuzeigen. Hat einer eine Idee, wie ich an diese Werte zur Verwendung in einem Programm komme, so dass ich z.B jede volle Sekunde, Minute oder Stunde etwas auslösen kann, wohlgemerkt in der Simulation.
Gruß
Chris
 
Hallo Termi,

wenn Du in einem Visu-Objekt unter Text die %t, gefolgt von einer bestimmten Folge von speziellen Platzhaltern eingibst, wird im Online Modus die Systemzeit ausgegeben, wo die CoDeSys aufgerufen wird. In den meisten Fällen die PC-Zeit.
Diese Anzeige der Systemzeit ist unabhängig vom Simulationsmodus und kann in diesem Zusammenhang nur in der HMI verwendet werden. Eine Übertragung in die Applikation ist nicht möglich. Um jedoch die Funktion Deines Projektes zu prüfen, kannst Du aus der standard.lib (im Bibliotheksverwalter auch ohne angelegtes Zielsystem verfügbar) den Funktionsbaustein „TON“ in Dein Projekt implementieren und nach Ablauf der „Timer“ zeitgesteuert Deine Programmteile aufrufen.

PROGRAM PLC_PRG

VAR
tTimer_1: TON;
tTimer_2: TON;
tTimer_3: TON;
END_VAR
tTimer_1(IN:= NOT tTimer_1.Q, PT:=t#1m);
tTimer_2(IN:= NOT tTimer_2.Q, PT:=t#60m);
tTimer_3(IN:= NOT tTimer_3.Q, PT:=t#24h);

IF (tTimer_1.Q) THEN
(*Programmausfuehrung_1*);
END_IF

IF (tTimer_2.Q) THEN
(*Programmausfuehrung_2*);
END_IF

IF (tTimer_3.Q) THEN
(*Programmausfuehrung_3*);
END_IF


Bitte beachte, dass dies nur eine Möglichkeit für einen allgemeinen Funktionstest im Simulationsmodus darstellen soll. Ein Ersatz für eine echte Uhrzeit ist dies nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte euch meine derzeitige Lösung zur Ermittlung der UTC-Zeit aus der vorhandenen Lokalzeit vom 750-8202 zeigen. Das Zurückrechnen ist ja nicht ohne weiteres möglich, weil man speziell zur Sommerzeitumstellung nicht weiß, ob man sich gerade vor oder nach der Umstellung befindet.

Wie schon früher geschrieben, verwende ich den getriggerten configToolFB für Lokalzeit und UTC-Zeit aus dem Controller. Da ich hier aber nur Momentanwerte bekomme, errechne ich nur die Zeitverschiebung und ziehe diese dann von der "echten" Lokalzeit aus SysRtcGetTime ab. Den Umweg über Integer gehe ich, weil configToolFB offensichtlich nicht immer gleichzeitig die Werte liefert. Hier habe ich noch nicht den "optimalen" Triggertakt gefunden. Über diese Umwege funktioniert es aber und schaltet auch sekundengenau auf Sommerzeit um (wie der Controller selbst).
Schöne Grüße, annD

configTOOL für UTC und Lokalzeit.jpg
 
Nochmals hallo in die Runde...
wenn ich das verstanden habe, suchst du nur eine Routine zur Sommer/Winterzeiterkennung ?
Ich habe mir dafür die Funktion DST aus Oscat importiert und die benötigt nur ein aktuelles Datum...

Das alles musste ich einbauen, weil mein BC9000 keine eigene Uhrzeit kennt.
Ich hole per sntp die Atomzeit und lasse dann einen internen RTC mitlaufen.
Alle Nase lang dann Syncronisieren und mit DST Sommer / Winter korrigieren.

Gerne stelle ich meinen gesamten Baustein hier rein, wenn gewünscht...

LG
Shrimps

Upps: Ist alles Twincat auf Basis Beckhoff, sollte aber von der Logik mit Wago konform sein...
 
Hallo Shrimps,
wenn man eine RTC in UTC mitlaufen hat, dann funktioniert es mit DST aus Oscat wunderbar. Das Problem entsteht nur, wenn man statt der UTC (die ja ohne Zeitumstellung durchläuft) eine Lokalzeit inkl. automatischer Zeitumstellung (z.B. RTC mit SNTP-Abgleich) zur Verfügung hat. DST brauch ja UTC am Eingang. Diese will man aber erst errechnen. Es ergibt aber nur eine geringe Ungenauigkeit rund um den Zeitpunkt der Sommer-/Winterzeitumstellung wenn man einfach die Lokalzeit für DST nimmt.
Lg annD
 
Zuviel Werbung?
-> Hier kostenlos registrieren
LocalTime mit FbSysRTCGetTime (SysLibRTC.lib/WAGO)...

Ich suche jetzt schon überall, vll sehe ich den Wald schon nicht mehr... bei Google, bei Wago und auf der CD von Wago. Es wäre super wenn mir einer sagen könnte, wo man diese SysLibRTC.lib downloaden kann.
Danke
 
Die von dir gesuchte Bibliothek sollte bei 64bit Systemen nach der Standardinstallation der Wago Codesys-Version im folgendem Verzeichnis zu finden sein:
c:\Programm Files [x86)\WAGO Software\CoDeSys V2.3\Targets\WAGO\Liberies\32_Bit\SysLibRtc.lib
 
Zurück
Oben