plc语句执行顺序问题 点击:2985 | 回复:54



zhoujy@smeecomcn

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:1帖 | 9回
  • 年度积分:10
  • 历史总积分:75
  • 注册:2019年10月29日
发表于:2019-10-30 14:01:12
楼主
求助帖50分-已结帖

初学PLC,写了一个简单的测试程序,思路就是:启动1有效 -> T0计时5s -> 置位Y0 -> Y1输出1/同时触发T1计时3s -> 复位Y0,现在很奇怪为什么第四行里Y0已经变成0了,而Y1仍然输出有效,计时器T1也保持在3s的状态?

image.png

是因为PLC是顺序执行,执行END,就不会再从头扫描了吗?但如果我将Y0强制置为有效,T1结束后,Y0复位,此时计时器T1和Y1都归0

image.png




GONGKONG0769

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 32回
  • 年度积分:80
  • 历史总积分:137
  • 注册:2017年4月13日
发表于:2019-10-31 20:08:54
21楼


回复内容:

对: phoenixyqc 因为T1 on以后,下面每次一扫描周期都先执行了LD ... 内容的回复!

-------------------------

我昨晚的想法跟你一样,但是我自己也碰到了一个有关扫描机理的问题,假如你的理论是正确的话,你试下来解答下我发的一个帖子的问题,你会发觉放到我的问题上,又行不通的。

我帖子的链接是:

  c1为什么不计数,y000不翻转-专业自动化论坛-中国工控网论坛  http://bbs.gongkong.com/D/201910/811614_1.shtml#replyDi

 

   本人QQ 2576224822  ,欢迎来Q,一起探讨PLC这似是而非,貌似简单,实则捉摸不透的扫描机理。我觉得这是PLC最基本的东西,如果这都弄不清楚,写到大程序时,出问题那是根本没法找原因。


北风吹111

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 145回
  • 年度积分:100
  • 历史总积分:299
  • 注册:2019年1月17日
发表于:2019-11-01 16:23:36
22楼


回复内容:

对: GONGKONG0769 回复内容:对: phoenixyqc  因为T1 on... 内容的回复!

--------------------

可能原因是置位Y001直接触发,而复位Y001是定时器触发的,所以放中间和放后面有区别,前一个扫描周期Y001的状态不同

具体咱也解释不清楚

北风吹111

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 145回
  • 年度积分:100
  • 历史总积分:299
  • 注册:2019年1月17日
发表于:2019-11-01 17:15:20
23楼


回复内容:

对: GONGKONG0769 回复内容:对: phoenixyqc  因为T1 on... 内容的回复!

-------------------------

微信截图_20191101171159.png这是不同位置Y001上个扫描周期的状态(一个一直为1,一个有变化),至于为什么那就是PLC自己的算法了

phoenixyqc

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 86回
  • 年度积分:128
  • 历史总积分:288
  • 注册:2009年2月23日
发表于:2019-11-01 18:46:24
24楼


回复内容:

对: 北风吹111 回复内容:对: GONGKONG0769  回复内容:... 内容的回复!

-------------------------

PLC扫描周期三个阶段,扫描跟输出时变量是不变的,程序执行时按顺序,变量实时变化。把上一扫描周期结果导入然后一步步走下来哪有什么为什么。Y0确实输出是OFF的,下一次扫描阶段也是OFF,但不妨碍程序执行过程中的置ON 啊。至于769说的,那应该是上升沿的问题

李东泽

  • [版主]
  • 精华:7帖
  • 求助:25帖
  • 帖子:1192帖 | 6238回
  • 年度积分:4119
  • 历史总积分:39533
  • 注册:2010年3月25日
发表于:2019-11-01 21:36:26
25楼


引用 zhoujy@smeecomcn 的回复内容: 回复内容:对: 李东泽  另外楼主还是不明白,PLC循...

-------------------------

那么请楼主把LD T1 RST Y0

LD YO OUT Y0 

位置互换一下看看

