查看: 13204|回复: 84
收起左侧

[资料分享] 【资料分享】PLC的“扫描周期”以及ST指令的特性

邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
扫描周期大家应该都知道,是PLC完整扫描一遍程序的时间,PLC就像一个读报纸的
人,而报纸上的内容就是程序,读完一次报纸的时间就是一个扫描周期。
image.png
这个扫描周期可以是指定一个时间,也可以不指定,指定时间时无论程序有多长,PLC
都在设定的时间内全部读完,如果实在读不完,PLC就会报警,说明PLC的性能不够需
要更换。时间不指定时PLC按照一个固定的速度去读程序,程序多时间长些,程序少时
间就短。
但这并不是今天我们要说的重点,重点是如何从一个扫描周期的角度去看程序。
一个扫描周期下的IF指令
习惯于梯形图编程的人可能不太会去关注一个扫描周期下的程序与连续运行的程序有
何区别,因为梯形图最开始就是用来代替继电器的,采用的也是硬件的逻辑思维,但
如果想要学习ST,你一定要知道程序在微观下与宏观下的区别,以及不同指令如何运
行。
举个例子,判断下面这两段程序有没有区别:
image.png
从宏观上来看,这两段程序的效果都是iNumber变量+1后持续+10,iNumber的值一直在
增长。
但是从一个扫描周期上来看,结果就完全不一样了,为了看到一个扫描周期下程序的
运行结果,我们给两段程序加上限制条件,保证程序执行一个扫描周期:
image.png
image.png
注:iNumber的初始值=0。
可以看到,执行一个扫描周期以后,两段程序给出两个不同的结果,导致这个结果的
原因是IF指令的运行特性导致的,一个IF语句在一个扫描周期内最多只执行其中的一
个条件。
在程序1中,两个判断条件是由两个IF语句写出,条件1(iNumber=0)判断并执行后还会
继续判断条件2(iNumber>0),所以最后的结果是iNumber=0+1+10=11。
而在程序2中,两个判断条件写入一个IF语句中,在程序读到IF语句时会依次判断IF下
面的所有条件哪个成立,去执行条件成立下的程序。发现条件1(iNumber=0)成立,执
行iNumber+1后跳出IF判断,后面的所有条件不再过问了。条件1下的程序执行后,
iNumber=1,即便后面的条件2(iNumber>0)这时也成立了PLC也不会去管他了。
这个例子中IF的两个条件同时只有一个条件成立,那如果是在一个扫描周期下,有多
个条件成立时PLC如何选择呢?我们稍微改下程序:
image.png
我们把条件2改为iNumber>-1,PLC复位后iNumber=0,同时满足两个判断条件,执行一
个扫描周期后iNumber仍然=1,这里说明IF有多个条件同时成立时,执行第一个成立的
条件。
不知道有没有人对我加的限制条件有点疑惑,bTrig触发后,程序立即复位了bTrig,
也就是最外层的IF语句条件不成立了,为什么后面的程序还会执行呢?这里体现出IF
语句的第三个特性,只要判断时条件成立,条件下的程序会全部执行,无论在这个过
程中条件有没有变化。
当然,如果想要终止某个条件下程序的运行也是有方法的,可以使用RETURN指令。比如程序1,在条件1执行后我们不希望在执行条件2了的话,可以在条件1后面加一句
returnLC会跳出当前正在执行的指令。
image.png
可以看到,在条件1执行后iNumber=1,满足了return的执行条件,返回上一层的IF语
句,下面的条件不会再判断了。
总结:
一个IF语句在一个扫描周期内最多只执行其中的一个条件。
在一个扫描周期内IF语句有多个条件同时成立时,执行第一个成立的条件。
在一个扫描周期内IF语句只要判断时条件成立,条件下的程序会全部执行,无论在这
个过程中条件有没有变化
IF与CASE的区别
上面刚刚总结的3个特性,case语句是同样具有的,那case与if有什么区别呢?
1.PLC的占用不同。
PLC在解析IF语句时,在一个扫描周期内要依次判断所有条件是否成立,找到第一个成
立的条件后去执行,而解析case语句时,直接根据判断变量的值跳转至相应的程序
中,举个例子:
image.png
在这段程序中,iStep的值=8;在bTrig触发后PLC先判断第1个条件iStep=0,发现不成
立后判断第2个条件iStep=1,发现不成立后判断第3个条件。。。最后判断第9个条件
iStep=8,发现条件成立,开始执行,共判断了9步。
我们再看看case如何编写:
image.png
在bTrig触发后,PLC判断iStep的值=8,直接去执行“8”后面的程序,只判断了一
步。在复杂程序中多使用case去判断数字变量,可以非常有效的减少PLC的运行负
荷。(由于三菱软件编译的原因,实际的步数不一定谁多谁少,不用过于关注。)
2.判断的变量类型不同。
IF指令能够判断数字变量,开关变量等多种类型的变量,甚至可以在判断条件中编写
复杂数学公式和逻辑计算。例如:
image.png
如图,直接在判断的数组变量的角标中写入数学公式,且多个变量使用
and 、or 、not 等逻辑符号进行计算。
而case语句只能判断数字类型的变量,或者枚举变量(三菱不支持),例如:
image.png
理解循环的意义
ST的循环可以指定循环次数(FOR循环),可以不指定循环次数(while循环),而这里所
说的循环次数都是一个扫描周期下的执行次数。举个例子:
image.png
这句话的意思是在一个扫描周期内,执行100次iNumber+1,而且每次执行后,ii的值
增加1。我们如果想看到一个周期内的结果扔然要增加限制条件:
image.png
可以看到执行一个扫描周期后,iNumber增加了100次1,最后等于100。
那它有什么作用呢?我用if语句也能实现iNumber增加100次1啊,比如:
image.png
bTrig触发后,iNumber满足<100 的条件,执行iNumber+1的程序,100扫描周期后,条
件不再满足。他们虽然实现了同样的功能(iNumber增加了100次1),区别是IF用了
100个扫描周期,而for只用了一个。在我举的例子当中区别确实不大,但是在正常程
序中,PLC的扫描周期一般要在2-5ms左右,一千次的扫描周期就达到了2-5秒的时间,
假设要实现从一个容量为1万的数组里面找出一个特定数值,如果用IF的方法,大约要
耗费20-50秒才能完成,这个时间成本是有点高的,而for循环只需要几毫秒,可以说
一瞬间完成。
例如:假设容量为1万的数组iNumber[0..9999],从中找出第一个数值为888的变量,
记录他的角标:
大家可以试着理解一下这个程序。
image.png
上升沿/下降沿
字面理解上升沿和下降沿,是一个变量变化的一瞬间,是一个无穷小的时间。但是在
plc的程序里最小的时间单位就是扫描周期,所以所谓的沿就是一个扫描周期。
上面举的例子中用到的bTrig变量都是为了让下面的程序执行一个扫描周期,也可以理
解为执行bTrig的一个上升沿,与下面的编程效果一样:
image.png
上升沿功能块R_TRIG的功能,实际上就是检测输入变量,在输入变量由低电平变为高
电平的第一个扫描周期内输出高电平,然后输出低电平。也就是输出一个扫描周期。
下降沿与上升沿同理,检测的是输入变量由高到低变化的第一个扫描周期。
理解的上升沿与下降沿的含义,我们可以非常灵活的应用在程序中,像让程序执行一
个扫描周期,可以检测一个变量的上升/下降沿,可以用我们上面的例子中在IF语句置
位复位一个变量,也可以在case中执行一个条件后立刻改变判断变量的数值等等。



