PLC 编程基础知识——程序中的块
在西门子博途编程中系统定义了块类型来执行自动化系统中的任务
块类型 | 简要描述 |
组织块 (OB) | 组织块定义用户程序的结构。 |
功能 (FC) | 功能包含用于处理重复任务的程序例程。 功能没有“存储器”。 |
功能块 (FB) | 功能块是一种代码块,它将值永久地存储在背景数据块中,从而即使在块执行完后,这些值仍然可用。 |
背景数据块 | 调用背景数据块来存储程序数据时,该背景数据块将分配给功能块。 |
全局数据块 | 全局数据块是用于存储数据的数据区,任何块都可以使用这些数据。 |
组织块 (OB) |
定义
组织块 (OB) 构成了操作系统和用户程序之间的接口。 组织块由操作系统调用,可以控制(例如)下列操作:
- 自动化系统的启动特性
- 循环程序处理
- 中断驱动的程序执行
- 错误处理
可以对组织块进行编程并同时确定 CPU 的特性。 根据使用的 CPU ,提供有各种不同的组织块。
有关组织块的详细信息,请参见“配置硬件与网络”的“其它配置信息”章节中有关 CPU 操作模式的介绍。
组织块的启动信息
启动某些组织块之后,操作系统将提供可以在用户程序中进行评估的信息。
函数 (FC) |
定义
函数 (根据 IEC 1131-3 标准,函数 (FC) 是不含存储区的代码块。通过函数可在用户程序中传送参数。 因此,函数特别适合取代频繁出现的复杂结构,如计算等。 ) (FC) 是不带存储器的代码块。 由于没有可以存储块参数值的数据存储器。 因此,调用函数时,必须给所有形参分配实参。
函数可以使用全局数据块 (数据块用于存储用户数据。 数据块分为可由所有代码块访问的全局数据块,以及分配给特定功能块调用的背景数据块。) 永久性存储数据。
应用
函数包含一个程序,在其它代码块调用该函数时将执行此程序。 例如,可以将函数用于下列目的:
- 将函数值返回给调用块,例如,数学函数
- 执行工艺功能,例如,通过位逻辑运算进行单个的控制
可以在程序中的不同位置多次调用同一个函数。 因此,函数块简化了对重复发生的函数的编程。
函数块 (FB) |
定义
函数块是一种代码块,它将输入、输出和输入/输出参数永久地存储在背景数据块中,从而在执行块之后,这些值依然有效、。 所以函数块也称为“有存储器”的块。
函数块也可以使用临时变量。 临时变量并不存储在背景数据块中,而用于一个循环。
应用
函数块包含总是在其它代码块调用该函数块时执行的子例程。 可以在程序中的不同位置多次调用同一个函数块。 因此,函数块简化了对重复发生的函数的编程。
函数块的实例
函数块的调用称为实例。 函数块的每个实例都需要一个背景数据块;其中包含函数块中所声明的形参的实例特定值。
函数块可以将实例特定的数据存储在自己的背景数据块中,也可以存储在调用块的背景数据块中。
访问模式
S7-1200 和 S7-1500 提供两种不同的背景数据块访问选项,可在调用函数块时分配给函数块:
- 可优化访问的数据块
- 可优化访问的数据块无固定定义的存储器结构。 在声明中,数据元素仅包含一个符号名,因此在块中没有固定的地址。
- 可一般访问的数据块(与 S7-300/400 兼容)
- 可一般访问的数据块具有固定的存储器结构。 声明元素在声明中包含一个符号名,并且在块中有固定地址。
全局数据块 (DB) |
定义
数据块用于存储程序数据。因此,数据块包含由用户程序使用的变量数据。全局数据块存储所有其它块都可使用的数据。
数据块的最大大小因 CPU 的不同而各异。可以以自己喜欢的方式定义全局数据块的结构。
还可以选择使用 PLC 数据类型 (UDT) 作为创建全局数据块的模板。
用户程序中的全局数据块
每个函数块、函数或组织块都可以从全局数据块中读取数据或向其中写入数据。即使在退出数据块后,这些数据仍然会保存在其中。可以同时打开一个全局数据块和一个背景数据块。
下图所示为不同的数据块访问:
访问模式
S7-1200 和 S7-1500 提供两种不同的全局数据块访问选项:
- 可优化访问的数据块
- 可优化访问的数据块没有固定的定义结构。在声明中,仅为数据元素分配一个符号名称,而不分配在块中的固定地址。
- 可标准访问的数据块(与 S7-300/400 兼容)
- 可标准访问的数据块具有固定的结构。数据元素在声明中分配了一个符号名,并且在块中有固定地址。
ARRAY 全局数据块 (DB) |
ARRAY 数据块 (S7-1500)
ARRAY 数据块是一种特殊类型的全局数据块。这些数据块包含一个任意数据类型的 ARRAY。例如,可以是 PLC 数据类型 (UDT) 的 ARRAY。但这种数据块不能包含除 ARRAY 之外的其它元素。由于采用平面结构,ARRAY 数据块可访问 ARRAY 元素,并将这些元素传递给被调用块。
ARRAY 数据块中始终启用“优化块访问”(Optimized block access) 属性。ARRAY 数据块不可能进行标准访问。
在“移动 > ARRAY 数据块”(Move > ARRAY DB) 区域的“指令 > 基本指令”(Instructions > Basic instructions) 任务卡中,包含有各种 ARRAY 数据块的寻址方式。例如,使用这些指令间接寻址该数据块的名称。
- ReadFromArrayDB:读取数组数据块
- WriteToArrayDB:写入 ARRAY 数据块
- ReadFromArrayDBL:从装载存储器的 ARRAY 数据块中读取
- WriteToArrayDBL:写入装载存储器的 ARRAY 数据块中
背景数据块 |
定义
函数块的调用称为实例。实例使用的数据存储在背景数据块中。
背景数据块的最大大小因 CPU 的不同而各异。函数块中声明的变量决定背景数据块的结构。
访问模式
S7-1200 和 S7-1500 提供两种不同的背景数据块访问选项,可在调用函数块时分配给函数块:
- 可优化访问的数据块
- 可优化访问的数据块无固定的定义结构。声明元素仅在声明中包含一个符号名,且块中没有固定地址。
- 可一般访问的数据块(与 S7-300/400 兼容)
- 可一般访问的数据块具有固定的结构。声明元素在声明中包含一个符号名,并且在块中有固定地址。
CPU 数据块 |
定义
CPU 数据块由 CPU 在运行期间生成。为此,在用户程序中插入“CREATE_DB”指令。可以使用在运行期间生成的数据块来保存数据。
CPU 数据块由可用节点“程序块”文件夹中的小 CPU 图标来表示。与监视其它数据块类型的值类似,可以在在线模式中监视 CPU 数据块的变量值。
无法在离线项目中创建 CPU 数据块。
加载 CPU 数据块
用户程序通过“CREATE_DB”指令生成的 CPU 数据块最初仅在在线模式的设备上提供。下次执行从设备到项目的完整下载时,所有 CPU 数据块都将随其它块一起包含在内。在此期间,CPU 数据块标记有一个小 CPU 图标。但是,无法再次将这些 CPU 数据块上传到设备。
项目中 CPU 数据块的限制
将 CPU 数据块加载到离线项目中之后,可以打开并查看这些数据块的内容。但是请注意,项目中的 CPU 数据块受到写保护。因此,项目中的 CPU 数据块受到以下限制:
- 无法编辑 CPU 数据块,或将这些数据块转换为其它数据块类型。
- 无法为 CPU 数据块指定专有技术保护。
- 无法更改 CPU 数据块的编程语言。
- 无法编译 CPU 数据块或将其下载到设备。
比较 CPU 数据块
将 CPU 数据块加载到离线项目中后,可对所加载的 CPU DB 进行在线/离线比较。比较编辑器提供了相应的差异总结。如果找到不同之处,就可对在线和离线 CPU 数据块进行同步,而无需将离线数据块下载到设备中。
删除 CPU 数据块
可以从项目和 CPU 中删除 CPU 数据块。