loveplc

 找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 230|回复: 0

子程序被多次重复调用时,上升沿捕捉逻辑不能正常执行。

[复制链接]

284

主题

317

帖子

986

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
986
发表于 2019-9-29 08:45:22 | 显示全部楼层 |阅读模式
举一个简单的例子,在子程序SBR_0中声明一个布尔类型输入变量和一个布尔类型的输出变量,输入变量IN1通过一个常开触点连接一个上升沿捕捉指令,之后再连接一个线圈输出到输出变量OUT1。在主程序中的网络1和网络2中,连续使用SM0.0作为使能条件两次调用子程序SBR_0,子程序的输入输出分别连接M0.0、M0.1、M0.2、和M0.3。如图3.子程序和主程序内容 所示:
   
图3.子程序和主程序内容
如果将M0.0复位,M0.2置位,单纯按上升沿捕捉的逻辑,由于没有上升沿跳变,子程序的输出都应该是‘0’。但是在线监控可以看到M0.1持续为‘0’, M0.3保持为‘1’。如图4.在线监控 所示:
图4.在线监控
上升沿捕捉指令的工作原理是将本次左侧能流过来的‘1’、‘0’信号与上次指令执行时的状态比较,如果检测到从0到1的变化,则导通。每条上升沿下降沿指令都隐含一个布尔数据资源来存储上一次输入信号的‘1’、‘0’状态。在程序段1中,M0.0将上升沿捕捉清零,M0.2不输出。程序段2中M0.2为1,上升沿捕捉指令刚好捕捉到一个由0到1的变化,所以M0.3导通。详细请参考表1.上升沿变化:
表1.上升沿变化

第一个扫描周期
第二个扫描周期
程序段1
程序段2
程序段1
程序段2
M0.0
0
0
0
0
M0.1
0
0
0
0
M0.2
1
1
1
1
M0.3
1
1
1
1
P(上升沿捕捉)
0
1
0
1


回复

使用道具 举报

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

本版积分规则

京ICP备17066637号-1|京公网安备|手机版|Archiver|小黑屋|loveplc

GMT+8, 2025-12-6 15:13 , Processed in 0.020911 second(s), 18 queries .

Powered by Discuz! Comsenz Inc.

© 2019 技高志远.

快速回复 返回顶部 返回列表