发布于 2009-09-22 12:42:37
0楼
大概看了一下你的程序,有2处明显错误:
1.既然你已经向右移位3次,那么最大值就不是32000而是4096,你应该处以4096得到0-1之间的数;
2.你程序中没有组态PID,也就是说你想手动控制计算PID值对吗?
既然手动计算那么下面指令又是什么意思呢?
LD SM0.0
LD PID_Fre_1BP:M11.5
O PID_Fre_2BP:M11.6
O PID_Fre_3BP:M11.7
O PID_Fre_4BP:M12.0
ALD
PID PID_0:VB500, 0
PID_x只有在组态好几路的情况下才能自动计算,手动计算你需要自己定义数据块,可以模仿系统组态PID自动生成的格式,当然可以自己随意设计
手动设计一个子程序实现下面的计算
Mn = Kc * en + KI * en + MX + KD * (en-en - 1) 这就是PID子程序完成的计算工作
设定一个定时中断 每100ms计算一下结果,写入到自己定义的PID回路表,其中100ms就是PID回路的控制周期,可以自己根据负载和现场的情况自己决定。