中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

PLC论坛

抖音 西门子减速电机 德嘉 台达 英威腾 泓格论坛 西门子 我和LOGO!有个约会 FLIR红外热像论坛 【有奖活动】英威腾 “Ni美国国家仪器 “PLC发展趋势大讨论”活动圆满结束 cc-link图文征集活动 西门子SMART LINE V3
工控论坛首页 PLC论坛 → 浏览主题: 【万泉河】PLC编程中的循环语法使用
发表新帖 回复该主题
回帖:42个,阅读:870 [上一页] [1] [2] [3] [4] [5] [下一页]
* 帖子主题:

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

分享到
736
万泉河.
文章数:68
年度积分:216
历史总积分:736
注册时间:2009/12/4
发站内信
发表于:2019/7/31 10:22:57
#0楼
所有计算机编程语言,都有循环的功能。

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编程,没那么复杂。也与标准化编程方法相差更远。
[此贴子已经被jint于2019/7/31 10:50:37编辑过]
23916
YXBK 版主
文章数:11230
年度积分:2904
历史总积分:23916
注册时间:2007/4/14
发站内信
2015论坛优秀版主
2015春节活动
2013论坛优秀版主
2012论坛优秀版主
发表于:2019/7/31 10:36:57
#1楼
楼主是不是忘记上传图片了
大家一起学习
27151
cvlsam 版主
文章数:10277
年度积分:1405
历史总积分:27151
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/7/31 10:48:14
#2楼
看到这句:
如果运行中,突然中间的某一个模块的点坏掉了,要把其中一个点挪到其他的地址,还做不到了。这比较麻烦。

使用M的好处就体现出来了,全部使用M,如果某一个外部模块点坏掉了,只要改改M输出的流向就可以了。

Good Luck~
9839
yanli7234 版主
文章数:2721
年度积分:1037
历史总积分:9839
注册时间:2002/11/8
发站内信
2011论坛贡献奖
发表于:2019/7/31 14:49:51
#3楼
回复 #2楼 cvlsam
这个算不算M的好处,如果定义个DB,一样可以实现。其实,没有必须用M的地方,但有临时用M,很省事的时候。
国人当自强,共同努力,抵制日货。
736
万泉河.
文章数:68
年度积分:216
历史总积分:736
注册时间:2009/12/4
发站内信
发表于:2019/7/31 15:37:52
#4楼
回复 #2楼 cvlsam
请不要跟我继续讨论M的问题啦!那是10年前的常见做法。

你高兴就好。
6648
fujifa
文章数:2460
年度积分:333
历史总积分:6648
注册时间:2014/2/10
发站内信
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
发表于:2019/7/31 16:19:45
#5楼
以下是引用yanli72342019/7/31 14:49:51的发言:
这个算不算M的好处,如果定义个DB,一样可以实现。其实,没有必须用M的地方,但有临时用M,很省事的时候。
DB也是全局变量,真想不通为啥还会来点赞。

很多品牌的数据区并不能进行位寻址,而所有品牌的M都支持位寻址,所以,使用M地址在不同品牌之间进行程序移植会方便很多,用多了,会思考了,你就会超越品牌的限制,并不是一个品牌用的多水平就能提高的。

10年的水平没啥见长,蛮悲哀的。
此帖发自手机工控论坛
精通富士POD,富士PLC的编程
有问题可以直接电邮:FUJIFA@yeah.net
16827
gk_0 版主
文章数:6786
年度积分:1874
历史总积分:16827
注册时间:2013/9/9
发站内信
2018论坛贡献奖
2017论坛贡献奖
2017国庆活动(二)
2016论坛贡献奖
2016国庆活动(三)
英威腾变频器(一)
S7-200 SMART(一)
寻找英威腾(三)
英威腾PLC体验(一)
2015春节活动
2013辞旧迎新
2013辞旧迎新
2013国庆活动
发表于:2019/7/31 16:39:56
#6楼
静观此贴引发激烈讨论表情
不被人嘲笑的梦想,就不值得去追求!
8908
bnnyygy
文章数:1703
年度积分:1028
历史总积分:8908
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2019/7/31 16:59:27
#7楼
,静观M撕逼。

老板看来,只求设备动作OK即可
27151
cvlsam 版主
文章数:10277
年度积分:1405
历史总积分:27151
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/7/31 17:01:42
#8楼
以下是引用gk_02019/7/31 16:39:56的发言:
静观此贴引发激烈讨论表情

不会引发激烈讨论的,本来循环指令使用的场合很少,也就一些常用的算法用到循环,例如前两天的冒泡排序,常用的其他PC高级语言用到循环的地方,在PLC中也会用到的。

唯一要注意的就是FOR循环在同一个扫描周期内走完的,如果需要计算的数据太多,需要强制复位WatchDog,这样可以避免扫描周期超时,西门子300系列可以通过SFC43来复位WatchDog,避免OB1超时。

而文章中的所谓输出输入接线要优先沟通好是没有必要的,现代程序需要外部IO分离,不能因为外部IO的变动而去影响程序的逻辑功能,所以通过全局变量赋值就可以解决了。

在他的回复中,洋洋得意的说这是10年前的做法…………你要超越品牌的框架才能提升水平,否则干到退休也就这样了。


Good Luck~
4173
zhengchang
文章数:1347
年度积分:644
历史总积分:4173
注册时间:2011/5/6
发站内信
发表于:2019/7/31 17:55:34
#9楼
抓住M死磕楼主。
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2019 Gkong.com, All Rights Reserved

546