发表于:2007/5/7 12:27:00
#0楼
有一个关于PID的程序,为什么在S7-200仿真软件上调试老是出错,程序如下
主程序:
LD SM0.1
CALL SBR_0
子程序:
LD SM0.0
MOVR 0.75, VD104 // 载入循环定点 = 注满75%
MOVR 0.25, VD112 // 载入循环增益 = 0.25
MOVR 0.2, VD116 // 载入循环采样时间 = 0.1秒
MOVR 30.0, VD120 // 载入积分时间 = 30分钟
MOVR 0.0, VD124 // 设置无微分计算
MOVB 200, SMB34 // 为定时中断INT_0
// 设置定时间隔(100毫秒)。
ATCH INT_0, 10 // 设置定时中断,激活
// PID执行。
ENI // 启用中断
中断程序:
// 将PV标度为标准化实数
LD SM0.0
MOVW AIW0, AC0 // 将整数数值转换为双整数
DTR AC0, AC0 // 将双整数转换为实数
/R 32000.0, AC0 // 使数值正常化
MOVR AC0, VD100 // 将正常化PV存储在循环表中
LD I0.0
PID VB100, 0
LD SM0.0
MOVR VD108, AC0 // 将循环输出移至累加器
*R 32000.0, AC0 // 标度累加器中的数值
ROUND AC0, AC0 // 将实数转换为双整数
DTI AC0, AC0 // 将双整数转换为整数
MOVW AC0, AQW0 // 将数值写入模拟输出
按上边的程序在仿真软件上调试时,PID VB100, 0显示出错误,不知道为什么,哪位好心人可以帮忙啊!非常的感谢,好心人一生平安!
主程序:
LD SM0.1
CALL SBR_0
子程序:
LD SM0.0
MOVR 0.75, VD104 // 载入循环定点 = 注满75%
MOVR 0.25, VD112 // 载入循环增益 = 0.25
MOVR 0.2, VD116 // 载入循环采样时间 = 0.1秒
MOVR 30.0, VD120 // 载入积分时间 = 30分钟
MOVR 0.0, VD124 // 设置无微分计算
MOVB 200, SMB34 // 为定时中断INT_0
// 设置定时间隔(100毫秒)。
ATCH INT_0, 10 // 设置定时中断,激活
// PID执行。
ENI // 启用中断
中断程序:
// 将PV标度为标准化实数
LD SM0.0
MOVW AIW0, AC0 // 将整数数值转换为双整数
DTR AC0, AC0 // 将双整数转换为实数
/R 32000.0, AC0 // 使数值正常化
MOVR AC0, VD100 // 将正常化PV存储在循环表中
LD I0.0
PID VB100, 0
LD SM0.0
MOVR VD108, AC0 // 将循环输出移至累加器
*R 32000.0, AC0 // 标度累加器中的数值
ROUND AC0, AC0 // 将实数转换为双整数
DTI AC0, AC0 // 将双整数转换为整数
MOVW AC0, AQW0 // 将数值写入模拟输出
按上边的程序在仿真软件上调试时,PID VB100, 0显示出错误,不知道为什么,哪位好心人可以帮忙啊!非常的感谢,好心人一生平安!