发表于:2007-12-01 22:15:00
2楼
SUBROUTINE_BLOCK PID0_INIT:SBR1
TITLE=此 POU 由 S7-200 指令向导的 PID 功能创建。
// 要在用户程序中使用此配置,请在每个扫描周期内使用 SM0.0 在主程序块中调用此子程序。此代码配置 PID 0。在 DB1 中可以找到从 VB0 开始的 PID 回路变量表。此子程序初始化 PID 控制逻辑使用的变量,并启动 PID 中断程序 "PID_EXE"。PID 中断程序会根据 PID 采样时间被周期性调用。如需 PID 指令的完整说明,请参见《S7-200 系统手册》。注意:当 PID 位于手动模式时,输出应该通过写入一个标准化的数值(0.00 至 1.00)至手动输出参数来控制,而不是直接改动输出。这将使 PID 返回至自动模式时保持输出无扰动。
VAR_INPUT
PV_I:INT; // 过程变量输入:范围从 11111 至 22222
Setpoint_R:REAL; // 给定值输入:范围从 1.1 至 11.1
END_VAR
VAR_OUTPUT
Output:INT; // PID 输出:范围从 10101 至 20202
END_VAR
VAR
Tmp_DI:DWORD;
Tmp_R:REAL;
END_VAR
BEGIN
Network 1
// 通电第一个扫描周期不跳转,以后均跳转定时中断设置
LDN SM0.1
JMP 0
Network 2 // 每隔100毫秒中断INT1一次,处理PID指令
LD SM0.0
MOVB 100, SMB34 //PID中断子程序的装载时间
ATCH INT1, 10 //设置一个中断,调用PID执行
ENI
Network 3
LD SM0.1
MOVW +0, VW80
NOT
PID VB0, 0
Network 4
LBL 0
Network 5
LD SM0.0
LPS
-R 1.1, LD2
/R 10.0, LD2
AR< 1.0, LD2
MOVR 1.0, LD2
LRD
AR> 0.0, LD2
MOVR 0.0, LD2
LPP
MOVR LD2, VD4
Network 6
LD SM0.0
LPS
ITD LW0, LD8
-D +11111, LD8
DTR LD8, LD12
/R 11111.0, LD12
AR< 1.0, LD12
MOVR 1.0, LD12
LRD
AR> 0.0, LD12
MOVR 0.0, LD12
LPP
MOVR LD12, VD0
Network 7
LD SM0.0
MOVR VD8, LD12
*R 10101.0, LD12
ROUND LD12, LD8
+D +10101, LD8
DTI LD8, LW6
Network 8
LDN SM0.0
BMB VB0, VB0, 120
END_SUBROUTINE_BLOCK