Wecker bzw. Zeitschaltuhr mit Codesys Visualisierung

Begonnen von chekker91, 18. Januar 2017, 22:28:51

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

chekker91

Hallo Zusammen,

ich versuche schon länger einen FB zu finden der Eine in der Visu eingestellte Zeit mit der Tageszeit vergleicht und dann eine Funktion ausführt.
z.B. die Jalousien hochfährt.

Es soll so ähnlich wie auf dem Bild aussehen.

Hat jemand so was schon realisiert?

Hardware: RaspberryPi - Beckhoff EK1100 - DI/DO Klemmen


[gelöscht durch Administrator]

Blauprinz

Hallo chekker91,

ich habe solch eine Wochenplan-Lösung schon mehrmals realisiert.
Welche Steuerung und welche Codesys-Version verwendest du denn?
Es gibt eine SysRtc.lib, welche eine Funktion Namens "SysRtcGetTime" beinhaltet.
Die Funktion gibt eine DT-Variable aus, welche die aktuelle Uhrzeit/Datum deiner Steuerung wieder gibt.
Damit kannst du Zeit und Datum entsprechend in einem Syntax mit deinen Sollwerten vergleichen.

Gruß

Airuei

For these data, we think that it is good information to get more knowledge.

Fensinee

We are very pleased to recommend this to your friends.

Blauprinz

Hallo Zusammen,

auf Anfrage von Sven werde ich mich gerne zu diesem Thema äußern:

["...kannst du mir vielleicht eine kleines Beispiel geben, wie du den Vergleich machst und daraus eine Aktion wird?
Ich will in eine Ablaufsteuerung (Rapsberry SPS mit CODESYS) uhrzeitgesteuerte Elemente einbauen.
Das wäre sehr nett.
Vielen Dank für den Fall, dass Du mir helfen möchstest!
MfG
Sven
"]

@Sven, damit ich dir helfen kann benötige ich genauere Infos. Es führen schließlich viele Wege nach Rom.  ;)
Kannst du denn folgende Bibliothek in deiner Codesys-Umgebung finden: "SysRtc23" ?
Wenn nicht, dann müssten wir uns mit der "SysTimeRtc" beschäftigen.

Gruß

Blauprinz

Hallo Sven,

hier also mal ein abgespecktes Beispiel für die SysRtc23.lib:

Deklarations-Editor:


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:


//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ß

Svenner

Hallo Rick,

jetzt hat es vor ein paar Tagen mit der Aktivierung geklappt. Ich habe auch jetzt erst Deine Beispiele gesehen. Danke dafür. :D Ich werde es die Tage mal ausprobieren und melde mich dann wieder.
LG
Sven

Svenner

Die weitere Bearbeitung meines Projekts hat nun doch ein paar Tage länger gedauert  ::) und fertig bin ich auch noch nicht.  ;D Aber dein Beitrag hat mir sehr geholfen. Vielen Dank! :)