发布于 2005-06-02 15:31:42
0楼
这是我原来做恒压供水时自己写的增量式的PI控制(没有用微分)
INTERRUPT_BLOCK PI:INT0
TITLE=VD2000 过程变量 VD2004 过程前项 VD2008 设定值 VD2012 比例系数 VD2016 积分系数 VD2020 输出
BEGIN
Network 1
// 滤波
LD SM0.0
MOVD 16#080007EE, LD0
MOVD +0, LD4
MOVW +0, LW8
Network 2
LD SM0.0
FOR LW12, +1, +3
Network 3
LD SM0.0
MOVD LD0, LD14
+D +2, LD0
MOVW *LD0, *LD14
MOVW *LD0, LW10
+D LD8, LD4
Network 4
NEXT
Network 5
// 采样
LD SM0.0
MOVW AIW0, *LD0
MOVW *LD0, LW10
+D LD8, LD4
SRD LD4, 2
DTR LD4, VD2000 //过程变量
MOVR VD2008, LD18
-R VD2000, LD18 //偏差
MOVR LD18, VD2040
Network 6
// 手动
LDN I1.5
LDN Q0.0
AN Q0.2
AN Q0.4
AN Q0.6
OLD
MOVR 19200.0, VD2020
CRETI
Network 7
// 死区
LDR> LD18, -200.0
AR< LD18, 200.0
JMP 0
Network 8
// PI
LD SM0.0
-R VD2000, VD2004
*R VD2012, VD2004
+R VD2004, VD2020 //+P
*R VD2016, LD18
+R LD18, VD2020 //+I
MOVR VD2000, VD2004 //过程前值
Network 9
// 上限
LDR> VD2020, 32000.0
MOVR 32000.0, VD2020
Network 10
// 下限
LDR< VD2020, 19200.0
MOVR 19200.0, VD2020
Network 11
// 标准化
LD SM0.0
ROUND VD2020, LD22
DTI LD22, VW2024
Network 12
LBL 0
Network 13
// 输出
LD SM0.0
MOVW VW2024, AQW0
Network 14
END_INTERRUPT_BLOCK
I can do it