我发表这样文章的本意,就是建议 PLC 的初学者和刚入门的工程师,不要把过多精力放在研
究循环上,也不要在程序中有意或者无意地使用过多的循环语句,以使程序变得难读和不容
易调试。
比如在 TIA PORTAL 中,如果程序在线监控, 那么循环的这一段代码是无法实时看到数据运
行值的。 所以要诊断代码逻辑是否有错误,是否在按照预想的轨道运行, 还需要另外额外
的工作。
这些额外工作都是非常麻烦,且影响运行效果。 比如虽然现在 PORTAL 中可以调试使用断
点,可以单步调试,但这个时候 OB1 循环也被迫中断了,程序的基本控制功能也都停止了。
所以 PLC 工程师通常是不做这种单步调试的。
然而我这样的宣扬并没有得到如期的效果。 很多工程师仍然执迷不悟沉迷于程序中用循环
方法解决问题。甚至很多简单问题的解决都要不惜耗费些弯路,做各种前处理后处理,只为
了循环这一下的爽 5 秒
但也仍然没用。很多同行可能摸到编程的机会太少, 太多的绘图,选型,设计,甚至接线
工作耗费了他们太多的体力,导致对编程机会异常珍惜,对少有的能大展技能的机会不愿意
放过。所以还是普遍表现出对循环语法的热爱。
所以,我总结了一下在高级语言编程中需要用到循环的情形,请工控工程师们可以同比对照
参考。
在高级语言中,编程需要用到循环的场景通常有 2 种。
其中第一种是数据量异常巨大,比如要从数据库中抓取 4 万条数据进行统计处理。 那么显
然,写 4 万句指令是不可理喻的。 必须对数据的输入输出做出严谨的分析,找到数据的共
同特征点和变化量,用循环语句来搞定。
甚至,如果索引数据复杂多样到连共同的特征值都找不到,就是一堆乱麻数据, 那也宁愿
先把这些索引数据保存为文件或者数据库,然后通过数据库方法查询得到,然后再进行统计
计算。总之,无论如何打破头我也要使用循环实现。
而第二种是在编程的时候逻辑处理的步数不确定。比如配方数量是在运行中才人工输入的。
就只能用循环了。 还有是挑选特定值,比如运行数组中挑选匹配值的算法,当条件匹配后,
就可以跳出循环了,逻辑的处理步数也同样是在编程时不晓得的。那么这些都需要用到循环。
而除此之外,即便是在高级语言的编程中,都很少再有用到循环语法的情况了。
更可想而知,对于 PLC 系统这样的环境, 能有多少需要循环才能搞定的算法了。
然而我在群交流时提出这样的比较指标之后, 还有人表示不服,不能理解。 反问我,如果
20 套同样的设备,也不要做循环,也罗列调用执行吗?(言外之意,不用循环用罗列的方
法是不是太愚蠢了)
答案是当然咯!我 80 例子中,80 个工位都罗列出来的,区区 20 更何足挂齿呢!
看起来这不用循环把一大票人憋得那是相当难受啊!
这样吧,我来给个出路。
眼光放高一点, 你的工作任务不是一台设备,而是一系列参数不同的设备。 你需要做的不
仅仅是这台设备的 PLC 程序,而是要做一台能生成一系列不同参数设备的 PLC 程序的电脑端
的程序。
即, 你需要的是 PLC 程序+生成 PLC 程序的电脑上的程序,我们不妨叫它 PLC++程序。 而
且最好的目标是,这套电脑上的程序的使用者也不是你自己,而是你简单培训后输出的对象,
比如设备车间的工人。
公司接到订单以后,根据合同设备配置不同,参数数值也当然不同。那么车间工人除了组装
盘柜之外, 还把这些数值输入到你给他的电脑程序的界面,输入完成后,按下“生成 PLC
程序”按钮,则程序自动生成, 生成后再打开编程软件下载到 PLC,或者更自动点,你的
程序都可以驱动指挥 TIA PORTAL 自动将生成的 PLC 程序下载到 PLC 中,HMI 画面程序下载
到触摸屏中。
这样, 在你和工人都不需要见到程序代码的情况下,程序就已经成功下载到设备中,设备
就已经有了灵魂,就已经具备开机运行的条件了。
所以,如果你有天高的技能这回就有了施展的平台了。在这套生成程序的 PLC++程序里,你
随便怎么折腾都可以,绝对不会有人指责你程序写的好坏。 当然我猜, 循环一定是少不了
的。 因为比如上一个系统 80 个模拟量+20 个伺服包含了自动逻辑, 而下一个系统要你做
出 79 个模拟量+15 台伺服的自动控制,这套 PLC++程序一定相当复杂,没有循环语法是万万
达不到的。
当然,也仍然符合我对使用循环语法的场景的论断:循环次数不确定。
那些循环语法的信徒们终于有了释放的出口了。
然后, 你们自然也会比较得出生成 PLC 程序用罗列还是循环更方便的结论了
0111 【万泉河】PLC编程给循环指令一个出口.pdf