plc编程是基于硬件系统的,不同的硬件系统有不同的处理行为方式,编程不严谨就会造成结果的偏差,所以编程一定要规范化,规范化的好处就是可以避免这些偏差,同时编程的规范化也是标准化的一部分。
很久以前遇到一个问题,用户在ob1中调用pid程序块,调试完成后效果良好,后来更换新的cpu后,发现pid程序块不能正常工作了,反而说新的cpu有问题,这就是一个不规范编程的案例。pid功能块需要在确定的循环中断中调用,并在参数cycle中赋值循环中断的中断周期,这样才能计算积分和微分的正确时间,而ob1的优先级低,容易被中断,扫描时间不确定,pid的参数是测试的结果,而非正确的过程参数,又因为新的cpu比旧的cpu运算速度快将近10倍,所以pid程序块就不能正确工作了。
还有一些功能是与通信有关,例如移植s7-300的程序到s7-1500中,在s7-300中运行好好的,移植后突然发现在hmi上不能改写变量的值了,程序大概是这样的,在fb1中有一个in/out 参数“test”,下面是简单的源程序仿制,赋值“test”后,经过运算再次传递到“test”中,wait指令表示后面程序执行的时间,如图1所示。
plc cpu1513
然后在ob1中调用,赋值mw2,如图2所示。
在hmi或者tia 博途监控表改变mw2的值,有时连续多次才能修改成功,大家想一想这是什么原因?