找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
在《S7-200可编程控制器系统手册》中关于中断指令的描述:“中断允许指令(ENI)全局地允许所有被连接的中断事件。中断禁止指令(DISI)全局地禁止处理所有中断事件。当进入RUN模式时,初始状态为禁止中断。在RUN模式,您可以执行全局中断允许指令(ENI)允许所有中断。全局中断禁止指令(DISI)不允许处理中断服务程序,但中断事件仍然会排队等候”。
“当把中断事件和中断程序连接时,自动允许中断。如果采用禁止全局中断指令不响应所有中断,每个中断事件进行排队,直到采用允许全局中断指令重新允许中断,如果不用允许全局中断指令,可能会使中断队伍溢出”。
我的问题是当进入RUN模式时,由于初始状态为禁止中断,要在主程序执行期间的任何时候响应中断(如设备运行状态的多个报警),必须要使用中断允许指令(ENI)吗?该指令加在主程序的什么位置?是否如《S7-200可编程控制器系统手册》中的(示例:中断指令)那样,在每一个中断连接指令(ATCH)处使用中断允许指令(ENI),还是只使用一次?另外在(示例:用定时中断读取模拟量的数值程序举例)中PLC在第一个扫描周期调用子程序SBR0,并在子程序SBR0中使能全局中断,那么在后面的扫描周期里此中断允许指令还有效吗?能否举一个例子说明。
请各位高手指点,在此先谢谢了!!
示例:中断指令
MAIN
Network 1 //首次扫描
//1. 定义I0.0
// 的下降沿中断服务程序为INT_0
//2. 全局中断允许。
LD SM0.1
ATCH INT_0,1
ENI
Network 2 //如果检测到I/O错误,
//禁止I0.0的下降沿中断。
//该程序段是可选的。
LD SM5.0
DTCH 1
Network 3 //当M5.0接通时,禁止所有中断。
LD M5.0
DISI
INT0
Network 1 //I0.0的下降沿中断服务程序:
//当有I/O错误时返回。
LD SM5.0
CRETI
示例:用定时中断读取模拟量的数值程序举例
MAIN
Network 1 //首次扫描,调用子程序0。
LD SM0.1
CALL SBR_0
SBR0
Network 1 //1. 设置定时中断的时间间隔为100ms。
//2. 连接INT_0到定时中断0(事件10)。
//3. 全局中断允许。
LD SM0.0
MOVB 100,SMB34
ATCH INT_0,10
ENI
INT0
Network 1 //每100ms读AIW4的值。
LD SM0.0
MOVW AIW4,VW100
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
你自己说得很明白了,只要在SBR0中使用一次ENI指令就可以了。除非在此之后你使用过DISI指令,否则任何时候,中断都会得到及时响应的。而使用了DISI指令后,如果仍需响应中断,请再次使用ENI指令。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!