组织块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用于需要快速响应的过程事件,时间出现时马上中止当前正在执行的程序,执行对应的中断程序。diangon.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的启动事件。