[FONT=Courier New]FUNCTION_BLOCK "Impulse"
TITLE =Variable Impulse je Stunde
VERSION : 0.1
VAR_INPUT
Start : BOOL ; // Ausgabe aktivieren
Anzahl : INT ;
Dauer : INT ; // in min
Synchron : BOOL ; // 1: Aus- = Ein-Anzahl; 0: Aus- = Ein-Anzahl - 1
END_VAR
VAR_OUTPUT
EIN : BOOL ;
AUS : BOOL ;
FAIL : BOOL ;
END_VAR
VAR
Timer_EIN : "TON";
Timer_AUS : "TON";
Timer_H : "TON";
END_VAR
VAR_TEMP
Pausen : INT ;
AUS_gesamt : INT ;
EIN_ms : TIME ;
AUS_ms : TIME ;
Start_Timer : BOOL ;
Start_Timer_H : BOOL ;
Start_Timer_EIN : BOOL ;
Start_Timer_AUS : BOOL ;
ET_Timer_H : TIME ;
ET_Timer_EIN : TIME ;
ET_Timer_AUS : TIME ;
END_VAR
BEGIN
NETWORK
TITLE =Fail
L #Anzahl;
L #Dauer;
*I ; // Gesamte EIN-Zeit
L 1;
<I ; // weniger als 1 min
O( ;
TAK ; // Ergebnis wieder in Akku 1 holen
L 60;
>=I ; // mehr oder gleich (keine Pausen mehr möglich!) als 60 min
) ;
= #FAIL;
-D ; // Differenz
DTR ; // in REAL wandeln
ABS ; // Absolutwert
RND ; // zurück in DINT
T #AUS_gesamt; // speichern
NETWORK
TITLE =EIN-Zeit
L #Dauer;
L L#60000; // ms je min
*D ;
T #EIN_ms;
NETWORK
TITLE =Anzahl AUS-Zeiten
L #Anzahl;
U #Synchron;
SPB TPau;
+ -1;
TPau: T #Pausen;
NETWORK
TITLE =AUS-Zeit
L #AUS_gesamt;
L L#60000; // ms je Minute
*D ;
L #Pausen;
/D ; // ms je Pause
T #AUS_ms;
NETWORK
TITLE =Timer starten?
U #Start;
UN #FAIL;
= #Start_Timer;
NETWORK
TITLE =Stunden-Timer starten
U #Start_Timer;
UN #Timer_H.Q;
= #Start_Timer_H;
NETWORK
TITLE =Stunden-Timer
CALL #Timer_H (
IN := #Start_Timer_H,
PT := T#1H,
ET := #ET_Timer_H);
NETWORK
TITLE =Timer_EIN starten
U #Start_Timer;
UN #Timer_H.Q;
UN #Timer_AUS.Q;
= #Start_Timer_EIN;
NETWORK
TITLE =Timer_EIN
CALL #Timer_EIN (
IN := #Start_Timer_EIN,
PT := #EIN_ms,
ET := #ET_Timer_EIN);
NETWORK
TITLE =Timer_AUS straten
U #Timer_EIN.Q;
= #Start_Timer_AUS;
NETWORK
TITLE =Timer_AUS
CALL #Timer_AUS (
IN := #Start_Timer_AUS,
PT := #AUS_ms,
ET := #ET_Timer_AUS);
NETWORK
TITLE =Ausgang EIN
U #Start_Timer;
UN #Timer_EIN.Q;
= #EIN;
NETWORK
TITLE =Ausgang AUS
U #Start_Timer;
U #Timer_EIN.Q;
= #AUS;
END_FUNCTION_BLOCK[/FONT]