S7-300中各个块之间的联系以及OB块的功能和应用场合

*S7-300中各个块之间的联系以及OB块的功能和应用场合

在简述S7-300中OB块的功能和应用场合之前,我想先简单的梳理一下S7-300中各个块之间的联系。再具体到OB块进行综合的分析。以下是我不成熟的小思路;用来梳理块之间的联系。
首先:PLC对软件编写程序的时候一般有三种编程方法,一是结构化编程,另一种是线性化编程,还有一种是模块化编程。再模块化编程和结构化编程中常常就会用到“块”。

1、 块的概念: 块是存放程序和数据的存储空间。具体根据存放什么来在划分为,程序块和数据块。存放用户程序的为程序块,存放相关数据的为数据块。

2、STEP7主要块有: 组织块(OB),功能块/函数块(FB),功能/函数(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。

3、调用程序块: OB,FB,FC(可以调用除OB块以外的其它程序块)。

4、被调用程序块: FB,FC,SFB,SFC。

5、整体上块的作用: 再PLC程序中有两种程序,一种是厂家再生产PLC时把它固化在PLC内部CPU的系统程序,还有一种是我们需要自己编写且能够随意“擦写”和下载的用户程序。
在编写PLC程序时,为使程序条理清晰和便于管理维护和阅读,软件制作者给我们规制制作了不同的“块”,在我们编写程序时就把不同功能的程序写在不同的程序块中,当PLC运行时,它的CPU就会按照程序需要运行的条件去命令相应的“块”来完成特定的控制任务。

6、具体各个块的作用;
(1)组织块OB
OB由系统自动调用,并执行用户再OB块中编写的程序,所以OB的基本作用是调用用户程序即程序块。
在OB块中编写程序的最大容量,S7-300是16KB。
除主程序循环OB1外,其他OB均是由事件触发的中断。
相当于计算机编程里的主程序。

(2)函数FC
作为子程序用;
作为函数用,函数中通常带形参。
函数中程序的最大容量 S7-300 位16KB。
FC的形参通常称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断),可以在函数的开始,将FC参数清0,位输出参数复位。
相当于计算机编程里的子程序。

(3)函数块FB
FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运算的中间数据。其它程序可以直接使用背景数据区的数据。
FB中程序的最大容量 S7-300是16KB.
FB的接口区比FC多一个静态数据区(STAT),用来存储中间变量。程序调用FB时形参不像FC那样必须赋值,可以通过背景数据块直接赋值。
由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。

(4)数据块DB
DB用来存储用户数据及程序的中间变量,为全局变量。
DB的最大容量,S7-300为32KB,S7-400为64KB。
DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的数据块。(数据块的分类)

★ 共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的最大容量为64KB。
默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可以更改为掉电数据丢失。
如CPU中无足够的内部存储空间保存数据,可将指定的数据保存到共享数据块。存储在共享数据块中的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被指定的功能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。

★ 背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。有关多重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。

★ 基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。

(5)系统函数(SFC)和系统函数块(SFB)
SFC和SFB集成在CPU中,相当于系统提供的可供用户程序调用的FC或FB,实现与CPU系统相关的一些功能,如读写CPU时钟等功能。调用SFB需要背景数据块。

7、具体上总结各个块之间的联系

(1)“OB”组织块的意义和作用
“OB”组织块是PLC的软件操作系统与我们所编写程序的接口,在PLC启动后,PLC里面的CPU就会循环执行OB组织块,在“OB”组织块中我们可以调用“FC”函数和“FB”函数块。“OB”具有多个种类,比如有主程序快“OB1”、中断程序块“OB10”等,这样以来组织块“OB”是具有优先级的。这就像单片机中的优先级相类似。比如中断程序块“OB10”可以打断“OB1”的执行。

(2)“FC”函数的意义及使用
在PLC编程软件中的"FC"是指函数的意思,它是用户自己编写的程序块。在函数(FC)中是没有数据存储器的,它是可以通过调用使用,在调用时要给它的形式参数送一个具体的数值才可以用。另外在这个“FC”函数里面是有局部变量表和块参数的,比如这些变量可以是有输入、输出和输入/输出和临时变量等。它有点类似一个子程序,可以在主程序中调用。

