可以看出,当发生时间错误和编程错误事件时,如果程序中没有添加相应的组织块,S7-1500CPU将进入停机模式;而对于其它事件,S7-1500CPU中没有添加相应的组织块,CPU也不会停机,这与S7-300/400是有区别的。
1)程序循环组织块
操作系统每个周期调用程序循环组织块一次,从而启动用户程序的执行。在S7-1500CPU中,可以使用多个“程序循环”组织块(OB编号大于等于123),并且按照序号由小到大的顺序依次执行。所有的“程序循环”组织块执行完成后,操作系统重新调用“程序循环”组织块。在各个“程序循环”组织块中调用FB、FC等用户程序使之循环执行。“程序循环”组织块的优先级为1且不能修改,这意味着优先级是Zui低的,可以被其它OB块中断。“程序循环”组织块的执行如图7-9所示。
图7-9 S7-1500程序循环组织块
2)时间中断组织块
时间中断组织块用于在时间可控的应用中定期运行一部分用户程序,可以实现在某个预设时间到达时只运行一次,或者在设定的触发日期到达时,按每分、每小时、每周、每月、每月底等周期运行。当CPU的日期值大于设定的日期值时触发相应的OB按设定的模式执行。在用户程序中也可以通过调用SET_TINT指令设定时间中断组织块的参数,调用ACT_TINT指令激活时间中断组织块投入运行。与在OB块属性中的设置相比,通过用户程序在CPU运行时修改设定的参数更加灵活。两种方式可以任意选择,也可以对一个OB块进行参数设置。
3)时间延迟中断组织块
时间延时中断OB在经过一段可组态的延时时间后启动。操作系统会在调用系统函数SRT_DINT后开始计算延时时间,延时时间到达后触发执行响应的OB。OB块号及延迟时间在SRT_DINT参数中设定,延迟时间为1~60000ms,延迟精度为1ms,这也是不使用定时器作为延时条件的原因。可以使用“CAN_DINT”指令取消已经启动的延时中断,
4)循环中断组织块
循环中断组织块按设定的时间间隔循环执行,循环中断的间隔时间通过时间基数和相位偏移量来指定。在OB块属性中,每一个OB块缺省的时间间隔可以由用户设置。如果使用了多个循环中断OB,当这些循环中断OB的时间基数有公倍数时,可以使用相位偏移量来防止启动。不同类型的S7-1500CPU所支持的Zui短时间间隔不同,例如CPU 1516支持Zui短250μs的时间间隔,而CPU1518支持Zui短100μs的时间间隔。在循环中断组织块中的用户程序将按照固定的间隔时间执行一次。OB块中的用户程序执行时间必须小于设定的时间间隔。如果间隔时间较短,会造成循环中断OB块没有完成程序扫描而被调用,从而造成CPU故障,触发OB80报错。如果程序中没有创建OB80,则CPU进入停机模式。通过调用DIS_IRT,DIS_AIRT,EN_IRT系统指令可以禁用、延迟、使能循环中断的调用。循环中断组织块通常处理需要固定扫描周期的用户程序,例如PID函数块通常需要在循环中断中调用,以保证采样时间的恒定。
5)硬件中断组织块
硬件中断也称过程中断,用来响应由具有硬件中断能力的设备(例如通信处理器CP及数字量输入、输出模块等)产生的硬件中断事件。例如,可使用具有硬件中断的数字量输入模块触发中断响应,为每一个中断响应分配相应的中断OB块,多个中断响应可以触发一个相同的硬件中断OB。S7-1500CPU支持多达50个硬件中断组织块,可以为Zui多50个不同的中断事件分配独立的硬件中断组织块,方便用户对每个中断事件独立编程。
如果配置的中断事件出现,则中断当前主程序,执行中断OB块中的用户程序一次,跳回中断处继续运行主程序。中断程序的执行不受主程序扫描和过程映像区更新时间的影响,适合需要快速响应的应用。
如果输入模块中的一个通道触发硬件中断,操作系统将识别该模块的槽号,并触发相应的OB块,执行中断OB块之后发送与通道相关的确认。在识别和确认过程中,如果该通道存在的中断事件,操作系统将不予响应;如果该模块的其它通道存在中断事件,则在当前正在执行的中断确认之后响应这个新的中断事件;如果是由不同的模块触发的中断,中断请求被记录,中断OB块在空闲(没有其它模块的中断请求)时被触发。通过调用DIS_IRT,DIS_AIRT,EN_IRT系统函数可以禁用、延迟、使能硬件中断的调用。
6)DPV1中断组织块OB55~OB57
CPU响应PROFIBUS-DPV1从站触发的中断信息。
7)等时同步中断组织块
用于处理 PROFIBUS-DP或PROFINET的等时同步用户程序。在等时模式下,从各个从站/设备采集输入信号,到输出逻辑结果,需要以下过程:从站/设备输入信号采样循环(信号转换)、从站/设备背板总线循环(转换的信号从模块传递到接口模块)、总线循环(信号从分布式I/O传递到CPU)、程序执行循环(信号的程序处理,即等时同步中断组织块)、总线循环(信号从PLC传递到分布式I/O)、从站/设备背板总线循环(信号从站接口模块传递到输出模块)及模块输出循环(信号转换)等七个循环。同步时钟将同步以上七个循环,优化数据的传递,并保证各个分布式I/O数据处理的同步性。
8)时间错误组织块OB80:
OB80用于处理时间故障。当在一个循环内程序执行第一次超出设置的Zui大循环时间时,CPU将自动调用OB80。如果程序中没有创建OB80,CPU将进入停止模式,如果程序中已经创建了OB80,在同一次循环内程序执行超出设置的Zui大循环时间两次,CPU也将进入停机模式。
9)诊断中断组织块
S7-1500操作系统在下列情况下调用诊断中断组织块:激活诊断功能的模块检测到其诊断状态发生变化(事件到来或事件离开)时,向CPU发送诊断中断请求时;发生电源错误触发事件时;操作系统检测到存储错误以及硬件中断丢失等事件时。
10)拔出/插入中断组织块
如果移除或者插入了已组态且未禁用的分布式I/O模块或子模块时,S7-1500 CPU操作系统将调用拔出/插入中断组织块。
注意,目前S7-1500机架不支持热插拔,拔出或插入中央机架模块将导致CPU进入STOP模式。
11)机架错误组织块
S7-1500CPU操作系统在下列情况下调用机架错误OB:检测到PROFIBUS-DP主站系统或PROFINETIO系统发生站点故障等事件(事件到达或离去);检测到PROFINET智能设备的部分子模块发生故障时。
12)编程错误组织块
如果S7-1500CPU在处理用户程序指令时发生编程错误,则有两种方式进行处理:
全局处理:调用编程错误组织块。
本地处理:直接在用户程序块中调用指令“GET_ERROR”或者“GET_ERR_ID”进行处理。
如果没有采取以上任何一种错误处理方式,则CPU会停机。
比如图7-10所示的一段程序,将数据写入DB100中。
图7-10 编程错误
如果CPU中没有装载DB100,S7-1500CPU操作系统将调用编程错误OB121,并将编程错误诊断信息写入诊断缓冲区,这就是全局处理。
如果在程序块发生编程错误的语句后调用函数“GET_ERR_ID”或“GET_ERR”,则CPU不会再调用OB121(这种情况下CPU中没有OB121也不会停机),也不会将错误写入诊断缓冲区。用户可以在程序块的输出参数“ID”中获取错误信息,如图7-11所示。
图7-11 对于编程错误进行本地处理
查看“GET_ERR_ID”的在线帮助可知故障ID“16#253A”对应的错误信息为“全局数据块不存在”。使用本地处理程序错误的好处是能够快速定位用户程序中出现的编程错误。如果想要得到更详细的错误信息,比如出错程序块的类型、程序块编号等,可通过调用函数“GET_ERR”实现。
13)I/O访问错误组织块
如果在执行用户程序指令期间直接访问I/O数据出错,也可以进行全局处理或者本地处理。
全局处理:
所谓全局处理即调用I/O访问错误组织块(OB122)。
本地处理:
在用户程序块中调用指令“GET_ERROR”或者“GET_ERR_ID”进行处理。比如在程序中访问了并不存在的外设“IW100:P”,可以进行本地处理,如图7-12所示。
图7-12 对于I/O访问错误进行本地处理
查看“GET_ERR_ID”的在线帮助可知故障ID“16#2942”对应的错误信息是“读取错误:Input”。如果不作全局错误处理和本地错误处理的话,CPU会将故障信息写入到诊断缓冲区中。
14)启动组织块
操作系统从“停止”切换到“运行”模式时,将调用启动OB。如果有多个启动OB,则按照OB编号依次调用,从Zui小编号的OB开始执行,用户可以在启动OB中编写初始化程序。程序中也可以不创建任何启动OB。S7-1500CPU只支持暖启动。
15)MC伺服中断组织块和MC插补器中断组织块
在添加相关的“S7-1500运动控制”工艺对象之后,系统自动将OB91/OB92分配到MC伺服中断和MC插补器中断。