发布于 2013-02-27 18:48:01
2楼
S7-200自带的PID,实在不好用,存在的问题我就不多说了,搜索一下就知道了,我这里有个自己写的,仅供参考TITLE=PID 计算
Network 1 // 为保证可调节度,Kc,Ti, Td 均为整数,Kc要缩小100倍进行运算,Ti,Td 要缩小10倍进行运算
// PID 计算
LD SM0.0
LPS
-I LW2, LW0
ITD LW0, LD28
+D LD28, LD18 // PID_SumError += Error
//------------
AD>= LD18, 200000000
MOVD 200000000, LD18 // 溢出
LRD
AD<= LD18, -200000000
MOVD -200000000, LD18 // 溢出
LRD
//------------
MOVD LD28, LD24 // OutPut = Error ;
MOVD LD18, AC0
*D 10, AC0 //PID_SumError * 10
ITD LW6, AC1
/D AC1, AC0
+D AC0, LD24 //OutPut +=SumError /TI;
//------------
AD>= LD24, 20000000
MOVD 20000000, LD24 // 溢出
LRD
AD<= LD24, -20000000
MOVD -20000000, LD24 // 溢出
LRD
//------------
*D 10, LD24 // OutPut * 100 ;
MOVD LD28, AC0
-D LD14, AC0
ITD LW8, AC1
*D AC1, AC0
+D AC1, LD24 //OutPut +=(Error - LastError) * TD ;
///D 100, #TEMP_OUT:LD20 // OutPut / 100 ;
ITD LW4, AC0
*D AC0, LD24
/D 100, LD24 //OutPut = OutPut * KP;
/D 10, LD24 // OutPut / 100 ;
MOVD LD28, LD14 //LastError = Error;
DTI LD24, LW22
//超上限
ITD LW12, AC0
AD> LD24, AC0
MOVW LW12, LW22
-D LD28, LD18 //PID_SumError -= Error
LPP
//超下限
ITD LW10, AC0
AD< LD24, AC0
MOVW LW10, LW22
-D LD28, LD18 //PID_SumError -= Error
CRET