登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:【万泉河】PLC编程中的循环语法使用

点击:3277 回复:45

所有计算机编程语言,都有循环的功能。
PLC也是。
所以当然有循环功能。
不管什么CPU,什么编程语言,都有循环语法,可以用于实现循环。当然,很多时候,语言对循环支持的并不够理想。通常还要有指针,间接寻址等配合。所以在PLC编程中,属于难度比较高的题目。
附件 image.jpg
【图】
我知道,有一些人,对掌握循环编程语法很在意,也有一些人,对自己搞不好循环而很头疼。
今天分析一下这个问题。
首先,我们看循环编程方法的意义。几个方面:
1, 提高CPU的工作效率;
2, 降低程序代码数量,减少内存使用。
3, 降低编程时的工作量。
首先看1,你只要用类似FOR…NEXT的循环语句,对CPU的工作量其实是没有多少改善的。循环100次,和写100行,并没有区别。真的循环周期数太大的时候,一样要当心OB1循环超时。
关于2,减少代码数量需要有足够多的循环周期。如果只有5个对象或者更少,为了做循环,还要精心准备输入和输出接口,最终反而程序代码量多了。
关于3,编程的工作量,同时还有难度。都是要综合考虑的。如果编程工具可以支持与办公软件的数据对拷,先在办公软件中,通过数据整理技巧,把程序代码整理好,PLC环境中拿来直接使用,工作量有时候说不定更少,更快捷。
工业自动化系统中,通常设备数据量都很小。比如一个中型的控制系统,100台电机设备算比较多了。而值得通过循环来编程的,通常还是同一个类型的序列设备。那超过5台都很少见。
而如果要设计为循环编程方法,还需要在I/O排布开始就要充分考虑。比方说输入信号按顺序X.0, X.1, X.2,X.3,X.4,输出信号也要同样的按顺序排起来。
这就需要提前跟电气图纸设计者沟通好,也要跟盘柜工人配合。这些是不符合标准化模块化设计原则的。
尤其是,如果运行中,突然中间的某一个模块的点坏掉了,要把其中一个点挪到其他的地址,还做不到了。这比较麻烦。
回顾我自己十几年做过的PLC程序,真正用过循环编程的场合,少之又少。印象中比较深的,是处理仓库类数据,用到了循环。但因为循环量太大,尽管开始是用循环语句实现的,但后来发现导致CPU的循环周期过长,而因为也没有什么实时性要求,最后还是改为异步循环,借由OB1的循环周期来实现了。
所以,关于循环语法,我的原则是,少用循环。只要能不用循环,就尽量别用循环。
今天看了一篇文章,看到作者举的例子中,几乎每一个都用了循环。甚至感觉都在为了秀语法功底了。为了给一些新手初学者增强些信心,打消顾虑,不要被误导了,所以特意写文章提示一下。
附件 image.jpg
【图】
那篇文章名字为:《西门子最厉害的编程语言》,以及本文带图全文,可以围观,但千万别当作模板。
PLC编程,没那么复杂。也与标准化编程方法相差更远。
最后修改:2019/7/31 10:50:37
19-07-31 10:22
楼主是不是忘记上传图片了
19-07-31 10:36
看到这句:
如果运行中,突然中间的某一个模块的点坏掉了,要把其中一个点挪到其他的地址,还做不到了。这比较麻烦。
使用M的好处就体现出来了,全部使用M,如果某一个外部模块点坏掉了,只要改改M输出的流向就可以了。
Good Luck~
19-07-31 10:48
这个算不算M的好处,如果定义个DB,一样可以实现。其实,没有必须用M的地方,但有临时用M,很省事的时候。
19-07-31 14:49
请不要跟我继续讨论M的问题啦!那是10年前的常见做法。
你高兴就好。
19-07-31 15:37

引用 yanli7234 在 2019/7/31 14:49:51 发言【内容省略】

DB也是全局变量,真想不通为啥还会来点赞。
很多品牌的数据区并不能进行位寻址,而所有品牌的M都支持位寻址,所以,使用M地址在不同品牌之间进行程序移植会方便很多,用多了,会思考了,你就会超越品牌的限制,并不是一个品牌用的多水平就能提高的。
10年的水平没啥见长,蛮悲哀的。
19-07-31 16:19
静观此贴引发激烈讨论表情
19-07-31 16:39
,静观M撕逼。
老板看来,只求设备动作OK即可
19-07-31 16:59

引用 gk_0 在 2019/7/31 16:39:56 发言【内容省略】

不会引发激烈讨论的,本来循环指令使用的场合很少,也就一些常用的算法用到循环,例如前两天的冒泡排序,常用的其他PC高级语言用到循环的地方,在PLC中也会用到的。
唯一要注意的就是FOR循环在同一个扫描周期内走完的,如果需要计算的数据太多,需要强制复位WatchDog,这样可以避免扫描周期超时,西门子300系列可以通过SFC43来复位WatchDog,避免OB1超时。
而文章中的所谓输出输入接线要优先沟通好是没有必要的,现代程序需要外部IO分离,不能因为外部IO的变动而去影响程序的逻辑功能,所以通过全局变量赋值就可以解决了。
在他的回复中,洋洋得意的说这是10年前的做法…………你要超越品牌的框架才能提升水平,否则干到退休也就这样了。
Good Luck~
19-07-31 17:01
抓住M死磕楼主。
19-07-31 17:55

上一页下一页

工控新闻

更多新闻资讯