结构的嵌套深度 结构(STRUCT) 和 PLC 数据类型 (UDT) 的嵌套深度为 8 级。具体嵌套深度取决于所使用的 CPU。 块类型概述 块类型我们提供了不同的块类型来执行自动化系统中的任务。 下表给出了可用的块类型: 块类型 简要描述 组织块(页 46) (OB) 组织块定义用户程序的结构。 功能 (页 46) (FC)功能包含用于处理重复任务的程序例程。 功能没有“存储器”。 功能块 (页 47) (FB)功能块是一种代码块,它将值yongjiu地存储在背景数据块中,从而即 使在块执行完后,这些值仍然可用。 背景数据块(页 61) 调用背景数据块来存储程序数据时,该背景数据块将分配给功能块。 全局数据块 (页 48)全局数据块是用于存储数据的数据区,任何块都可以使用这些数据组织块 (OB) 定义 组织块 (OB)构成了操作系统和用户程序之间的接口。组织块由操作系统调用,可以控制(例 如)下列操作: • 自动化系统的启动特性 • 循环程序处理 •中断驱动的程序执行 • 错误处理 可以对组织块进行编程并确定 CPU 的特性。根据使用的 CPU ,提供有各种不同的组织块。有关组织块的更多信息,请参见“创建组态”部分“组态自动化系统”中有关 CPU 操作模 式的介绍。 组织块的启动信息启动某些组织块之后,操作系统将提供可以在用户程序中进行评估的信息。有关提供的信息 (如果提供的话),请参见组织块的介绍。
函数 (FC) 定义 函数 (FC)是不带存储器的代码块。 由于没有可以存储块参数值的数据存储器。 调用 函数时,必须给所有形参分配实参。函数可以使用全局数据块yongjiu性存储数据。应用 函数包含一个程序,在其它代码块调用该函数时将执行此程序。 例如,可以将函数用于下列目的: • 将函数值返回给调用块,例如,数学函数 • 执行工艺功能,例如,通过位逻辑运算进行单个的控制可以在程序中的不同位置多次调用同一个函数。 函数块简化了对重复发生的函数的 编程。 说明 调用函数时的参数传送为了避免在使用函数时出错,请参见“块调用时的参数传递 (页 91)”章节中的信息。 参见 创建函数和函数块函数块 (FB)定义 函数块是一种代码块,它将输入、输出和输入/输出参数yongjiu地存储在背景数据块中,从而 在执行块之后,这些值依然有效、。函数块也称为“有存储器”的块。 函数块也可以使用临时变量。 临时变量并不存储在背景数据块中,而用于一个循环。 应用函数块包含总是在其它代码块调用该函数块时执行的子例程。 可以在程序中的不同位置多 次调用同一个函数块。函数块简化了对重复发生的函数的编程。 函数块的实例 函数块的调用称为实例。函数块的每个实例都需要一个背景数据块;其中包含函数块中所 声明的形参的实例特定值。函数块可以将实例特定的数据存储在自己的背景数据块中,也可以存储在调用块的背景数据 块中。访问模式 S7-1200 和 S7-1500提供两种不同的背景数据块访问选项,可在调用函数块时分配给函数 块: • 可优化访问的数据块 可优化访问的数据块无固定定义的存储器结构。在声明中,数据元素仅包含一个符号名, 在块中没有固定的地址。 • 可一般访问的数据块(与 S7-300/400 兼容)可一般访问的数据块具有固定的存储器结构。 声明元素在声明中包含一个符号名,并且 在块中有固定地址。 说明为避免在使用函数块时出错,请参见“块调用时的参数传递 (页 91)”部分。全局数据块 (DB) 定义数据块用于存储程序数据。数据块包含由用户程序使用的变量数据。全局数据块存储 所有其它块都可使用的数据。 数据块的Zui大大小因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 数据块中 参见 ARRAY 数据块的使用示例 (页 50)寻址 ARRAY 数据块中的变量 (页 126) 创建数据块ARRAY 数据块的使用示例 使用 ARRAY 数据块(S7-1500) ARRAY 数据块是仅包含一个 ARRAY 的全局数据块。对于大多数应用程序来说,带有 ARRAY数据类型变量的数据块就已足够,因为使用 ARRAY 数据类型的变量可以直观地对访问进行 编程(例如#myArray[#index]),并提供比 ARRAY 数据块更好的运行性能。但在某些情况 下,必须使用不同的长度来处理ARRAY。ARRAY 数据块特别适合这些情况。 以下示例说明了如何使用 ARRAY 数据块。编程示例在传送带上传输一些单独的物料。这些物料会经过一个扫描仪,此扫描仪可读出该物料携带的信息。该信息被读出后会传送到面板。由于扫描仪和面板具有不同的时钟周期/速度,所 以在所有情况下,都必须缓存物料信息。在以下编程示例中,显示了如何编写用于传递物料信息的程序代码。为此,需使用 ARRAY 数 据块。在该示例中,设置非常灵活,在创建程序代码时无需知道待读取或写入的 ARRAY 数据 块或该数据块的大小。这样,即可使用不同长度的ARRAY。DB_ANY 数据类型具有较高的灵 活性。 使用数据类型 VARIANT 时,可灵活指定待读取或写入的值。如需访问该程序块中的值,则需在运行前传送 ARRAY 数据块。只有这样,才能确定 ARRAY 元素的数据类型以及待读取或写入值的数据类型。 通过特定指令,可确定对象的数量和 ARRAY 数据块的填充级别。操作步骤 创建 PLC数据类型“UDT_Queue”。函数(“FC_Enqueue”和“FC_Dequeue”)均使用该 PLC 数 据类型。这对于访问变量#Queue.Used 很重要,因为函数“FC_Enqueue”会将该变量加 1,而 函数“FC_Dequeue”会将该变量减 1。1. 在项目树中,双击“PLC 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new datatype)。 这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。 2. 在 PLC 数据类型中声明以下行: DB >数据类型:DB_ANY Size > 数据类型:DINT Used > 数据类型:DINT ReadPos >数据类型:DINT WritePos > 数据类型:DINT编程“FC_Enqueue”函数,将物料信息值写入一个 ARRAY数据块中。由于当前的接口编程中 使用 VARIANT 和 DB_ANY 数据类型,无需了解该指定 ARRAY数据块及其值的数据类型。 1. 创建一个 SCL 函数并将其命名为“FC_Enqueue”。 2. 按如下方式声明块接口: 3.编写以下程序代码:编程“FC_Dequeue”函数,从 ARRAY 数据块中读取物料信息并写入面板中。由于当前的接口 编程中使用VARIANT 和 DB_ANY 数据类型,无需了解该指定 ARRAY 数据块及其值的数据类型。这样会在面板上显示物料信息,例如: 1. 创建一个 SCL 函数并将其命名为“FC_Dequeue”。 2.按如下方式声明块接口:通过该函数,检查物料信息是否在数据块中可用。如果可用,请读取指针 #Queue.ReadPos 指向的值,并将该值写入变量 #Value 中。读取物料信息的所有项后,变量 #Queue.Used 会减 1,而指针变量#Queue.ReadPos 会加 1。光标到达数据块结尾处时,该立即复位为 0。如果 数据块为空,则返回错误代码 #4712。要保存物料数据,则需创建一个 ARRAY 数据块。使用 PLC 数据类型“UDT_Material”,作为 ARRAY数据块的数据类型。创建 PLC 数据类型“UDT_Material”。该 PLC 数据类型中包含扫描仪采集到的物料信息 的结构。1. 在项目树中,双击“PLC 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new datatype)。 这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。 2. 在 PLC 数据类型中声明以下行:ArticleNumber > 数据类型:DINT ArticleName > 数据类型:STRING Amount> 数据类型:REAL Unit > 数据类型:STRING 创建 ARRAY数据块“DB_MaterialBuffer”。该 ARRAY 数据数据块中包含有数据类型为“UDT_Material”的物料信息数据记录。物料信息将通过“FC_Enqueue”函数写入 ARRAY 数据块 中。 1.双击“添加新块”(Add new block) 命令。 “添加新块”(Add new block) 对话框随即打开。 2.单击“数据块 (DB)”(Data block (DB))。 3. 输入名称“DB_MaterialBuffer”。 4.选择数据块类型“ARRAY DB”。 5. 选择 PLC 数据类型“UDT_Material”作为 ARRAY 数据类型。