举个PLC启停控制的简单例子,我们可以在主函数中建立一个子函数“FC”命名为“启停控制FC1”,建立好函数后给启动按钮与停止按钮以及输出继电器关联一个具体的实际参数就可以了。比如I0.0和I0.1是启动和停止,Q0.0是输出控制电机,我们把这种函数的调用叫绝对调用,很显然这种方式是不够灵活的。

(3)“FB”函数块的意义和作用
这个“FB”函数块是我们自己编写程序时自己可以创建的,我们创建的这个函数块FB具有他的参数是可以分配的特点,具有相应的存储空间。比如刚才讲的我们在主程序创建了“FC”函数,由于采用了绝对调用显得不够灵活,如果我们用“FB”函数块来操作就显得很“柔性化”了。

我们先在项目中建立一个函数块,在输入参数中建立两个变量分别命名“启动变量”和“停止变量”,再在输出参数中建立一个变量,命名为“电机变量”。然后再通过主程序调用后,启动和停止按钮就不仅限于I0.0和I0.1了,我们可以任意地相关联就可以了,所以通过“FB”函数块的使用使程序更加灵活,增加了程序的“柔性化”。

(4)“DB”数据块的意义和作用
“DB”是数据块,它的作用是储存我们所编写程序时所用的数据的,以及所我们所设置的中间变量也都有它存储。我们把这种数据块“DB”分成全局数据块、数据背景数据块和数据类型数据块三种。全局数据块是存储程序数据的,它可以存储我们前面所设置的变量,比如前面说的“启动变量”和“停止变量”等。

以上就是我对S7-300 PLC“块”的总结。清楚的了解后就可以具体的来分析S7-300中OB块的功能和应用场合。

OB块的功能;
(1)整体功能;
OB由系统自动调用,并执行用户再OB块中编写的程序,所以OB的基本作用是调用用户程序即程序块。
在OB块中编写程序的最大容量,S7-300是16KB。
除主程序循环OB1外,其他OB均是由事件触发的中断。

(2)“OB”组织块的意义和作用
“OB”组织块是PLC的软件操作系统与我们所编写程序的接口,在PLC启动后,PLC里面的CPU就会循环执行OB组织块,在“OB”组织块中我们可以调用“FC”函数和“FB”函数块。“OB”具有多个种类,比如有主程序快“OB1”、中断程序块“OB10”等,这样以来组织块“OB”是具有优先级的。这就像单片机中的优先级相类似。比如中断程序块“OB10”可以打断“OB1”的执行。

3)具体每个OB块的功能和应用场合如下表;
1、 自由循环组织块 OB1
S7CPU启动完成后,操作系统循环执行 OB1,OB1执行完成后,操作系统再次启动 OB1。在 OB1中可以调用 FB、SFB、FC、SFC等用户程序使其循环执行。除 OB90以外, OB1优先级最低,可以被其他 OB中断。 OB1
默认扫描监控时间为 150ms(可设置),扫描超时, CPU自动调用 OB80报错,如果程序中没有建立 OB80, CPU进入停止模式。

2、 日期中断组织块 OB10~OB17
在 CPU属性中,可以设置日期中断组织块 OB10~OB17触发的日期、执行模式(到达设定的触发日期后, OB 只执行一次或按每分、每小时、每周、每月周期执行)等参数,当 CPU的日期值大于设定的日期值时,触发相应的 OB并按设定的模式执行。

在用户程序中也可以通过调用 SFC28系统函数设定 CPU日期中断的参数, 调用 SFC30激活日期中断投入运行,与在CPU属性中的设置相比,通过用户程序,可以在 CPU运行时灵活 地修改设定的参数,两种方式可以任意选择,也可以同时对一个 OB进行设置。

3、 时间延迟中断组织块 OB20~OB23
时间延迟中断组织块 OB20~OB23的优先级及更新过程映像区的参数需要在 CPU属性中设置, 通过调用系统 函数 SFC32触发执行, OB号及延迟时间在 SFC32参数中设定, 延迟时间为 1~60000ms,大大优于定时器精度。

