FUNCTION_BLOCK "Drehzahlerrechnung"
TITLE =
VERSION : 0.1
VAR_INPUT
Motor_Ein : BOOL ;
Zykluszeit : INT ;
Drehzahlsensor : BOOL ;
END_VAR
VAR_OUTPUT
Zeit_fuer_Umdrehung : REAL ;
Momentandrehzahl : INT ;
END_VAR
VAR
Zwischenspeicher : INT ;
Vergleichswert : REAL ;
unterer_Schaltpunkt : REAL ;
oberer_Schaltpunkt : REAL ;
Flankenmerker : BOOL ;
Zeit_f_Umdrehung : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =Stoppen der Zeit für eine Umdrehung
U #Motor_Ein;
SPBN M002;
//Aufaddieren der Zykluszeit von 0b1 zum erhalten der Zeit für eine halbe Umdrehung in ms
L #Zykluszeit;
L #Zwischenspeicher;
+I ;
T #Zwischenspeicher;
//Bedingung für weiteren Verlauf
UN #Drehzahlsensor;
O #Flankenmerker;
SPB M001;
//Berechnen der Zeit für Umdrehung in s (Datentyp real)
L #Zwischenspeicher;
L 2;
*I ;
ITD ;
DTR ;
L 1.000000e+003;
/R ;
T #Zeit_f_Umdrehung;
//Schmitt-Trigger zum Stabilisieren aller folgenden Rechenwerte
L #Zeit_f_Umdrehung;
L 2.000000e-002;
+R ;
T #oberer_Schaltpunkt;
L #Zeit_f_Umdrehung;
L 2.000000e-002;
-R ;
T #unterer_Schaltpunkt;
U( ;
U( ;
L #oberer_Schaltpunkt;
L #Vergleichswert;
>R ;
) ;
NOT ;
O( ;
U( ;
L #unterer_Schaltpunkt;
L #Vergleichswert;
<R ;
) ;
NOT ;
) ;
) ;
SPBNB M004;
L #Zeit_f_Umdrehung;
T #Zeit_fuer_Umdrehung;
T #Vergleichswert;
//Rücksetzten des Zwischenspeichers
M004: L 0;
T #Zwischenspeicher;
M001: U "Sensor-Drehzahl";
= #Flankenmerker;
LOOP M003;
M002: L 0;
T #Zwischenspeicher;
T #Vergleichswert;
T #Zeit_fuer_Umdrehung;
T #Momentandrehzahl;
M003: NOP 0;
NETWORK
TITLE =Berechnen der Drehzahl
L 6.000000e+001;
L #Zeit_fuer_Umdrehung;
/R ;
RND ;
DTB ;
BTI ;
T #Momentandrehzahl;
END_FUNCTION_BLOCK