用户程序结构简介
S7-1200与S7-300/400的用户程序结构基本上相同。
模块化编程
模块化编程将复杂的自动化任务划分为对应于生产过程的技术功能的较小的子任务,每个子任务对应于一个称为“块”的子程序,可以通过块与块之间的相互调用来组织程序。
这样的程序易于修改、查错和调试。块结构显著地增加了PLC程序的组织透明性、可理解性和易维护性。其中的OB、FB、FC都包含程序,统称为代码(code)块。
代码块的个数没有限制,但是受到存储器容量的限制。
被调用的代码块又可以调用别的代码块,这种调用称为嵌套调用。
从程序循环OB或启动OB开始,S7-1200的嵌套深度为16;从中断OB开始,S7-1200的嵌套深度为6。
在块调用中,调用者可以是各种代码块,被调用的块是OB之外的代码块。调用函数块时需要为它指定一个背景数据块。
组织块
组织块(organization blook,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中。
函数
函数(function)是用户编写的子程序,简称为FC,STEP7V5.5将其称为功能。它包含完成特定任务的代码和参数。
FC和FB(函数块)有与调用它的块共享的输入参数和输出参数。执行完FC和FB后,返回调用它的代码块。
函数是快速执行的代码块,可用于完成标准的和可重复使用的操作,例如算术运算。或完成技术功能,例如使用位逻辑运算的控制。
可以在程序的不同位置多次调用同一个FC和FB,这样可以简化重复执行的任务的编程。函数没有固定的存储区,函数执行结束后,其临时变量中的数据就丢失了。
函数块
函数块(function block)是用户编写的子程序,简称为FB,STEP7V5.5将其称为功能块。
调用函数块时,需要指定背景数据块,后者是函数块专用的存储区。CPU执行FB中的程序代码,将块的输入、输出参数和局部静态变量保存在背景数据块中,以便在后面的扫描周期访问它们。
FB的典型应用是执行不能在一个扫描周期完成的操作。在调用FB时,自动打开对应的背景数据块,后者的变量可以供其他代码块使用。
调用同一个函数块时使用不同的背景数据块,可以控制不同的对象。
S7-1200的某些指令(例如符合IEC标准的定时器和计数器指令)实际上是函数块,在调用它们时需要指定配套的背景数据块。