优势• 可重用性。• 可以进行多个调用。•更清晰的程序与更少的背景数据块。• 简单的程序复制。• 对于编程中的结构化是个好选择。属性•多重实例是背景数据块中的内存区域。建议使用多重实例可以…• 减少背景数据块的数量。• 创建可重复使用和清晰的用户程序。•编写本地函数,例如定时器,计数器,边缘计算。示例如果你需要时间和计数器功能,使用“IEC 计时器”块和“IEC计数器”块,而不是juedui地址的 SIMATIC计时器。如果可能的话,在这里可以使用多重实例。用户程序中的块数量将保持在较低的水平。作为参数的实例传递(V14)被调用块的实例可以被定义为 InOut 参数。优势• 可以创建标准化的函数,其动态实例被传递。•只有在调用块的时候才会指定使用哪个实例。优势• 结构良好的存储区域。• 访问速度快。属性• 用户程序中的所有块都可以访问全局数据块。•全局数据块的结构可以由所有数据类型任意组成。• 全局数据块可以通过程序编辑器创建,也可以根据之前创建的“用户自定义PLC数据类型”创建 (见章节 3.6.4 STRUCT 数据类型和 PLC 数据类型)。• Zui多可以定义 256个结构化变量(ARRAY, STRUCT)。这不适用于从 PLC 数据类型派生的变量。建议•当数据在不同的程序部分或块使用时,使用全局数据块下载但不重新初始化为了改变已经在控制器中运行的用户程序,S7-1200(固件V4.0)和 S7-1500 控制器提供了在运行过程中扩展优化函数块或数据块接口的选项。您可以在不将控制器设置为 STOP的情况下加载更改的块,也不会影响已经加载的变量的实际值。在控制器处于 RUN 模式时,执行以下步骤。1.启用“下载但不重新初始化”。2. 在现有块中插入新定义的变量。3. 加载块到控制器中。优势•重新加载新定义的变量,不中断运行过程。控制器保持“RUN”模式。属性• 下载但不重新初始化只适用于优化的块。•初始化新定义的变量。现有的变量保留其当前值。• 一个有预留的块在控制器中需要更多的内存空间。•内存储备取决于控制器的工作内存。Zui大为 2 MB。• 假设已经为了块定义了内存预留。• 默认下,内存预留为 100 byte。•内存预留是为每个块单独定义的。• 块可以被可变地扩展。建议•为调试期间要扩展的块(例如测试块)定义内存储备。由于现有变量的实际值仍然存在,调试过程不会受到下载的干扰。示例:设置块上的内存预留下表描述了如何为下载但不重新初始化设置内存预留。块的可重用性块概念提供了许多以结构化和有效的方式进行编程的选项。优势•块可以普遍用于用户程序的任何位置。• 块可以在不同的项目中普遍使用.•当每个块接收到一个独立的任务时,一个清晰的、结构良好的用户程序就会自动创建。• 显著减少的错误来源。•可以进行简单的错误诊断。建议如果您想重复使用该块,请注意以下建议:•总是将块视为封装的功能。也就是说,每个块代表整个用户程序中完成的部分任务。• 使用多个循环主 OB 块对工厂部件进行分组。•总是通过它的接口而不是实例来执行数据交换 (见章节 3.4.1 块接口的数据交换)。• 不使用项目特定数据,避免以下块内容:–访问全局数据块和使用单一背景数据块– 访问变量– 访问全局常量•可重复使用的块与库的专有知识保护块有相同的需求。这就是为什么您必须基于“多重实例能力”块属性检查块的可重用性。在检查之前编译代码块。块的接口类型FB和 FC 有三种不同的接口类型: In、InOut 和Out。通过这些接口类型,参数被提供给块。参数被处理并在块中输出。InOut参数用于将数据传输到被调用块以及返回结果。数据的参数传输有两种不同的选项。属性• 每个块显示与引用的参数相同的行为。•实际参数在块被调用时被引用,即访问时,直接读取或写入实际参数的值。建议• 通常使用 InOut 接口类型的结构化变量(如 ARRAY,STRUCT,STRING,type…),以避免不必要地扩大所需的数据内存。当调用块时传输具有“非优化访问”属性的优化数据时,它通常作为副本传输。当块包含许多结构化参数时,这可能会迅速导致块的临时存储区域(本地数据栈)溢出。参数传递概述下表概述了具有基本数据类型或结构化数据类型的S7-1200/1500 块参数是如何传输的。存储概念对于 STEP7,全局存储区域和本地存储区域之间通常存在差异。全局存储区域对于用户程序中的每个块都是可用的。本地存储区域仅在各自的块内可用。块接口的数据交换如果您封装函数并仅通过接口对块之间的数据交换进行编程,那么您显然具有优势。优势•程序可以模块化地由带有部分任务的现成模块组成。• 程序易于扩展和维护。• 由于没有隐藏的交叉访问,程序代码更容易阅读和测试。建议•如果可能的话,只使用本地变量。您可以普遍地以模块化的方式使用这些块。• 通过块接口(In, Out,InOut)使用数据交换,从而保证块的可重用性。•只使用背景数据块作为各自功能块的本地存储。其他块不应该写入背景数据块。全局存储当存储可以从用户程序的任何位置访问时,就称为全局存储。有硬件相关的存储(例如:位存储、时间、计数器等)和全局数据块。对于依赖于硬件的存储区域,存在这样的危险:程序可能无法移植到任何控制器,因为那里的区域可能已经被使用了。这就是为什么应该使用全局数据块而不是依赖于硬件的存储区域。优势.•用户程序可以通用使用,独立于硬件。• 用户程序模块化配置,无需为不同用户划分位存储区域。•优化的全局数据块显然比因为兼容性原没有优化的位存储区更强大。Programming Guideline forS7-1200/1500条目 ID: 81318674, V1.6, 12/2018 60Copyright Siemens AG2018 All rights reserved建议• 不要使用任何位存储区,而是使用全局数据块。•避免硬件依赖的内存,例如,时钟存储器或计数器。在多重实例中使用 IEC 计数器和计时器(见章节 3.2.5 多重实例)。IEC计时器可以在“指令-基本指令-定时器操作”中找到。本地存储• 静态变量• 临时变量建议• 如果值是需要在下一个周期使用使用静态变量。•使用临时变量作为当前周期的中间存储。临时变量的访问时间比静态变量短。• 如果一个 Input/Output变量被频繁访问,使用一个临时变量作为中间存储来节省运行时间。注意 优化块:在每次块调用中使用默认值(S7-1500/S7-1200固件 V4 或更高版本)初始化临时变量。非优化的块:临时变量在块的每次调用时都没有定义。存储区域访问速度STEP 7提供不同的存储访问选项。由于系统相关的原因,对不同存储区域的访问有快有慢。由高到低的 S7-1200/1500 访问速度1.优化块:临时变量,FC 和 FB 参数,非保持型静态变量,变量[PLC 数据类型]。2. 对编译的访问权限已知的优化块:– 保持型FB 变量。– 优化的全局数据块。3. 对非优化块的访问。4. 在运行时计算数组索引的间接寻址(例如 Motor [i])。5.需要在运行时进行检查的访问。– 访问运行时创建或间接打开的数据块(例如 OPN DB[i])。– 寄存器访问或间接内存访问。6.在优化块和非优化块之间复制结构(字节数组除外)。保持性在电源故障的情况下,控制器用其缓冲能量将保持数据从控制器的工作存储器复制到非易失性存储器。重新启动控制器后,使用保持的数据恢复程序进程。根据不同的控制器,可保持的数据量大小不同。优势•保持性数据在控制器从 STOP 到 RUN或在电源故障和控制器重启的情况下保持其值。属性对于优化的数据块的基本变量,可单独设置保持性。非优化数据块只能定义为完全保持或非保持。保持性数据可以通过“内存复位”或“重置为出厂设置”的操作清除:•控制器的工作开关(MRES)• 控制器显示屏• 通过 STEP 7(TIA 博途) 在线操作建议不要使用“在 IDB中设置”。保持性数据总是设置在功能块中,而不是在背景数据块中。“IDB 中的设置”增加程序序列的处理时间。总是在 FB的接口中选择“非保持”或“保持”。示例: 保持性计数器你也可以声明函数(计时器, 计时器等)的实例的保持性。正如章节 3.2.5多重实例所描述的,应该总是把这样的函数编程为多重实例。如果 PLC 上的保持内存不足,则可以以数据块的形式存储数据,这些数据块只位于PLC 的装载内存中。下面以 S7-1200 为例进行说明。这种编程也适用于 S7-1500。更多资料可参阅下列各项:如何配置STEP 7(TIA 博途)中的数据块与 S7-1200 的“仅存储在装载内存中”属性?符号寻址ARRAY数据类型和间接寻址访问ARRAY 数据类型表示由数据类型的多个元素组成的数据结构。ARRAY数据类型适用于存储配方、队列中的物料跟踪、循环过程获取、协议等。符号寻址而非juedui寻址TIA博途为符号编程进行了优化。这带来了许多好处。由于使用符号寻址,您可以在编程时不需要关注内部数据存储。控制器负责处理数据的zuijia存储位置。您可以完全专注于应用程序任务的解决方案。优势•通过符号变量名称更容易读取程序。• 自动更新用户程序中所有使用位置的变量名称。•程序数据的内存存储不需要手动管理(juedui寻址)。• 强大的数据访问功能。• 不需要手动优化性能或程序大小。•自动完成快速符号输入。• 由于类型安全(所有访问都检查数据类型的有效性),减少了程序错误。建议• “不用担心数据的存储”•“思考”的象征意义。为每个功能、变量或数据输入“描述性”名称,例如,Pump_boiler_1、heater_room_4等。创建的程序可以简单地读懂,而不需要很多注释。• 给所有变量使用了直接的符号名称,右键来定义它们。优势• 通过 ARRAY索引轻松访问。• 不需要复杂的指针创建。• 能够快速创建和扩展。• 适用于所有编程语言。属性• 结构化数据类型。•由固定数量的相同数据类型的元素组成的数据结构。• 也可以创建多维 ARRAY。•可以间接访问运行时变量,并在运行时进行动态索引计算。建议• 使用 ARRAY 进行索引访问,而不是指针(例如 ANY指针)。这使得程序更容易读懂,因为使用符号 ARRAY 更有意义。• 为运行变量使用 DINT数据类型作为临时变量,以获得Zui高的性能。• 用“MOVE_BLK”指令将 ARRAY 的部分复制到另一个 ARRAY 中。•使用“GET_ERR_ID”指令来捕获 ARRAY 中的访问错误。形参 Array [*] (V14 或更高版本)通过形参Array[*],可以将可变长度的 Array 传递给函数和函数块。使用 “LOWER_BOUND” 和 “UPPER_BOUND”指令来确定数组的上下限。优势• 块可以处理不同长度灵活的 Array。• 基于全符号编程的zuijia可读性。• 不再需要为不同长度的Array 编写指针程序。 :初始化不同的数组.3.6.4 STRUCT 数据类型和 PLC 数据类型STRUCT数据类型表示由不同数据类型的元素组成的数据结构。结构的声明在各自的块中执行。与结构相比,PLC 数据类型在 TIA博途中基于控制器定义,可以集中更改。所有使用位置都会自动更新。使用 PLC 数据类型前,在项目导航的“PLC数据类型”文件夹中声明。优势• PLC 数据类型的变化会自动更新到用户程序中的所有使用位置。•通过几个块之间的块接口进行简单的数据交换。• 在 PLC 数据类型中,可以声明具有定义长度的 STRING变量(例如String[20])。在 TIA V14 中,也可以使用一个全局常量来表示长度(例如String[LENGTH])。如果STRING 变量没有定义长度,则该变量的Zui大长度为 254 个字符。