|
举一个简单的例子,在子程序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.上升沿变化
|