传递 STRING或 WSTRING 数据类型的变量 说明 可以将 STRING 或 WSTRING 数据类型的变量作为参数进行传递下表列出了不同CPU 系列中 (W)STRING 的传递规则: CPU 系列 数据类型 块调用中的传递规则 S7-300/400 STRING声明的形参和实参长度必须相同。 S7-1200/15 00 STRING WSTRING声明的形参和实参长度可以不同。在运行过程中,如果目标参数的声明长度小于接 收的 (W)STRING 参数长度,则截断(W)STRING 参数并将使能输出 ENO 设置为 FALSE。 在程序编辑器中,参数处的灰色矩形表示 (W)STRING在运行过程中可能被截断。 例外: 调用 STL 块时,形参和实参的声明长度必须始终相同。下图显示了一个块调用中,声明的形参和实参长度不同。由于声明的长度不同,在运行过程中,“Input_String_20”和“Output_String_10”可能会截断。
PLC 数据类型 (UDT) 的基本知识 说明PLC 数据类型 (UDT) 是一种复杂的用户自定义数据类型,用于声明一个变量。这种数据类型是一个由多个不同数据类型元素组成的数据结构。其中,各元素可源自其它 PLC 数据类型、 ARRAY,也可直接使用关键字 STRUCT声明为一个结构。因此,嵌套深度限制为 8 级。 PLC 数据类型 (UDT)可在程序代码中统一更改和重复使用。系统自动更新该数据类型的所用 使用位置。 PLC 数据类型的优势: •通过块接口,在多个块中进行数据快速交换 • 根据过程控制对数据进行分组 • 将参数作为一个数据单元进行传送 使用 PLC 数据类型创建数据块时,可将 PLC 数据类型声明为一种类型。基于该类型,可以创建多个数据结构相同的数据块。并根据具体任务,通过输入不同的实际值对这些数据块进行调整。 例如,为颜料混合配方创建一个 PLC数据类型的实例。之后,再将该数据类型分配给多个数 据块。这样,每个块中包含不同的数量信息。下图显示了该应用中具体的数据类型分配:PLC 数据类型可应用于以下应用中: • PLC数据类型可用作逻辑块的变量声明或数据块中变量的数据类型。 • PLC 数据类型可用作模板,创建数据结构相同的全局数据块。 • PLC数据类型在 S7-1200 和 S7-1500 中可用作模板,创建结构化的 PLC 变量。 PLC 数据类型的嵌套深度 PLC数据类型 (UDT) 的嵌套层级深度为 8 级。 匿名结构的缺陷 在这种结构化变量中,元素的寻址方式都相同,而不考虑该元素采用 PLC数据类型声明,还 是采用匿名结构声明。 使用匿名结构具有以下缺点: • 通过复制进行重用时,结构都相同。这将导致结构更改困难。 •匿名结构与 PLC 数据类型 (UDT) 的相同结构不兼容。 • 由于在运行过程会检查结构元素的类型是否匹配,因而可导致系统性能下降。• 由于所有元素必须单独评估,因此在使用匿名结构时,很容易超出上限。 示例 以下示例说明如何定义“MyUDT” PLC数据类型。
系统生成的 PLC 数据类型某些指令在实例派生过程中会生成其自己的 PLC 数据类型(保存在“PLC 数据类型”(PLC data types)项目文件夹中)。在库中请勿使用这些由系统生成的 PLC 数据类型,否则可能会导致 系统特性异常。必要时,这些由系统创建的 PLC数据类型不得存储在库中。从块生成外部源 从块生成外部源时,在块接口中直接对 PLC 数据类型的默认值进行的更改不会导出到源。也就是说在重新导入源时,这些值将不可用。此时,将使用默认值。为防止丢失已修改默认值 的数据,必须直接在 PLC数据类型中而不是在块接口中进行更改。在这种情况下,生成外部 源时也会导出这些更改。传递一个 PLC 数据类型 (UDT) 的变量 说明声明为 PLC 数据类型 (UDT) 的变量也可作为实参进行传递。如果形参在变量声明中声明为 PLC 数据类型(UDT),则待传递变量的 PLC 数据类型 (UDT) 必须与实参的相同。 在块调用时,声明为 PLC 数据类型 (UDT)的变量元素也可作为实参进行传递,但前提是该变 量元素的数据类型与形参数据类型相匹配。 如果结构和用户自定义 PLC数据类型的结构相同,则可相互分配。即,所有结构元素的数据类型和顺序都必须相同。在嵌套结构中,低层级的结构及其元素的数据类型和顺序也必须相 匹配。如果所有结构元素(包括低层级结构)的数据类型和顺序均相同,两个不同的 PLC 数据类型 也可相互分配。PLC 数据类型的名称不必相同。用户自定义的 PLC 数据类型和结构不能分配给系统数据类型。寻址 PLC 数据类型 (UDT) 寻址 PLC 数据类型的数据元素PLC 数据类型可用作模板,创建各种程序元素。例如,可从 PLC 数据类型生成 PLC 变量或数 据块。因此,无法直接访问 PLC数据类型。但可以访问基于某个 PLC 数据类型创建的程序元 素。命名值数据类型的基础知识 (S7-1500) 简介“命名值”为具有唯一名称的值。命名值在整个程序中引用非常方便,并且可以提高程序的 可读性和可维护性。 在 TIA Portal中,通过“命名值数据类型”声明命名值。其中一组值与一组唯一的名称相关联。命名值数据类型基于对命名值数据类型中的所有元素均有效的基本数据类型。基于命名值数据类型的变量,假定所有值均位于基本数据类型的值范围内,因此包含声明中未显示指定的 值。 命名值的数据类型仅在软件单元中可用,且支持以下SIMATIC 编程语言: • LAD • FBD • STL • SCL • GRAPH 命名值数据类型的应用示例如下:应用示例:命名值数据类型 (页 313) 说明 创建命名值数据类型 命名值数据类型在项目树的“PLC 数据类型”(PLCdata types) 文件夹中创建。 另请参见“创建命名值数据类型 (页 9773)” 文档化编程可在文本文档中声明命名值数据类型。文档的文件扩展名为 *.nvt。 另请参见“文档化编程 (页 9771)” 声明以下语法用于声明命名值数据类型:可选 指定一个或多个命名值数据类型的命名空间。可为每个命名值数据类型定义一个命名空间,也可在一个命名空间中放置多个数据 类型。 如果未定义命名空间,则数据类型不处于命名空间中。使用命名值数据类型命名值数据类型可用作模板,用于创建各种程序元素。可按以下方式进行更换: • 可在块接口中基于命名值数据类型声明参数。 •可在全局数据块中基于命名值数据类型声明元素。 • 可在 PLC 数据类型 (UDT) 中基于命名值数据类型声明元素。 说明不自动更新参考位置 由于命名值数据类型采用文档化编程,因此参考位置不自动更新。例如,如果对命名值数据 类型进行重命名,则不会自动修改PLC 程序中的参考位置。而是会在编译期间报告语法错误。 此时需要手动更新参考位置。 唯一寻址命名值可在运算中使用命名值,方法与基本数据类型的其它常量相同。其也可用于声明 ARRAY 边 界或 STRING长度。应用示例:命名值数据类型 (S7-1500) 应用示例的目标 此应用示例演示了如何在自动化项目中使用命名值数据类型。在项目中控制一个定位轴。命名值数据类型用于在整个程序中为特定轴参数分配唯一名称。这样,即可在程序中轻松引用,从而显著提高程序的可读性和可维护性。 示例程序 下图显示了命名值数据类型"nvtMoveAbsoluteDirection"。其包含轴的可能运动方向的定义:下图显示了工艺对象"TO_PositioningAxis" 的调用。 • 轴具有输入参数"Direction",其控制轴的运动方向。调用轴时,参数的实际值由 "nvtMoveAbsoluteDirection" 传送。 •轴具有不同的输出参数,这些参数将轴的状态信息返回给调用块。状态值通过 IF 指令传 送到"nvtPositionerStatus"。应用示例:使用命名值数据类型创建状态机 (S7-1500) 应用示例的目标此应用示例显示了如何使用命名值数据类型来实现状态机。 在项目中,定义了受控过程支持的不同状态。命名值数据类型用于在整个程序中为状态分配唯一名称。以便于在整个程序中引用状态。 示例程序 下图显示了命名值数据类型"nvtOperationStates"。其中包含过程状态的定义:下图显示了一个通过使用 CASE 语句来更改"nvtOperationStates" 值的块。通过这种方式,可 以为 "nvtOperationStates"的所有参考位置集中设置过程的当前状态。有关 STRUCT 的基本信息 说明 STRUCT数据类型是指一种元素数量固定但数据类型不同的数据结构。结构也支持嵌套,并 可包含 STRUCT 或 ARRAY数据类型的元素。结构可用于根据过程控制系统分组数据以及作 为一个数据单元来传送参数。变量中直接使用的结构声明称为匿名结构。匿名结构可具有以下形式:结构的嵌套深度和数量 结构 (STRUCT) 的嵌套层级深度为 8 级。S7-1200/S7-1500 系列 CPU 中,一个数据块中Zui多包含 252 个结构 (STRUCT)。如果要使用更多结构,则需要使用 PLC 数据类型 (UDT) 代替“STRUCT”数据类型。 使用 PLC 数据类型 (UDT)(页 244) 传递 STRUCT 数据类型的参数 STRUCT 数据类型可作为参数进行传递。有关将 STRUCT作为参数的更多信息,请参见 “传递 STRUCT 数据类型的变量 (页 321)”匿名结构的缺陷在这种结构化变量中,元素的寻址方式都相同,而不考虑该元素采用 PLC 数据类型声明,还 是采用匿名结构声明。使用匿名结构具有以下缺点: • 维护成本增加:如果对一个匿名结构进行了多次复制,则在更改过程中该匿名结构也必 需进行相应的多次更改。• 匿名结构与 PLC 数据类型 (UDT) 的相同结构不兼容。 • 由于系统会检查所有结构元素的类型是否匹配,因而会导致性能下降。• 存储空间要求增加:每个匿名结构都是一个单独的对象,其描述信息将加载到 AS 中。 示例 如果在一个 PLC 数据类型 (UDT)中声明数据类型为 STRUCT 的变量,则使用方式将增加(参 见左图)。但是,也可以直接使用数据类型 STRUCT对变量进行声明(参见右图)。 使用或不使用 PLC 数据类型 (UDT) 对结构化变量“Motor”进行声明。