组织块OB是操作系统与用户程序之间的接口,组织块由操作系统调用,组织块中的程序是用户编写的。S7 plc的组织块用来创建在特定的时间执行的程序或相应特定事件的程序,例如延时中断OB、外部硬件中断OB和错误中断OB等。
一、中断的基本概念
1、中断过程
中断处理用来实现对特殊内部事件或外部事件的快速响应,如果没有中断,CPU循环执行组织块OB1,因为除了背景组织块OB90以外,OB1的中断优先级最低,CPU检测到中断源的中断请求,操作系统在执行完当前程序的当前指令(即断点处)后,立即响应中断。CPU暂停正在执行的程序,调用中断源的中断组织块OB来处理,执行完中断组织块后,返回被中断的程序断点处继续执行原来的程序。
有中断事件发生时,如果没有下载相应的组织块,CPU将会进入STOP模式,即使生成和下载一个空的组织块,出现相应的中断事件时,CPU也不会进入STOP模式。
PLC的中断源可能来自I/O模块的硬件中断,或者来自CPU模块内部的软件中断,例如时间中断、延时中断、循环中断和编程错误引起的中断。
一个OB的执行被另一个OB中断时,操作系统对现场进行保护,被中断的OB的局部数据压入L堆栈(局部数据堆栈),被中断的断点处的现场信息保存在I堆栈(中断堆栈)和B堆栈(块堆栈)中。中断程序不是由逻辑块调用,而是在中断事件发生时由操作系统调用,因为不能预知系统何时调用中断程序,中断程序不能改写其他程序中可能正在使用的存储器,中断程序应尽可能的使用局部变量。编写中断程序应越短越好,减少中断程序的执行时间,减少对其他事件处理的延迟,否则可能引起主程序控制的设备操作异常。
2、组织块的分类
组织块只能由操作系统启动,它由变量声明表和用户编写的控制程序组成。
(1)启动组织块:用于系统初始化,CPU上电或操作模式切换到RUN时,S7-300执行OB100,S7-400根据组态的启动方式执行OB100~OB102中的一个。
(2)循环执行OB1:需要连续执行的程序放在OB1中,循环执行。
(3)定期执行的组织块:包括时间中断组织块OB10~OB17,和循环中断组织块OB30~OB38,可以根据设定的日期时间或时间间隔执行中断程序。
(4)事件驱动的组织块:延时中断OB20~OB23在过程事件出现后延时一定时间再执行中断程序,硬件中断OB40~OB47用于需要快速响应的过程事件,时间出现时马上中止当前正在执行的程序,执行对应的中断程序。ippipp.com版权所有!异步错误中断0B80~OB87和同步错误中断OB121、OB122用来决定出现错误时系统如何响应。
3、中断的优先级:也就是组织块的优先级,如果在执行中断程序(组织块)时,又检测到一个终端请求,CPU将比较两个中断源的中断优先级,如果优先级相同,按照产生中断请求的先后次序进行处理。如果后者的优先级比正在执行的OB的优先级高,将中止当前的正在处理的OB,
4、对终端的控制:时间中断和延时中断有专用的允许处理中断和禁止中断的系统功能SFC。
SFC39“DIS_INT”用来禁止中断和异步错误处理,可以禁止所有中断,有选择的禁用某些优先级范围的中断,或者只禁止指定的某个中断;
SFC40“EN_INT”用来激活新的中断和异步错误处理,激活中断是指允许处理中断,做好了在中断事件出现时执行对应的组织块的准备。可以全部允许或有选择的允许。
SFC41“DIS_AIRT”延迟处理比当前优先级更高的中断和异步错误,直到用SFC42允许处理中断或当前OB执行完毕,SFC42“EN_AIRT”用来允许立即处理被SFC41暂时禁止的中断和异步错误,SFC41和SFC42配对使用。
5、组织块的变量声明表:OB块是操作系统调用的,OB没有背景数据块,也不能为OB声明输入、输出参数和静态变量,所以,OB的变量声明表中只有临时变量,OB的临时变量可以是基本数据类型、复杂数据类型或数据类型ANY。OB块包含OB的启动信息的20B的临时局部变量TEMP,这些信息在OB启动时由操作系统提供,包括启动事件、启动日期和时间、错误及诊断事件。声明表中的变量的具体内容与组织块的类型有关,参见下表
二、启动组织块
1、CPU的启动模式和启动组织块
400的CPU有3中启动方式,暖启动、热启动和冷启动,300CPU只能暖启动,参见下图:
用户可以通过在启动组织块中编写程序,用来设置CPU的初始化操作,例如设置开始运行时的某些变量的初始值和输出模块的初始值等。
1)暖启动过程映像数据以及非保持的存储器位、定时器和计数器被复位。具有保持功能的存储器位、定时器、计数器和所有的数据块将保留原数值,执行一个OB100后,循环执行OB1,将模式选择开关从STOP切换到RUN,执行一次暖启动。
2)热启动:400CPU在RUN模式下电源突然丢失,很快又重新上电,将执行OB101,自动完成热启动,从上次RUN模式结束时程序被中断之处继续执行,不对计数器等复位。
3)冷启动:所有系统存储区均被清除,即复位为零,包括有保持功能的存储区。调用OB102后循环执行OB1。
2、循环中断组织块
循环中断组织块用于按精确时间间隔循环执行中断程序,例如周期性执行闭环控制系统PID控制程序,间隔时间从cpu从STOP切换到RUN开始计算。S7-300大多数只能使用OB35,其余CPU可以实用的循环中断OB的个数和CPU型号有关。时间间隔不能小于5ms。时间间隔过短,还没有执行完循环中断程序又开始调用它,将会产生时间错误时间,调用OB80,如果没有调用OB80,CPU将进入STOP。
举例说明:
硬件组态如下:采用CPU315-2DP,双击硬件组态中的CPU,打开属性对话框,由【周期性中断】选项卡可知只能使用OB35。
默认的循环周期为100ms,改成1000ms。
OB100程序
用MOVE将MB0的初值置7,即低3位为1,此外用ADD_I将MW6加1.
OB35程序:每经过1000ms,MW2被加1.如下图
禁止和激活硬件中断
SFC40“EN_IRT”和SFC39“DIS_IRT”分别是激活和禁止中断和异步错误的系统功能。参数MODE的数据类型为BYTE,MODE为2是激活OB_NR,采用16进制数来设置。
编写OB1程序如下:
仿真实验如下:进入RUN模式后,可以看到MW6的值一直为1,表明只调用了一次OB100,MB0的低3为被置1,MW2每秒加1.用鼠标模拟产生I0.1循环中断被禁止,MW2不再加1,用鼠标模拟产生I0.0,循环中断被激活,MW2又开始加1.
3、时间中断组织块
300CPU只能使用OB10,400CPU可以使用OB10~17,可以设置在某一个特定的日期时间产生一次时间中断,也可以设置从设定日期时间开始,周期性的重复产生中断,可以用SFC28~SFC30设置、取消和激活时间中断。
1)、基于硬件组态的时间中断
要求在到达设置的日期和时间时,用Q4.0自动启动某台设备。具体如下:
硬件组态:打开CPU属性中的“时刻中断”选项卡,设置执行启动设备的日期和时间,执行方式为“一次”。
生成OB10,编写OB10程序如下,设置时间到时,将需要启动的设备对应的输出点置为1:
OB1程序:用I0.0将Q4.0复位
2)用SFC控制时间中断
除了在硬件组态功能中设置和激活时间中断外,也可以在用户程序中调用SFC来设置和激活时间中断,
在OB1调用SFC31来查询中断状态,读取的状态用MW16保存。如下图。
在I0.0的上升沿调用SFC28和SFC30分别来设置和激活时间中断OB10。用I0.1调用SFC29来禁止时间中断。各SFC的参数中的RET_VAL是执行时可能出现的错误代码,为0时无错误,OB_NR是组织块编号,SFC28用来设置时间中断,它的参数SDT是开始产生中断的日期和时间。PERIOD用来设置执行方式,w#16#0201表示每分钟产生一次中断。
OB10程序如下:将MW2加1.
4、硬件中断组织块
OB40~47用于快速响应信号模块、通信模块和功能模块的信号变化,具有硬件中断功能的上述模块将中断信号传送给到CPU时,将触发硬件中断,S7-300只能用OB40。
1)硬件组态
双击DI/DO模块,在属性对话框设置I0.0上升沿中断,I0.1下降沿中断。如下图所示:
2)编写OB40程序
判断是哪个模块的哪个点产生中断,然后执行相应的操作。
3)禁止和激活硬件中断
OB1程序在I0.2的上升沿调用SFC40激活OB40对应的硬件中断,I0.3的上升沿调用SFC39禁止OB40对应的硬件中断,SFC的MODE为2时,OB_NR为实参的OB的编号,程序如下:
5、延时中断组织块
PLC的普通定时器的工作和扫描工作方式有关,其定时精度较差,需要高精度的延时,应使用延时中断OB,用SFC32启动延时中断,延时时间1~60000ms,精度为1ms,
硬件组态
OB40程序:在I0.0的上升沿出发硬件中断,CPU调用OB40,在OB40中调用SFC32启动延时中断,延时10s,从LD12开始8B临时局部变量是调用OB40的日期时间,用MOVE指令讲起中的后4个字节LD16保存到MD20中。
10s延时时间到,CPU调用SFC32指定的OB20.在OB20中用MOVE保存调用OB20的日期时间的后4个字节,同时将Q4.0置为,并通过PQB4立即输出。
用I0.2将Q4.0复位,在OB1调用SFC34来查询延时中断的状态字,查询结果用MW8保存,其低字节为MB9,OB_NR的实参是延时中断OB的编号。RET_VAL为SFC执行时的错误代码,为0时无错误。
6、异步错误组织块
操作系统可以检测下列错误:不正确的CPU功能、操作系统执行中的错误、用户程序中的错误、I/O中的错误。当检测到一个错误,将启动相应的组织块如下图:
用户可以在组织块中编程,对发生的错误采取相应的措施,以减少或消除错误的影响,若没有生成或下载处理错误相应的组织块,当出现错误时CPU将进入STOP模式,即使下载一个空的OB,CPU也不会进入STOP。
利用系统功能SFC可以屏蔽、延迟或禁止各种OB的启动事件。