4、 循环中断组织块 OB30~OB38
循环中断组织块 OB30~OB38按设定的时间间隔循环执行, 循环中断的间隔时间在 CPU属性中设定, 每一个 OB默认的时间间隔不同, 例如 OB35默认的时间间隔为 100ms,在 OB35中的用程序将每隔 100ms调用一次, 时间间隔可以自由设定, 最小时间间隔不能小于 55ms。

OB中的用户程序执行时间必须小于设定的时间间隔, 如果间隔时间较短,由于循环中断 OB没有完成程序扫描而被再次调用,从而造成 CPU故障,触发 OB80报错,如果程序中没有创建 OB80,CPU进入停止模式。通过调用 SFC39~SFC42系统函数可以禁止、延迟、使 能循环中断的调用。循环中断组织块通常处理需要固定扫描周期的用户程序,例如 PID 函数块通常需在循 环中断中调用以处理积分时间的计算。

5、硬件中断组织块 OB40~OB47
硬件中断也叫过程中断,由外部设备产生,例如功能模块 FM、通信处理器 CP及数字量输入、输出模块等。 通常使用具有硬件中断的数字量输入模块触发中断响应,然后为每一个模块配置相应的中断 OB(一个模块 只能良一个中断 OB, S7-300 系列 PLC。

CPU只能触发硬件中断 OB40),在模块配置中可以选择输入点的上升沿、下降沿或全部作为触发中断 OB的事件。配置中的中断事件出现,中断主程序,执行中断 OB中的用 户程序一个周期,然后跳回中断处继续执行主程序。

使用中断与普通输入信号相比,没有主程序扫描和过程映像区更新时间,适合需要快速响应的应用。如果输入模块中的一个通道触发硬件中断,操作系统将识别模块的槽号及触发相应的 OB,中断 OB执行之后发送与通道相关的确认。

在识别和确认过程中,该通道再次触发的中断事件将丢失;如果模块其他通道 触发中断事件, 中断不会丢失, 在当前正在运行的中断确认之后触发; 如果是不同的模块触发的中断事件, 中断请求被记录,中断 OB在空闲(没有模块其他通道的中断请求)时触发。通过调用 SFC39~SFC42系统 函数可以禁止、延迟、使能硬件中断的调用。

6、DPV1中断组织块 OB55~OB57
CPU响应 PROFIBUS-DP V1 从站触发的中断信息。

7、多处理器中断组织块 OB60
用于 S7-400 系列 PLC多 CPU (一个机架中最多插入 4 个 CPU完成同一个复杂任务) 处理功能,通过调用 SFC35, 可以触发 OB60在多个 CPU中同时执行。

8、时钟同步中断组织块 OB61~OB64
用于处理 PROFIBUS-DP V1 等时钟同步, 从采集各个从站的输入到逻辑结果输出, 需要经过从站输入信号采样循环(信号转换) 、从站背板总线循环(转换的信号从模块传递到从站接口) 、PROFIBUS-DP总线循环 (信号自从站传递到主站) 、程序执行循环(信号的程序处理) 、PROFIBUS-DP总线循环(信号从主站传递 到从站)、从站背板总线循环(信号从从站接口传递到输出柜块)及模块输出循环(信号转换) 7 个循环, 时钟同步中断将 7 个循环同步,优化数据的传递并保证 PROFIBUS-DP各个从站数据处理的同步性。 PROFIBUS 时钟同步中断只能用于 S7-400 系列 PLC CPU(具有 DP V2 功能)。

9、工艺同步处理中断组织块 OB65
用于 T-CPU(具有运动控制功能的 CPU)工艺块与开始程序的同步处理。

10、冗余故障中断组织块 OB70、OB72
用于 S7-400H 冗余系统,当 I/O 冗余故障,例如冗余的 PROFIBUS-DP从站故障时,触发 OB70的调用,当 CPU冗余故障,如 CPU切换、同步故障时,触发 OB72的调用。如果 I/O 冗余,或者 CPU冗余故障而在 CPU 中没有创建 OB70、OB72,CPU不会进入停止模式。

