当前位置:
plc语句执行顺序问题
回复 | 人气 | 打印
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 悬赏50分-未结帖 发表于:2019-10-30 14:01:12 楼主

初学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

分享到: 关注收藏 邀请回答 回复 举报

竹叶三—王者之师 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 14:10:22 1楼
 

同一段程序总对Y0,进行置位和复位时,以最后一个执行为准。

你对定时器的理解不好。

  回复 引用 举报
请叫我王老湿 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 14:19:43 2楼
 

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

  回复 引用 举报
请叫我王老湿 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 14:23:44 3楼
 

楼主你将Y1那一步放到最后一步试一下

  回复 引用 举报
xiexie1999 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 14:32:32 4楼
 

所以一般最好用置位和复位

  回复 引用 举报
zhshxxy 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 14:33:03 5楼
 

启动信号是不是一直处在高电平,启动信号用脉冲信号试试。

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 15:24:19 6楼
 


回复内容:

对: zhshxxy 启动信号是不是一直处在高电平,启动信号用脉冲信号试试。 内容的回复!

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

启动信号确实是一直高电平呢,但是Y1线圈理论上只由Y0控制吧,为何Y0被RST了,Y1还有输出呢?

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 15:26:01 7楼
 


回复内容:

对: 竹叶三—王者之师 同一段程序总对Y0,进行置位和复位时,以最后一个执行为... 内容的回复!

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

嗯,执行完,Y0确实是被复位了,但现在不太理解为何Y0被复位后,Y1线圈还保持有效呢?就如图上第4行所示的

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 15:29:15 8楼
 


回复内容:

对: 请叫我王老湿 楼主你将Y1那一步放到最后一步试一下 内容的回复!

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

是的,Y1放到最后一步,就没问题了。只是很不理解放到前面不行的原因。如果是循环扫描的话,即使放到前面,Y0一旦复位,Y1也应该会被清0吧

  回复 引用 举报
请叫我王老湿 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 15:39:54 9楼
 

回复内容:

对:zhoujy@smeecomcn 回复内容:对: 请叫我王老湿 楼主你将Y1那一步放到最后一步试一下 内容的回复!-------------------------是的,Y1放到最后一步,就没问题了。只是很不理解放到前面不行的原因。如果是循环扫描的话,即使放到前面,Y0一旦复位,Y1也应该会被清0吧     内容的回复:

你要搞清楚plc执行原理就可以

  回复 引用 举报
xiexie1999 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 16:26:48 10楼
 


回复内容:

对: zhoujy@smeecomcn 回复内容:对: 请叫我王老湿  楼主你将Y1那一步放到... 内容的回复!

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

PLC执行的问题

  回复 引用 举报
青岛黄工 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 16:38:56 11楼
 

引用 请叫我王老湿 的回复内容: PLC扫描周期是循环的,从上到下,从左到右

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


  回复 引用 举报
一颗小小草 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 17:20:45 12楼
 


引用 zhshxxy 的回复内容: 启动信号是不是一直处在高电平,启动信号用脉冲信号试试。

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

应该就是这个原因。

  回复 引用 举报
GONGKONG0769 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 19:42:02 13楼
 

其实,上面的解答,都没真正解释: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为何能续命?

  期待真正的答案,而非王顾左右而言他。

  回复 引用 举报
李东泽 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 22:32:15 14楼
 

楼主看到Y1有输出,可以下载到PLC里面测试一下,仿真的不可信。

但是Y1,应该是会被没有输出。

但是是在PLC的下一个扫描周期

  回复 引用 举报
李东泽 个人主页 给TA发消息 加TA为好友 发表于:2019-10-30 22:36:21 15楼
 

另外楼主还是不明白,PLC循环扫描,执行完end后,接着从第一步程序开始循环

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 11:19:06 16楼
 


回复内容:

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

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

知己呀,上面都没有回答为何Y000为0而Y001还为1,我正是因为知道PLC是顺序循环扫描的,所以才纠结于这个问题的

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 11:19:40 17楼
 


回复内容:

对: 李东泽 楼主看到Y1有输出,可以下载到PLC里面测试一下,仿真... 内容的回复!

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

确实也下载过看了,Y1的指示灯的确是保持为亮的

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 11:20:37 18楼
 


回复内容:

对: 李东泽 另外楼主还是不明白,PLC循环扫描,执行完end后,接... 内容的回复!

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

正是因为PLC是循环扫描的,所以才纠结于为什么Y000都已经为0了,而受它控制的Y001线圈还在输出1

  回复 引用 举报
zhoujy@smeecomcn 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 11:28:54 19楼
 


回复内容:

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

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

可惜你看懂了我的问题,却不能回答我

  回复 引用 举报
phoenixyqc 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 17:39:29 20楼
 

因为T1 on以后,下面每次一扫描周期都先执行了LD T0--SET Y0,Y0又被置位了。但是执行Y0输出的时候确实是又被复位了,所以Y0输出OFF而T1一直保持。把RST Y0放在T1上面看看

  回复 引用 举报
GONGKONG0769 个人主页 给TA发消息 加TA为好友 发表于:2019-10-31 20:08:54 21楼
 


回复内容:

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

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

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

我帖子的链接是:

  c1为什么不计数,y000不翻转-专业自动化论坛-澳门博彩游戏正规网站工控网论坛  http://bbs.otokarakan.com/D/201910/811614_1.shtml#replyDi

 

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


  回复 引用 举报
北风吹111 个人主页 给TA发消息 加TA为好友 发表于:2019-11-01 16:23:36 22楼
 


回复内容:

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

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

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

具体咱也解释不清楚

  回复 引用 举报
北风吹111 个人主页 给TA发消息 加TA为好友 发表于:2019-11-01 17:15:20 23楼
 


回复内容:

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

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

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

  回复 引用 举报
phoenixyqc 个人主页 给TA发消息 加TA为好友 发表于:2019-11-01 18:46:24 24楼
 


回复内容:

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

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

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

  回复 引用 举报
李东泽 个人主页 给TA发消息 加TA为好友 发表于:2019-11-01 21:36:26 25楼
 


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

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

那么请楼主把LD T1 RST Y0

LD YO OUT Y0 

位置互换一下看看

  回复 引用 举报
我们的生活 个人主页 给TA发消息 加TA为好友 发表于: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为何能续命?  期待真正的答案,而非王顾左右而言他。     内容的回复:

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

  回复 引用 举报
请叫我王老湿 个人主页 给TA发消息 加TA为好友 发表于:2019-11-06 09:11:13 27楼
 

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

  回复 引用 举报
幽木 个人主页 给TA发消息 加TA为好友 发表于: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 个人主页 给TA发消息 加TA为好友 发表于: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 个人主页 给TA发消息 加TA为好友 发表于:2019-11-26 10:40:49 30楼
 

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

  回复 引用 举报
行云168 个人主页 给TA发消息 加TA为好友 发表于:2019-12-02 08:18:23 31楼
 

谢谢你了  学习学习

  回复 引用 举报
幽木 个人主页 给TA发消息 加TA为好友 发表于: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。

  回复 引用 举报

周点击排行
周回复排行
最新求助



澳门博彩正规网址