我们的生活

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 47回
  • 年度积分:124
  • 历史总积分:173
  • 注册:2016年8月09日
发表于:2019-11-06 08:59:21
26楼

回复内容:

对:GONGKONG0769 其实,上面的解答,都没真正解释:Y000都等于0了,而受Y000常开触点控制的Y001,居然还为1。  这核心问题被众人成功地绕开了同一程序里,既有 SET Y000,又有RST Y000,在这个程序里,运行稳定以后,是会出现SET Y000和RST Y000,都满足,而RST在后,所以,在程序运行稳定后,Y000是一直为0。(仿真也说明确实如此) 但上面只是说明Y000为啥是0而已,100%的Y000=0,这就另人更纳闷了,y000确实为0了,那依赖Y000而生存的y001为何能续命?  期待真正的答案,而非王顾左右而言他。     内容的回复:

会解决根本问题(原理性)的还是少,大多数都是只会用😂(我连用都还不会)

请叫我王老湿

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:604帖 | 6517回
  • 年度积分:798
  • 历史总积分:156994
  • 注册:2011年4月25日
发表于:2019-11-06 09:11:13
27楼

论坛很热情,回复问题很积极

幽木

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 113回
  • 年度积分:750
  • 历史总积分:1044
  • 注册:2019年10月24日
发表于:2019-11-07 14:31:10
28楼


回复内容:

对: zhoujy@smeecomcn 回复内容:对: 竹叶三—王者之师  同一段程序总对Y0... 内容的回复!

-------------------------

因为X0一直为1,T0一直为1,导致每个扫描周期开始时T0都对Y0置1。

X0接通5秒后T0为1,T0对Y0置1,Y0接通3秒后T1接通,X0接通8秒后将Y0复位;但由于每个周期开始时T0都对Y0置1,使得每个周期Y0都为1,仅在最后一条指令时为0。最终输出时Y0为0,但对于Y1和T1来说相当于Y0一直为1。

zhoujy@smeecomcn

  • 精华:1帖
  • 求助:1帖
  • 帖子:1帖 | 9回
  • 年度积分:10
  • 历史总积分:75
  • 注册:2019年10月29日
发表于:2019-11-13 16:34:37
29楼

多谢楼上各位大佬的热情回复,通篇看下来,比较认同phoenix和幽木的观点。

这个现象,应该是PLC扫描过程中寄存器对输入信号采样处理的机制造成的,以下是从书中摘抄的,应该可以解释这个问题:


“PLC采用了与普通计算机工作方式差别较大的'循环扫描'工作方式。所谓扫描,就是CPU从第一条指令开始执行程序,直到最后一条(END指令)。扫描过程分为三个阶段,即输入采样和处理、用户程序执行、输出数据和处理三个阶段,这三个阶段称为一个扫描周期。”

“1.输入采样和处理阶段

在第n个扫描周期,首先进行的是读入现场信号即输入采样阶段,PLC依次读入所有输入状态和数据,并将它们存入输入映像寄存器区(存储器输入暂存区)中相应的单元内。输入采样结束后,如果输入状态和数据发生变化,PLC不再响应,输入映像寄存器区中相应单元的状态和数据保持不变,要等到第(n+1)个扫描周期才能读入,这一阶段称为输入采样和处理阶段,通常简称为输入刷新阶段。”


个人认为,红字部分是导致这个现象的原因,即,在程序开始,由于X0是有效的,所以Y0已经被置为了1,这个1被寄存器采样并保存了下来,所以后面即使Y0发生了变化被置为了0,寄存器并不采样这个值,还是按照1来处理,因此Y1仍然保持1


Smile-lyc

  • [版主]
  • 精华:179帖
  • 求助:40帖
  • 帖子:3951帖 | 19374回
  • 年度积分:1376
  • 历史总积分:103588
  • 注册:2006年8月04日
发表于:2019-11-26 10:40:49
30楼

感谢大家的无私奉献答疑,也感谢大家积极发求助帖子。互帮互助,一起进步!