11、异步故障中断组织块 OB80~OB87
异步故障中断用于处理各种故障事件。
OB80:处理时间故障、 CIR(Configuration In Run)后的重新运行等功能,例如 OB1或 OB35运行超 时, CPU自动调用 OB80报错,如果程序中没有创建 OB80,CPU进入停止模式。
OB81:处理与电源相关的各种信息( S7-400 系列 PLC CPU只有电池故障时调用) ,出现故障, CPU自动调 用 OB81报错,如果程序中没有创建 OB81,CPU不会进入停止模式。
OB82:诊断中断,如果使能一个具有诊断中断模块的诊断功能(例如断线、传感器电源丢失) ,出现故障时 调用 OB82,如果程序中没有创建 OB82,CPU进入停止模式。诊断中断还对 CPU所有内外部故障,包括模块前连接器拔出、硬件中断丢失等作出响应。
OB83:用于模块插拔事件的中断处理, 事件出现, CPU自动调用 OB83报警,如果程序中没有创建 OB83,CPU 进入停止模式。
OB84:用于处理存储器、冗余系统中两个 CPU的冗余连接性能降低等事件。
OB85:用于处理操作系统访问模块故障、 更新过程映像区时 I/O 访问故障、 事件触发但相应的 OB没有下载 到 CPU等事件,事件出现, CPU自动调用 OB85报错,如果程序中没创建 OB85,CPU进入停止模式。
OB86:用于处理扩展机架(不适用于 S7-300 系列)、PROFIBUS-DP主站、 PROFIBUS-DP或 PROFINET I/O 分布 I/O 系统中站点故障等事件,事件出现, CPU自动调用 OB86报错,如果程序中没有创建, CPU进入停
止模式。
OB87:用于处理 MPI GD 通信及时钟同步故障,事件出现, CPU自动调用 OB87报错,如果程序中没有 创建, CPU不会进入停止模式。

12、处理中断组织块 OB88
用于处理程序嵌套、区域数据分配故障,故障出现, CPU自动调用 OB88报错,如果程序中没有创建, CPU 进入停止模式。

13、背景循环中断组织块 OB90
优先级最低,保证 CPU最短的扫描时间,避免过程映像区更新过于频繁。程序的下载和 CPU中程序的删除 触发 OB90的调用。只能用于 S7-400 系列 PLC CPU。

14、启动中断组织块 OB100~OB102
用于处理 CPU启动事件,暖启动 CPU调用 OB100,热启动 CPU调用 OB101 (不适合 S7-300 系列 PLC和 S7-400H),冷启动 CPU调用 OB102,温度越低, CPU启动时清除存储器中数据区的类型越多。

15、同步错误中断组织块 OB121、OB122
OB121处理与编程故障有关的事件,例如调用的函数没有下载到 CPU中、 BCD码出错等, OB122处理与 I/O 地址访问故障有关的事件,例如访问一个 I/O 模块时,出现读故障等。如果上述故障出现,在程序中没有 创建 OB121、OB122,CP进入停止模式。

注意:不是所有的 OB都可以在 S7 CPU中使用,例如 S7-300 系列 PLC PU 中只有暖启动 OB100,操作 系统不能调用 OB101、OB102,CPU中可以使用的 OB请参考 CPU选型手册。

S7-300 系列 PLC中组织块的优先级是固定的,不能修改,在 S7-400 系列 PLC中下列组织块的优先级可以 进行修改:
OB10~OB47:优先级修改范围 2~23。
OB70~OB72:优先级修改范围 2~38。
OB81~OB87:优先级修改范围 2~26,优先级 24~26 确保异步故障中断不被其他的事件中断。

几个组织块可以具有相同的优先级,当事件同时出现时,组织块按事件出现的先后顺序触发,如果超过 12个相同优先级的 OB同进触发,中断可能丢失。

以上就是我对S7-300关于块方面以及具体到OB块,每一个OB块具体详细的功能以及适宜的应用场景,如果由错误的地方还希望大家能多多指正,我会好好修改的。

猜你喜欢

转载自blog.csdn.net/qq_45252077/article/details/106105264