SUBROUTINE_BLOCK PID计算:SBR12
TITLE=
VAR_INPUT
P_M:BOOL;
Kc:INT;
Ts:INT; // time of collect ; unit: second
Ti:INT; // time of intrgal ; unit:minute
Td:INT;
Sv:REAL; // set value
Pv:REAL;
END_VAR
VAR_IN_OUT
Mx:REAL; // last p of intrgal,need give 0 first
Pv_1:REAL;
END_VAR
VAR_OUTPUT
O_value:INT; // out value need give 0 first
END_VAR
VAR
Kc_r:REAL;
Ts_r:REAL;
Ti_r:REAL;
Td_r:REAL;
MPn:REAL;
MIn:REAL;
MDn:REAL;
END_VAR
BEGIN
Network 1
LD SM0.0
ITD LW1, AC0
DTR AC0, LD27
ITD LW3, AC0
DTR AC0, LD31
ITD LW5, AC0
DTR AC0, LD35
ITD LW7, AC0
DTR AC0, LD39
Network 2
// calculate MPn
LD SM0.0
MOVR LD13, LD43
-R LD9, LD43
*R LD27, LD43
A L0.0
*R -1.0, LD43
Network 3
// calculate MIn
LD SM0.0
*R 60.0, LD35
MOVR LD31, AC0
*R LD43, AC0
/R LD35, AC0
MOVR LD17, LD47
+R AC0, LD47
MOVR LD47, LD17
Network 4
// calculate MDn
LD SM0.0
MOVR LD13, LD51
-R LD21, LD51
MOVR LD13, LD21
*R LD27, LD51
*R LD39, LD51
/R LD31, LD51
Network 5
// calculate Mn
LD SM0.0
MOVR LD43, AC1
+R LD47, AC1
+R LD51, AC1
ROUND AC1, AC1
DTI AC1, LW25
Network 6
LD SM0.0
LPS
AW>= LW25, 32000
MOVW 32000, LW25
LPP
AW<= LW25, 0
MOVW 0, LW25
END_SUBROUTINE_BLOCK