More Information

Autor Thema: FB für Systemzeiten  (Gelesen 1553 mal)

Offline radar17892

  • Full Member
  • ***
  • Beiträge: 430
  • Think easy!
FB für Systemzeiten
« am: Januar 01, 2015, 13:21:37 Nachmittag »
Hallo,
hier ein Baustein den ich schon mehrfach verwendete, um Programmweite Systemzeiten zu generieren.
Er sollte möglichst am Anfang der Haupttask aufgerufen werden.
Der FB stellt zwei Blinker 1+5Hz, ein 1Hz und Tagesbeginn Triggersignal bereit und die TIME OF DAY, die täglich mit der System RTC syncronisiert wird.
Benötigte Bibliotheken sind: syslibrtc.lib und util.lib
Einfach einen neuen FB in ST erstellen, Deklarations- und Programmteil hineinkopieren.

FUNCTION_BLOCK Zeitsystem
(*
##################################################################################
Programmbeschreibung:
Erzeugung von Systemzeiten und Syncronisierung mit Systemuhr
benötigte LIB: Syslibrtc, util
##################################################################################
Änderungsindex
Name:TL Datum: 30.12.13 Grund:   neu
Name:TL Datum: 20.06.15 Grund:   Anlaufmerker hinzugefügt
##################################################################################
*)
VAR_INPUT
END_VAR
VAR_OUTPUT
BL_1: BOOL; (*Systemblinkausgang 1Hz*)
BL_5: BOOL; (*Systemblinkausgang 5Hz*)
TR_1: BOOL; (*Systemtriggerausgang 1Hz*)
TR_Tag: BOOL; (*Systemtrigger Tagesbeginn 0:00Uhr zB für tägliche Speicheraugaben*)
Syszeit: TOD; (*aktuelle Tageszeit*)
Anlauf: BOOL; (*Anlauf ist nur im 1.Zykl =1*)
END_VAR
VAR
T_sync: TON; (*Uhrzeitsyncronisationstimer*)
Sysblinker1: BLINK; (*Systemblinker 1Hz*)
Sysblinker5: BLINK; (*Systemblinker 5Hz*)
TR_Tag_beginnt: R_TRIG; (*Flankentrigger Tagesbeginn 0:00Uhr*)
Trigger_1: R_TRIG; (*Flankentrigger 1Hz*)
HM1: BOOL := FALSE; (*Hilfsmerker für Anlauf*)
END_VAR
VAR CONSTANT
Synctime: TIME := t#24h; (*Syncronisationszeit mit RTC*)
Blinkzeit1: TIME := t#500ms; (*1Hz Blinkzeit*)
Blinkzeit2: TIME := t#100ms; (*5Hz Blinkzeit*)
END_VAR

####################################
(*Systemanlauf*)
Anlauf:= NOT HM1;
IF NOT HM1
THEN HM1:= TRUE;
END_IF
(*Zeitsyncronisation*)
T_sync(IN:= NOT T_sync.Q, PT:= Synctime, Q=> , ET=> );
Syszeit:= DT_TO_TOD (SysRtcGetTime(T_sync.Q));
(*Trigger Tagesbeginn *)
TR_Tag_beginnt(CLK:= (Syszeit < TOD#00:00:01 ), Q=> TR_Tag);
(*Systemzeitsignale erzeugen*)
Sysblinker1(ENABLE:=TRUE , TIMELOW:= Blinkzeit1, TIMEHIGH:= Blinkzeit1, OUT=> BL_1);
Sysblinker5(ENABLE:= TRUE, TIMELOW:= Blinkzeit2, TIMEHIGH:= Blinkzeit2, OUT=> BL_5);
Trigger_1(CLK:= Sysblinker1.OUT, Q=> TR_1);


have a lot of fun
« Letzte Änderung: September 01, 2015, 23:57:36 Nachmittag von radar17892 »
Weil Einfach einfach Einfach ist!