菜鸟:
各位大侠,我在使用PID功能进行温度控制时,遇到需要实时改变PID的参数的问题。比如说,在温度的上升段,为了获得快速的升温速度,就需要大的加热功率,这时比例系数P就需要调得比较大。而在保温段,比例系数P就需要调低一些,否则温度的上下波动就会比较大。为了解决这个问题,我模仿日本岛电温控器的思路,开了四路PID控制盒,各自有不同的PID参数,分别负责不同的温度段的控制。这样虽然也能解决问题,但稍显繁琐。那么有没有办法利用程序的办法在线实时自动修改PID参数呢?
侠客:
1、记录你的温度控制阶段。
2、根据不同的阶段直接把你需要的pid参数赋值给pid功能块,(如果是用向导生成的pid功能,那么参数都是在v区的,直接修改v区的地址的值就行了。)
菜鸟:
谢谢1楼的奇侠老师,我按照你说的办法编写了一个简单的实验程序,通过分别接通I1.0和I1.1的确可以修改PID的参数,程序如下:
网络1
LD SM0.0
CALL PID0_INIT:SBR1, VW3000, VD960, AQW0
网络2
LD I1.0
MOVR 1.0, VD12
MOVR 10.0, VD20
MOVR 0.0, VD24
网络3
LD I1.1
MOVR 2.0, VD12
MOVR 20.0, VD20
MOVR 1.0, VD24
但有一点我还是不明白,当我切换I1.0和I1.1时,为什么可以在状态表区看到VD12(P参数)、VD20(I参数)、VD24(D参数)按照要求变化,而在数据块区,这些参数仍然是使用PID向导建立PID控制盒时输入的数据,没有变化,这是为什么,PID参数真的被改变了吗?
侠客:
你从哪看的?200的数据块区不能online。
你只有从状态表或程序状态监控看到的才是PLC中的实际数据。
你总不能让PLC的输入点状态改变你PC中的PLC程序文件吧
游民:
楼主的数据块是停机状态看的吧,如果想把数据块**保留,则需要启用数据**写入指令。
个人认为没有必要。
侠客:
200的数据块与300完全是两回事。300的数据块中的变量的值是可以用程序改写的。和200的V区差不多。
200的数据块只是用来给指定的地址赋初始值。在CPU运行用户程序时,200的数据块中的初始值是不变的。
菜鸟:
可能我没有说清楚,我用的PLC是224XP,切换I1.0和I1.1时,为什么可以在状态表区看到VD12(P参数)、VD20(I参数)、VD24(D参数)按照要求变化,而在数据块区,这些参数仍然是使用PID向导建立PID控制盒时输入的数据,没有变化,这是为什么,PID参数真的被改变了吗。因为我要用来实际控制现场的加热电源的,事关重大,必须搞清楚PID参数究竟被改变了没有?还请各位老师赐教。