image.png

点评

感谢分享!!!  发表于 2022-12-13 08:50

评分

参与人数 2水滴 +2 收起 理由
MarcusNoob + 1
九月懿诚-刘云胜 + 1 大佬牛的很

查看全部评分





上一篇:ST语言编程手册.docx (186页)
下一篇:故障问题

已有 3 人打赏作者

秋夜思 赏了楼主1水滴 MarcusNoob 赏了楼主1水滴 DCJD007 赏了楼主1水滴
回复 邀请回答送花

使用道具 举报

mars01573 2021-9-2 14:52:11 | 显示全部楼层
PLC的“扫描周期” image.png
回复 送花

使用道具 举报

akun924 2021-9-3 08:55:28 | 显示全部楼层
发现越来越多的人喜欢用ST来写程序了,可能是我用梯形图相对多一些,用ST少一些,就感觉还是梯形图在后期调试维护时候更容易进入状态,尤其是接手烂尾楼和二手半吊子项目时候ST简直就是噩梦。或许是我水平太差吧。

点评

确实 能用T形图 绝不用ST来写 ,调试太折磨人了  发表于 2023-1-30 14:14
逻辑控制还是梯形图好一些,计算的话还是ST方便。  发表于 2022-10-3 19:26
回复 送花

使用道具 举报

mars01573 2021-9-3 09:32:09 | 显示全部楼层
akun924 发表于 2021-9-3 08:55
发现越来越多的人喜欢用ST来写程序了,可能是我用梯形图相对多一些,用ST少一些,就感觉还是梯形图在后期调 ...

是的,我也喜欢梯形图,逻辑用梯形图,运算用ST “哈雷六号”科考站上空的南极光,南极洲.jpg
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部