事件,是对程序操作的一系列动作。在PLC操作时,有些事件是由系统预先设计好的。比如组织块。在执行组织块时,一般无法人工干预,如果需要强制结束,就需要用到中断事件或中断指令。
1.启动组织块的事件
组织块OB是操作系统与用户程序的接口,出现启动组织块的事件时,由操作系统调用对应的组织块。启动组织块的事件的属性见表5-3。
表5-3 启动OB的事件
启动事件与程序循环事件不会同时发生,在启动期间,只有诊断错误事件能中断启动事件,其他事件将进入中断队列,在启动事件结束后处理它们。
2.不启动组织块的事件(见表5-4)
表5-4 不会启动OB的事件
3.事件执行的优先级与中断队列
事件执行的优先级、优先级组和队列用来决定事件系统服务程序的处理顺序。
每个CPU事件都有它的优先级,不同优先级的事件分为3个优先级组。表5-3给出了各类事件的优先级、优先级组和队列深度。优先级的编号越大,优先级越高、时间错误中断具有最高的优先级26和27。
事件一般按优先级的高低来处理,先处理高优先级的事件。优先级相同的事件按“先`来先服务”的原则来处理。高优先级组的事件可以中断低优先级组的事件的OB的执行,例如第2优先级组所有的事件都可以中断程序循环OB的执行,第3优先级组的时间错误OB可以中断所有其他的OB。
一个OB正在执行时,如果出现了另一个具有相同或较低优先级组的事件,后者不会中断正在处理的OB,将根据它的优先级添加到对应的中断队列排队等待。当前的OB被处理完后,再处理排队的事件。当前的OB执行完后,CPU将执行队列中最高优先级的事件的OB,优先级相同的事件按出现的先后次序处理。如果高优先级组中没有排队的事件了,CPU将返回较低的优先级组被中断的OB,从被中断的地方开始继续处理。
不同的事件(或不同的OB)均有它自己的中断队列和不同的队列深度(见表5-3)。对于特定的事件类型,如果队列中的事件个数达到上限,下一个事件将使队列溢出,新的中断事件被丢弃,同时产生时间错误中断事件。有的OB用它的临时局部变量提供触发它的启动事件的详细信息,可以在OB中编程,做出相应的反应,例如触发报警。
4.中断的响应时间
中断可以暂停组织块的执行,在使用时,需要编程者考虑中断的响应时间。中断的响应时间是指从CPU得到中断事件出现的通知,到CPU开始执行该事件的OB的第一条指令之间的时间。如果在事件出现时只是在执行程序循环OB,中断响应时间小于175μs。
5.关于组织块的实例
【例5-6】程序循环组织块。
需要连续执行的程序应放在主程序OB1中,CPU在RUN模式时循环执行OB1,可以在OB1中调用FC和FB。如果用户程序生成了其他程序循环OB,CPU按OB编号的顺序执行它们,首先执行主程序OB1,然后执行编号大于等于200的程序循环OB。一般只需要一个程序循环组织块,如下实例。
1)打开STEP 7 Basic的项目视图,生成一个名为“组织块”的新项目。双击项目树中的“添加新设备”,添加一个新设备,CPU的型号为CPU 1214C。
2)打开项目视图中的文件夹“程序块”,双击其中的“添加新块”,单击打开的对话框中的“组织块”按钮,出现如图5-24所示对话框,选中列表中的“Program cycle”,生成一个程序循环组织块,OB默认的编号为200,语言为LAD(梯形图)。块的名称为默认的Main_1。单击“确定”按钮,OB块被自动生成,可以在项目树的文件夹“程序块”中看到新生成的OB200。
图5-24 生成程序循环组织块
3)分别在OB1和OB200中输入简单的程序,程序内容如图5-25和图5-26所示。
图5-25 OB1的程序
图5-26 OB200的程序
将它们下载到CPU,将CPU切换到RUN模式后,可以用I0.4和I0.5分别控制Q1.0和Q1.1,说明OB1和OB200均被循环执行。
【例5-7】启动组织块。
启动组织块用于系统初始化,CPU从STOP切换到RUN时,执行一次启动OB。执行完后,开始执行程序循环OB1。允许生成多个启动OB,默认的是OB100,其他启动OB的编号应大于等于200。一般只需要一个启动组织块。
在例5-6所建项目“组织块”中,用上述方法生成启动(Startup)组织块OB100和OB201。分别在启动组织块OB100和OB201中生成初始化程序,如图5-27和图5-28所示。
图5-27 OB100的程序
(www.xing528.com)
图5-28 OB201的程序
将它们下载到CPU,将CPU切换到RUN模式后,可以看到QB0的值被OB100初始化为7,其最低3位为1。该项目的M区没有设置保持功能,暖启动时M区的存储单元的值均为0。启动时分别调用了一次OB100和OB201,INC指令使MB14和MB16的值加1。生成和打开监视表,看到MB14和MB16的值均为1,说明只执行了一次OB100和OB201。
【例5-8】循环中断组织块。
在设定的时间间隔内,循环中断(Syclic Interrupt)组织块被周期性地执行。最多可以组态4个循环中断事件,循环中断OB的编号大于等于200。
新建项目:Interrupt中,用上述方法生成循环中断组织块OB202,其设置如图5-29所示。
在OB的巡视窗口的“属性”选项卡中,循环中断的时间间隔(循环时间)的默认值为100ms,将它修改为1000ms。相位偏移(相移,默认值为0)用于错开不同时间间隔的几个循环中断OB,使它们不会被同时执行,以减少连续执行循环中断OB的时间。
如图5-29中的程序用于控制8位彩灯循环移位,I0.2控制彩灯是否移位,I0.3控制移位的方向。I0.3为1状态时彩灯右移,为0状态时彩灯左移。
将代码块下载到CPU,将CPU切换到RUN模式。扳动I0.2和I0.3对应的小开关,通过CPU模块上输出点的LED,可以观察到用I0.2和I0.3控制彩灯循环移位的情况。
【例5-9】实验SRT_DINT与CAN_DONT指令。
定时器指令的定时误差较大,如果需要高精度的延时,可以使用时间延迟中断。在过程事件出现后,延时一定的时间再执行时间延迟(Time delay)OB。在指令SRT_DINT的EN使能输入的上升沿,启动延时过程。用该指令的参数DTIME(1~60000ms)来设置延时时间,系统块如图5-30所示。
图5-29 循环中断组织块OB202
图5-30 上升沿中断组织块OB203的程序
在时间延迟中断OB中使用计数器,可以得到比60s更长的延迟时间。用参数0B_NR来指定延迟时间到时调用的OB的编号,S7-1200未使用参数SIGN,可以设置任意的值。RET_VAL,是指令执行的状态代码。
在I0.0的上升沿中断组织块OB203的界面区生成局部变量RET1和RET2,数据类型为Int,用来作指令的输出参数RET_VAL(返回值)的实参,如图5-30。
【例5-10】时间延迟中断组织块。
可以组态最多4个时间延迟中断事件,时间延迟OB的编号应大于等于200。
1)在项目“组织块例程”中生成硬件中断组织块OB203、时间延迟中断组织块OB204和数据块DB1。
2)在I0.0上升沿调用的OB203中启动时间延迟(见图5-30),同时读取PLC的实时时间。定时时间到时调用时间延迟组织块OB204,再次读取实时时间(见图5-33)。两次读取的实时时间的差值与时间延迟中断的输入参数DTIME(定时时间)比较,可以得到时间延迟中断的定时精度。
3)双击项目树中的“设备和网络”,打开设备视图,首先选中CPU,打开工作区下面的巡视窗口的“属性”选项卡,选中左边的“数字输入”的通道0(即I0.0,见图5-31),用复选框启用上升沿检测功能。单击选择框“硬件中断”右边的按钮,用下拉式列表将名为“Hardware interrupt”的OB203指定给I0.0的上升沿中断事件。
图5-31 组态硬件中断
4)为了保存读取的日期时间值,在DB1中生成数据类型为DTL的变量DT1和DT2(见图5-32)。
图5-32 数据块中的日期时间值
5)在OB203中调用SRT_DNT(见图5-30),启动时间延迟中断的定时,同时调用指令RD_LOC_T,读取PLC的实时时钟的日期时间,保存在输入参数OUT指定的DB1的变量DT1中,其起始地址为DBB0。
6)在时间延迟中断组织块OB204和OB1的界面区生成局部变量RET1,数据类型为Int,用来作指令的参数RET_VAL的实参(见图5-33和图5-34)。调用RD_LOC_T指令读取日期时间,保存在输出参数OUT指定的DB1的变量DT2中,其起始地址为DBB12。同时立即置位物理输出点Q0.4:P。
图5-33 时间延迟中断组织块OB204的程序
7)将程序块和组态信息下载到CPU,将CPU切换到RUN模式。用外接的小开关使I0.0变为1状态,CPU调用硬件中断组织块OB203。10s后SRT_DINT启动的定时时间到,CPU调用时间延迟中断组织块OB204,Q0.4被立即置位。双击打开项目树中的DB1,单击工具栏上的按钮,启动在线监视功能。
图5-34 OB1中取消时间延迟的和程序
可以看到指令SRT_DINT启动定时和定时时间到两次读取的实时时间的差值为I0.000145s(见图5-32),与时间延迟的设定值10s相比,定时精度是相当高的。
用I0.4外接的小开关产生一个脉冲信号,将Q0.4复位(见图5-25)。用外接的小开关使I0.0变为1状态,CPU调用硬件中断组织块OB203,再次启动时间延迟中断的定时。在定时期间,用外接的小开关使I0.1变为1状态,调用指令CAN_DINT(见图5-34),时间延迟中断被取消,不会调用OB204,10s的延迟时间到了后,Q0.4不会变为1状态。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。