FUNCTION "PG_Mng" : VOID
TITLE ="Pulse generator management"
AUTHOR : BenBen
VERSION : 1.1
VAR_INPUT
PG : INT ; //Pulse generator value
NbTurn : INT ; //Number of turn
END_VAR
VAR_OUTPUT
Pos : REAL ; //Rotor position (?
Angle : REAL ; //Angle executed during cycle
Fw : BOOL ; //Forward rotation
Bw : BOOL ; //Backward rotation
Stop : BOOL ; //Stop
END_VAR
VAR_IN_OUT
Pos_Last : REAL ; //Last rotor position
NbTurn_Last : INT ; //last number of turn
END_VAR
VAR_TEMP
PG_real : REAL ; //Pulse generator value
Delta_Turn : REAL ; //Number of turn executed
Delta_Pos : REAL ; //Difference position beetween 2 cycle
END_VAR
BEGIN
NETWORK
TITLE =Integer --> Real
L #PG;
ITD ;
DTR ;
T #PG_real;
NETWORK
TITLE =Position rotor
L #PG;
L 0;
>=I ;
JC jp1;
// If 0 < Input < -32768
CALL "Scale_r" (
X := #PG_real,
Xmin := -3.276800e+004,
Xmax := 0.000000e+000,
Ymin := 1.800000e+002,
Ymax := 3.600000e+002,
Y := #Pos);
NOP 0;
JU jp2;
// If 0 < Input < 32767
jp1: CALL "Scale_r" (
X := #PG_real,
Xmin := 0.000000e+000,
Xmax := 3.276700e+004,
Ymin := 0.000000e+000,
Ymax := 1.800000e+002,
Y := #Pos);
NOP 0;
jp2: NOP 0;
NETWORK
TITLE =Number of turn executed
L #NbTurn;
L #NbTurn_Last;
-I ;
ITD ;
DTR ;
T #Delta_Turn;
L -1.000000e+004;
JC jp3; // If rotation fw et bascule de 32767 --> 0 turn
L #Delta_Turn;
L 1.000000e+004;
>R ;
JC jp4; // If rotation bw et bascule de -32768 --> 0 turn
JU jp5;
jp3: L #Delta_Turn;
L 3.276700e+004;
+R ;
T #Delta_Turn;
JU jp5;
jp4: L #Delta_Turn;
L -3.276800e+004;
+R ;
T #Delta_Turn;
jp5: NOP 0;
NETWORK
TITLE =Angle executed during cycle
L #Pos;
L #Pos_Last;
-R ;
T #Delta_Pos;
L 3.600000e+002;
L #Delta_Turn;
*R ;
L #Delta_Pos;
+R ;
T #Angle;
NETWORK
TITLE =Test sens rotation
L #Angle;
L 2.000000e+000;
>R ;
JC jp6;
L #Angle;
L -2.000000e+000;
JC jp7;
R #Fw;
R #Bw;
S #Stop;
JU jp8;
jp6: R #Stop;
R #Bw;
S #Fw;
JU jp8;
jp7: R #Stop;
R #Fw;
S #Bw;
jp8: NOP 0;
NETWORK
TITLE =Information copie
L #NbTurn;
T #NbTurn_Last;
L #Pos;
T #Pos_Last;
END_FUNCTION