S7-300/400使用特定的程序块,通过点对点 CP 实现通信功能。 S7-1500 中包含有一个适用于这些通信功能的修订指令集。在移植期间,将询问是使用适用于 S7‑1500 通信模块的修订指令集还是 S7‑300/400 通信处 理器的程序块。下表简要列出了移植 S7-300/400 中程序块时所使用的 S7-1500 指令。有关“类别”列中规范的详细信息,请参见章节“有关移植指令的信息 (页 66)”。1) 有关移植该指令的信息,请参见“链接(页 66)”。 2) S7-1500 不支持 ET 200S 1SI 中的这些指令。而使用 Modbus (RTU) 或USS 中的指令,连 接点到点模块“ET 200SP CM PtP”。有关移植 LAD/FBD 程序的信息 (S7-1500)---(SAVE):将 RLO 保存到 BR 存储器 该指令在 S7-1500 中不可用。在移植过程中,将对该指令进行以下处理: •如果在一个块的Zui后一个程序段中使用“---(SAVE)”指令,则该指令将替换为带“RLO”参数的 “---(RET)”指令。 •但如果没有在该块的Zui后一个程序段中使用“---(SAVE)”指令,则该指令将无法替换。应手 动更改程序。例如,将 RLO 保存到一个PLC 变量、DB 变量或局部变量中,并通过 --(RET) 指令将其返回到块结尾的调用块。 ---(CALL) 调用块,无参数该指令在 S7-1500 中不可用。在移植过程,系统将对程序进行相应修改,可通过一个指令 框进行调用。主控继电器 主控继电器在S7-1500 中不可用。移植时将会报错。应手动更改程序。例如,使用临时变 量根据条件执行指令或程序段。 块中的语言变更寄存器、累加器和状态字中的数据仅适用于 STL 程序段。当 LAD 或 FBD 程序段位于 STL 程 序段之后时,无法从 LAD 或FBD 程序段中访问先前在 STL 中设置的寄存器数据。但在下游 STL程序段中,可重新使用该寄存器中的数据。逻辑运算结果异常:如果在语言更改时设置为“未定义”(undefined),则在下游程序段中不再可用。 另请参见:语言变更时使用寄存器传递值 (页 107)LAD/FBD 中的不完全地址寻址 (S7-1500) 简介 寻址 DB 变量时未指定 DB 名称,称为部分限定寻址。S7-1500不支持 LAD/FBD 中进行部分 限定寻址。“---(OPN)”和“---(OPNI)”指令通常与部分限定寻址一起使用,在S7-1500 同样不支 持。 部分限定寻址的移植 必要时,在移植过程中将对部分限定寻址进行以下处理: •如果该数据库唯一,则在移植过程中将部分限定寻址替换为完全限定寻址,并指定相应的 DB。 • 如果是由数据块寄存器间接指定该DB,则无法明确指定该数据块。此时,移植过程中将在块接口中添加一个“DB_Any”数据类型的参数。这样,便将数据块的名称传递给该参数。移植程序之后将使用以下语法结构的地址替换所有的部分限定地址:#<参数名称>.%<绝 对地址>。 示例以下举例说明如何移植部分限定寻址。在第一张图中,为移植前的程序: 程序段 1:使用部分限定寻址方式寻找变量。移植部分限定寻址块参数移植过程中,还会将部分限定寻址 DB 参数转换为完全限定寻址参数。请注意,由于以下原因,传送给被调用块的参数类型可以更改:被调用的块可能无法再使用完全限定寻址方式直接访问实参,而只能在块调用过程中通过副本传送进行访问。 因此,需检查所移植程序的语义是否与参考程序相匹配。更多信息,请参见“在程序执行过程中访问块参数” 如果不希望调整,则可使用结构化数据类型的参数而非元素块参数。 将 PLC 数据类型(UDT) 定义为形参并传送该类型的变量或传递 PLC 数据类型 (UDT) 的 DB。访问 LAD/FBD 中的状态位(S7-1500) 简介 要提高 S7-1500 系列 CPU 的程序执行性能,可以只使用全局数据块或 PLC 变量通过块接口在块间传递值。 而不通过 LAD 和 FBD 中的状态字传递值。移植指令“--||--:获取状态位”和“--|/|--:获取取反的状态位” 该指令在 S7-1500 中不可用。具体移植,分为以下几种情况: •如果在同一程序段中的数学指令后插入一个状态位查询,则将改为使用比较器。 •在所有其它情况下,移植后程序将会出错。此时,需要对程序进行更改。例如,使用 ENO 输出查询而不是 OV 状态位查询。 如果多个ENO 查询的取反结果进行“或”运算,则可 替换 OS 状态位查询。 示例 以下举例说明如何移植状态位查询。在第一张图中,为移植前的程序。 程序段 1:“<=0”指令将查询状态位“A1”, 用于指示乘法运算的结果是否小于等于零。有关移植STL 程序的信息 (S7-1500) 使用寄存器和状态字传递值 要提高 S7-1500 系列 CPU的程序执行性能,可以只使用全局数据块或 PLC 变量通过块接口 在块间传递值。 不能使用寄存器(如,累加器、AR1、AR2、DB 或DI)或 LAD 和 FBD 中的状态字传递值。 在 STL中,值传递存在一些限制条件。请注意,使用这些区域在多个块间进行值传递时,可 能会降低程序的执行速度。 以下规则适用于 STL: •寄存器、累加器和状态字中的数据仅适用于 STL 程序段。当 LAD 或 FBD 程序段位于 STL 程序段之后时,无法从 LAD 或FBD 程序段中访问先前在 STL 中设置的寄存器数据。但在 下游 STL 程序段中,可重新使用该寄存器中的数据。 RLO位属于例外情况:如果该位在语言更改时设置为“未定义”(undefined),则在下游程 序段中不再可用。 •寄存器、累加器和状态字中的值也不会传送到被调用块中。仅“CC”和“UC”指令除外。如果使用“UC”或“CC”指令并希望通过寄存器、状态字或累加器将参数传送到被调用块中,则必须在被调用块的属性中选择“通过寄存器传送参数”(Parameter passing via registers) 选项。请注意,该选项仅适用于 STL 块中进行标准访问,而且该块可能没有形参。启用该选项后,可以在块之间传送寄存器中的数据。在此,RLO 位也属于例外情况:如果在退出块时该位设置为“未定义”(undefined),则在块调用后将不再可用。 • 要将错误消息传递给调用的块,则可使用 BR位。首先需要使用指令“SAVE”将错误消息存 储在调用块的 BR 位中。然后,再读取调用块中的 BR 位。 •每次通过完全限定寻址方式访问数据块后,数据块寄存器 DB 将置位为“0”(例如,%DB10.DBW10)。之后使用部分限定寻址的数据块则会导致在编译时出错。 • 如果在 S7-1500 中对 FB块接口中的局部形参进行符号寻址(例如,使用指令 L #myIn), 则将始终访问块调用中指定为背景数据块的数据块。虽然 OPN DIL AR2, +AR2, TDB, TAR 指令将更改 DI 或地址寄存器中的数据,但在对局部形参进行寻址时不会对这些寄存器中的数据进行判断。 下列章节介绍了一些编程示例。主控继电器 在 S7-1500中,主控继电器不可用。移植时将报告一个错误。应手动更改程序。例如,以 块参数形式指定条件并根据条件执行指令或程序段。 LEAVE 和ENT 由于“LEAVE”和“ENT”指令只有两个累加器,因此在 S7-1500 中不可用。移植时将报告一个错误。应手动更改程序。例如,使用临时变量存储中间结果。 “Block_DB”参数类型的块参数 在 S7-1500中,“Block_DB”参数类型不可用。移植时将更改该参数,并将其指定为“DB_Any” 数据类型。 在 S7-1500中库指令无法与“DB_Any”型参数形式的实例调用相匹配。 在以下示例中说明了 S7-300/400 系列 CPU如何使用变量实例调用一个库块。这一段程序无 法移植到 S7-1500。逻辑运算顺序和跳转 (S7-1500) 简介 在S7-300/400 中,可以在任意指令的 STL 中放置跳转标签,然后通过程序跳转到所标记的位置处。但如果在逻辑程序单元中定义跳转的目标位置,但没有定义 RLO 的状态,则在程 序执行过程中可能会出现意外结果。CPU可能会切换为 STOP 状态。 因此,在编程过程中必须采取相应措施,确保仅在逻辑操作顺序的开始处设置跳转标签。同时还需避免从逻辑操作顺序中段进行跳转。 在逻辑操作顺序中进行跳转时,不同的 CPU 系列的反应不同: • 在 S7-300中,跳转标签后指令的第一个输入位扫描特性取决于该指令之前的执行序列。 而无需考虑跳转标签后的指令为线性到达还是跳转到达。 • 在S7-400 中,跳转标签后指令的第一个输入位扫描特性取决于实际执行的程序流。因此,第一个输入位扫描特性可取决于该跳转标签为线性到达或跳转到达。 • 在 S7-1500 中,如果程序中包含的跳出/跳入逻辑操作序列会导致S7-300 或 S7-400 执行 时的操作不同,则将输出一个编译错误。因此,在该位置处必需对程序进行相应调整,以确定程序的既定目标。 示例 以下举例说明了到逻辑运算顺序的一个跳转操作。第 6 行跳转标签 n_OK 处的指令未清晰定义第一个输入位的扫描特性。因此,不能生成 RLO。在 S7-1500 中,该程序序列将导致编 译错误。跳转到逻辑运算顺序的移植过程该移植过程不会更改 STL 程序中的跳转标签。但如果检测到跳转标签冲突,则在编译过程中将报告一个错误。此时,需检查冲突报告处块的编程逻辑。使用指令 SET 或 CLR 可标记新“逻辑单元”的开始处,并强制扫描第一个输入位。