2.2.2 用户程序结构简介
S7-1200与S7-300/400的用户程序结构基本上相同。
1.模块化编程
模块化编程将复杂的自动化任务划分为对应于生产过程的技术功能的较小的子任务,每个子任务对应于一个称为“块”的子程序,可以通过块与块之间的相互调用来组织程序。这样的程序易于修改、查错和调试。块结构显著地增加了PLC程序的组织透明性、可理解性和易维护性。各种块的简要说明见表2-2,其中的OB、FB、FC都包含程序,统称为代码(Code)块。所有的代码块和数据块的总数最多为1024个。
表2-2 用户程序中的块
被调用的代码块又可以调用别的代码块,这种调用称为嵌套调用。从程序循环OB或启动OB开始,嵌套深度为16;从中断OB开始,嵌套深度为6。
在块调用中,调用者可以是各种代码块,被调用的块是OB之外的代码块。调用函数块时需要为它指定一个背景数据块。
2.组织块
组织块(Organization Block,OB)是操作系统与用户程序的接口,由操作系统调用,用于控制扫描循环和中断程序的执行、PLC的启动和错误处理等。组织块的程序是用户编写的。
每个组织块必须有一个唯一的OB编号,123之前的某些编号是保留的,其他OB的编号应大于等于123。CPU中特定的事件触发组织块的执行,OB不能相互调用,也不能被FC和FB调用。只有启动事件(例如诊断中断事件或周期性中断事件)可以启动OB的执行。
(1)程序循环组织块
OB1是用户程序中的主程序,CPU循环执行操作系统程序,在每一次循环中,操作系统程序调用一次OB1。因此OB1中的程序也是循环执行的。允许有多个程序循环OB,默认的是OB1,其他程序循环OB的编号应大于等于123。
(2)启动组织块
当CPU的工作模式从STOP切换到RUN时,执行一次启动(STARTUP)组织块,来初始化程序循环OB中的某些变量。执行完启动OB后,开始执行程序循环OB。可以有多个启动OB,默认的为OB100,其他启动OB的编号应大于等于123。
(3)中断组织块
中断处理用来实现对特殊内部事件或外部事件的快速响应。如果没有中断事件出现,CPU循环执行组织块OB1和它调用的块。如果出现中断事件,例如诊断中断和时间延迟中断等,因为OB1的中断优先级最低,操作系统在执行完当前程序的当前指令(即断点处)后,立即响应中断。CPU暂停正在执行的程序块,自动调用一个分配给该事件的组织块(即中断程序)来处理中断事件。执行完中断组织块后,返回被中断的程序的断点处继续执行原来的程序。
这意味着部分用户程序不必在每次循环中处理,而是在需要时才被及时地处理。处理中断事件的程序放在该事件驱动的OB中。
4.3节详细介绍了各种中断组织块和中断事件的处理方法。
3.函数
函数(Function,FC)是用户编写的子程序,STEP 7 V5.5x称为功能。它包含完成特定任务的代码和参数。FC和FB(函数块)有与调用它的块共享的输入参数和输出参数。执行完FC和FB后,返回调用它的代码块。
函数是快速执行的代码块,可用于完成标准的和可重复使用的操作,例如算术运算。或完成技术功能,例如使用位逻辑运算的控制。
可以在程序的不同位置多次调用同一个FC或FB,这样可以简化重复执行的任务的编程。函数没有固定的存储区,函数执行结束后,其临时变量中的数据可能被别的块的变量覆盖。
4.函数块
函数块(Function Block,简称为FB)是用户编写的子程序,STEP 7 V5.x称为功能块。调用函数块时,需要指定背景数据块,后者是函数块专用的存储区。CPU执行FB中的程序代码,将块的输入、输出参数和局部静态变量保存在背景数据块中,以便在后面的扫描周期访问它们。FB的典型应用是执行不能在一个扫描周期完成的操作。在调用FB时,自动打开对应的背景数据块,后者的变量可以被其他代码块访问。
调用同一个函数块时使用不同的背景数据块,可以控制不同的对象。
5.数据块
数据块(Data Block,DB)是用于存放执行代码块时所需的数据的数据区,与代码块不同,数据块没有指令,STEP 7按变量生成的顺序自动地为数据块中的变量分配地址。
有两种类型的数据块:
1)全局数据块存储供所有的代码块使用的数据,所有的OB、FB和FC都可以访问它们。
2)背景数据块存储的数据供特定的FB使用。背景数据块中保存的是对应的FB的输入、输出参数和局部静态变量。FB的临时数据(Temp)不是用背景数据块保存的。