在S7系列PLC中,CPU支持OB、FC、FB、DB块,使用它们可以创建有效的用户程序结构,具体介绍如下:
1)组织块(OB)定义程序的结构。OB具有预定义的行为和启动事件,用户也可以创建具有自定义启动事件的OB。
2)功能(FC)和功能块(FB)包含与特定任务或参数组合相对应的程序代码。每个FC或FB都提供一组输入和输出参数,用于与调用块共享数据。FB还使用相关联的数据块(称为背景数据块)来保存执行期间的值状态,程序中的其他块可以使用这些值状态。
3)数据块(DB)存储程序块可以使用的数据。包括背景数据块和共享数据块,前者是与FB调用有关,在调用时自动生成,作为FB块的存储区;后者是全局数据块,用于存储用户数据,其数据格式可以由用户定义。
用户程序的执行顺序是:从一个或多个在进入RUN模式时运行一次的可选启动组织块(OB)开始,然后执行一个或多个循环执行的程序循环OB。OB也可以与中断事件(可以是标准事件或错误事件)相关联,并在相应的标准或错误事件发生时执行。
创建用于自动化任务的用户程序时,需要将程序的指令插入程序块中:
1.组织块 (OB)
OB块对应于CPU中的特定事件,并可中断用户程序的执行。OB 1是用于循环执行用户程序的默认组织块,为用户程序提供基本结构,是唯一一个用户必需的程序块。如果程序中包括其他OB,这些OB会中断OB1的执行。其他OB可执行特定功能,如用于启动任务、用于处理中断和错误用于按特定的时间间隔执行特定的程序代码。
2.功能块 (FB)
FB是从另一个程序块(OB、FB或FC)进行调用时执行的子例程。调用块将参数传递到FB,并标识可存储特定调用数据或该FB实例的特定数据块(DB)。更改背景DB可使通用FB控制一组设备的运行。例如,借助包含每个泵或阀门的特定运行参数的不同背景DB,一个FB可控制多个泵或阀。
3.功能 (FC)
FC是从另一个程序块(OB、FB或FC)进行调用时执行的子例程。与FB不同,FC不具有相关的背景DB。调用块将参数传递给FC。FC中的输出值必须写入存储器地址或全局DB中。
根据实际应用要求,可选择线性结构或模块化结构用于创建用户程序(见图1-61)。
图1-61 用户程序的结构
线性结构程序按顺序逐条执行用于自动化任务的所有指令,通常,线性程序将所有程序指令都放入用于循环执行程序的OB中(即OB 1)。
模块化结构程序调用可执行特定任务的特定程序块。要创建模块化结构,需要将复杂的自动化任务划分为与过程的工艺功能相对应的更小的次级任务,每个程序块都为每个次级任务提供程序段,通过从另一个块中调用其中一个程序块来构建程序。
通过创建可在用户程序中重复使用的通用程序块,可简化用户程序的设计和实现。使用通用程序块具有许多优点:
1)可为标准任务创建能够重复使用的程序块,如用于控制电机或泵。也可以将这些通用程序块存储在可由不同的应用或解决方案使用的库中。
2)将用户程序构建到与功能任务相关的模块化组件中,可使程序的设计更易于理解和管理。模块化组件不仅有助于标准化程序设计,也有助于使更新或修改程序代码更加快速和容易。
3)创建模块化组件可简化程序的调试。通过将整个程序构建为一组模块化程序段,可在开发每个程序块时测试其功能。
4)创建与特定工艺功能相关的模块化组件,有助于简化对已完成应用程序的调试,并减少调试过程中所用的时间。
通过设计FB和FC块执行通用任务,可创建模块化程序块,然后可通过由其他程序块调用这些可重复使用的模块来构建程序,调用块将设备特定的参数传递给被调用块,具体如图1-62所示。当一个程序块调用另一个程序块时,CPU会执行被调用块中的程序代码。执行完被调用块后,CPU会继续执行该块调用之后的指令。
图1-62 块调用示意
如图1-63所示,可嵌套块调用,以实现更加模块化的结构。
图1-63 可嵌套块
①—循环开始 ②—嵌套深度
OB控制用户程序的执行,每个OB的编号必须唯一。CPU中的特定事件将触发组织块的执行。OB无法互相调用或通过FC或FB调用。只有启动事件(例如,诊断中断或时间间隔)可以启动OB的执行。CPU按优先等级处理OB,即先执行优先级较高的OB,然后执行优先级较低的OB。最低优先等级为1(对应主程序循环),最高优先等级为26(对应时间错误中断)。
OB控制以下操作:
1.程序循环
在CPU处于RUN模式时循环执行,主程序块是程序循环OB。用户在其中放置控制程序的指令以及调用其他用户块。允许使用多个程序循环OB,它们按编号顺序执行。OB 1是默认循环OB。
2.启动
在CPU的工作模式从STOP切换到RUN时执行一次,包括处于RUN模式时和执行STOP到RUN切换命令时上电。之后将开始执行主“程序循环”OB。允许有多个启动OB。OB 100是默认启动OB。
3.时间延迟
通过启动中断(SRT_ DINT)指令组态事件后,时间延迟OB将以指定的时间间隔执行。延迟时间在扩展指令SRT_ DINT的输入参数中指定。指定的延迟时间结束时,时间延迟OB将中断正常的循环程序执行。
4.循环中断
循环中断OB将按用户定义的时间间隔(如每隔2s)中断循环程序执行。每个组态的循环中断事件只允许对应一个OB。
5.硬件中断
在发生相关硬件事件时执行,包括内置数字输入端的上升沿和下降沿事件以及HSC(高速脉冲计数器)事件。硬件中断OB将中断正常的循环程序执行来响应硬件事件信号。可以在硬件配置的属性中定义事件。每个组态的硬件事件只允许对应一个OB。
6.时间错误中断
在检测到时间错误时执行。如果超出最大循环时间,时间错误中断OB将中断正常的循环程序执行。最大循环时间在PLC的属性中定义。OB 80是唯一支持时间错误事件的OB。
7.诊断错误中断
在检测到和报告诊断错误时执行。如果具有诊断功能的模块发现错误(如果模块已启用诊断错误中断),诊断OB将中断正常的循环程序执行。