行云168

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 323回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2008年9月03日
发表于:2019-12-02 08:18:23
31楼

谢谢你了  学习学习

幽木

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 113回
  • 年度积分:750
  • 历史总积分:1044
  • 注册:2019年10月24日
发表于:2019-12-03 11:07:43
32楼


回复内容:

对: zhoujy@smeecomcn 多谢楼上各位大佬的热情回复,通篇看下来,比较认同pho... 内容的回复!

-------------------------

由于PLC每个周期开始时进行采样、更新,之后执行程序,程序从第一条到最后一条依次执行。

注意,程序执行过程中,对I/O是不会刷新的,刷新只是在每个周期开始时。

该程序执行完成后Y0为0,Y1为1,也就是说刷新时,Y0为0,Y1为1,当执行下一个周期时,第7步时Y0又被置1(由于此时I/O是不会刷新,Y0输出还是0),运行到18步时Y0是1,所以Y1还是1(由于程序是从上到下顺序执行,Y1没有变0的过程),22步时Y0又被置0,执行完成后Y0还是0,Y1还是1。每当进行刷新时都是Y0为0,Y1为1。

新鲜血液

  • 精华:0帖
  • 求助:0帖
  • 帖子:19帖 | 241回
  • 年度积分:315
  • 历史总积分:822
  • 注册:2019年5月28日
发表于:2019-12-10 15:50:11
33楼

对对,我刚开始也是和幽木大佬想的一样。

天凉好个球

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2018年3月29日
发表于:2019-12-10 16:09:52
34楼


回复内容:

对: xiexie1999 所以一般最好用置位和复位 内容的回复!

-------------------------

任何老师都不会说优先置复位,用多了之后会导致程序可读性很差,写的时候挺爽,后面自己都看不懂。

如果123

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 30回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2018年12月14日
发表于:2019-12-13 09:31:09
35楼

电路板上好像是触发器 要等他再次改变时才会变化 所以要到下一个扫描周期才会变化 

dwt520f

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 142回
  • 年度积分:0
  • 历史总积分:77
  • 注册:2011年5月10日
发表于:2019-12-19 22:30:50
36楼

回复内容:

对:zhoujy@smeecomcn 回复内容:对: 李东泽 另外楼主还是不明白,PLC循环扫描,执行完end后,接... 内容的回复!-------------------------正是因为PLC是循环扫描的,所以才纠结于为什么Y000都已经为0了,而受它控制的Y001线圈还在输出1     内容的回复:

程序扫描到y1的时候y0  on所以这个时候y1on   继续扫描y0被复位,y1继续保持原来状态,然后到结束,y1谁给复位呢,不复位为啥不on

ls1307

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:100
  • 历史总积分:243
  • 注册:2018年3月13日
发表于:2019-12-21 15:18:05
37楼

简单分析,如下图QQ截图.jpg

gk2017

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 42回
  • 年度积分:6
  • 历史总积分:102
  • 注册:2017年8月12日
发表于:2019-12-31 17:56:28
38楼

PLC扫描周期是循环的,从上到下,从左到右

小胡12

  • 精华:0帖
  • 求助:15帖
  • 帖子:21帖 | 125回
  • 年度积分:93
  • 历史总积分:381
  • 注册:2018年12月23日
发表于:2020-01-13 06:13:39
39楼


回复内容:

对: GONGKONG0769 其实,上面的解答,都没真正解释:Y000都等于0了,而... 内容的回复!

-------------------------

你找到答案了吗,我也很苦逼的遇到同类问题

小胡12

  • 精华:0帖
  • 求助:15帖
  • 帖子:21帖 | 125回
  • 年度积分:93
  • 历史总积分:381
  • 注册:2018年12月23日
发表于:2020-01-13 06:24:21
40楼


回复内容:

对: 幽木 回复内容:对: zhoujy@smeecomcn  多... 内容的回复!

-------------------------

我还是没搞懂,能不能再详细点


相关主题

官方公众号

智造工程师