分布式io的io模板可分为可编程模板和不可编程模板,其中可编程模板以订货号后4个字母0ab0来表示,不可编程模板则以0aa0来表示。对于可编程的di模板,可以通过step7的硬件组态设置其属性相关的硬件中断参数。以et200s的4di模板6es7131-4bd01-0ab0为例,如图1 di可编程模板的硬件中断参数。
图1 di可编程模板的硬件中断参数
这样对于该di模板的通道0如果信号出现上升沿,将给cpu触发硬件中断。当cpu收到该中断,cpu会中断用户程序启动硬件中断组织块,例如ob40处理该通道的硬件中断。触发该中断的事件会出现在ob40的启动信息中。
但是在应用中断过程中,需要注意一些事项。
首先,来了解一下plc在profinet应用处理中断的原理。当io设备产生报警会向plc发送中断信息,此时的数据是profinet io rta(real time alarm),与profinet io rt数据相比,rta数据具有两种优先等级,分别是5和6。对于优先等级是5的报警数据是诊断中断,插拔模块中断以及维护中断等;对于优先等级是6的报警数据是过程中断,即硬件中断。另外,与循环的profinet io rt过程数据交换不同,非实时的报警协议需要控制器应用层的确认,即ob40的确认。参考图2 报警协议过程。
图2 报警协议过程
ob40的确认在这里是非常关键的。只有在ob40处理结束,应用层确认信息才发送给io设备。io设备得到该确认后,才能发送下一条报警信息,io控制器才能进行再次处理。
所以控制ob40的处理时间t是非常重要的,该时间应该尽可能的短,也就是io设备所产生的报警的周期ti应尽可能的大于t,只有这样才能快速的响应下一个报警信息。
否则,在ob40处理时间t内,
同一模块上的同一通道所产生的新的报警信息会由于无法处理报警而导致中断信息丢失。
同一模块的其它通道所产生的新的报警信息会被接口模块缓存,当上一通道被应用层确认后,其它通道的报警信息会以一个报警信息发送给cpu。cpu只能一次响应全部的这些报警,而无法一一分开进行响应。
而不同模块上的通道产生新的报警也会被接口模块所缓存,发送报警的顺序以模块-槽为 高优先级,这意味着假设存在a和b两个di模板,且都具有4个通道,分别是0,1,2,3。ob40在处理a0报警的时间t内依次发生a1,a2,a3,b2,b3,接口模板会缓存上述报警信息。当处理完a0报警后,b模板的报警b2发送给cpu,cpu对该报警确认后,a模板的一个报警包含a1,a2,a3发送给cpu,再次确认后,b模板的报警b3才发送给cpu。
注意,分布式io的接口模块缓存中断的数量是有限制的,这依赖于io模块的数量和通讯负载的大小,以im151-3pn(6es7151-3ba23-0ab0)为例,如果1秒钟产生超过50个硬件中断,那么硬件中断可能会丢失。
注意,过程中断不适用于工艺模式,例如周期性的产生过程中断,高速计数等。