将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

西门子plc
西门子plc
西门子plc
1976
文章
127
评论
2018年6月29日16:21:52 评论 2,502 阅读
可以在 TIA Portal 中移植 PLC 程序。TIA Portal 中的移植称为“PLC 移植”。通过这种移植,可以在项目中创建新模块并将现有 PLC 程序复制到新模块中。旧模块在项目中仍然可用。
移植较之复制的优势在于,程序会好地适应新 CPU 系列。而且会更新旧的程序结构。同时会将新模块中无法使用的指令替换为相应的 S7-1500 指令。
下表提供了可移植模块的概述:
移植到 S7-1500 的规则与移植到 ET 200SP 中的相同。PLC 程序在这两种移植操作中被视为相同。
移植范围
在 PLC 移植过程中,会将 PLC 程序的所有组件都复制到新创建的模块中。包括以下对象,例如:
  • 程序块,S7-1500 支持其编程语言且无专有技术保护。
  • PLC 变量表
  • 检查表和强制表
  • PLC 数据类型
  • 工艺对象
  • 项目导航中的用户定义组
输出模块的硬件配置不会自动传输。
警告
防止人身伤害和设备损坏
某些情况下,在 PLC 移植过程中会对程序进行一些更改。因此,在移植后必须在测试环境中先仔细检查,才能使用。
  • 具有一个有效的且一致的参考程序。
  • 所有块均编译为新版本,以及项目中的块,但项目中的块不能在程序执行过程中调用。
  • 程序由 TIA Portal V12 或更高版本创建,或已升级到此版本。
移植前的准备
可按以下步骤进行移植前的程序准备:
  1. 在项目导航中打开包含引用程序的设备。
  2. 打开文件夹“程序块”(Program blocks) 并检查其是否包含专有技术保护块。
  3. 移除块的专有技术保护。
  4. 打开文件夹“程序块 > 系统块”(Program blocks > System blocks),并检查文件夹中所包含的块是否带有扩展名“_LF”(传统函数)。
    在 TIA Portal 中不支持 STEP 7 中的某些库块。由于这些块受专有技术保护,因此在移植 PLC 时,不会将这些块传送到新设备。
  5. 必要时,可使用“指令”(Instructions) 任务卡中的指令替换这些块。
  6. 如果程序包含有关报警组态的指示信息,请遵循有关移植报警及相关值的指示信息。
    另请参见“ 移植报警及相关值​ 
操作步骤
要在 TIA Portal 中移植 PLC 程序,请按以下步骤操作:
  1. 在项目导航中打开包含引用程序的设备。
  2. 打开设备组态。
  3. 在设备视图或网络视图中选择包含引用程序的模块。
  4. 在快捷菜单中,选择命令“移植到 S7-1500”(Migrate to S7-1500)。
    将打开“移植到 S7-1500”(Migrate to S7-1500) 对话框。
  5. 在“新设备”(New device) 区域中,选择程序移植的目标设备并使用“确定”(OK) 进行确认。
    将显示一条安全消息,通知该程序在移植过程中将发生变更。
  6. 确认此安全提示。
    此时将打开一个对话框,在此可指定移植程序中要用于点对点通信的指令。
  7. 选择所需指令集。
    • 选择“对 S7-1500 的集成通信模块使用新的 PtP 指令”(Use new PtP instructions for the integrated communication modules of the S7-1500) 选项来使用 S7-1500 的新 PtP 指令。
    • 选择“继续使用 S7-300/400 通信处理器的 PtP 指令”(Continue to use PtP instructions for S7-300/400 communications processors) 选项以继续使用 CP 300/400 或 ET200 的 PtP 指令。
    即便未使用点对点通信,也必须选择两个选项之一。该选择对本例中的程序并无影响。
    开始移植 PLC 程序。将显示一条报警信息,通知在移植过程中是否发生错误。报警还包含一条件链接指向该移植日志。
  8. 打开移植日志。其中包含有关移植的详细信息,以及为使程序在新设备上可执行而必须进行的程序更改。
  9. 然后,按照移植日志中的所有信息进行处理。
  10. 编译移植的项目。
    另请参见“ 移植点对点程序块​ 
结果
在项目导航中的原始设备旁边创建新设备。该 CPU 中包含移植后的 PLC 程序。
要访问 S7-1500 中的所以功能,建议启用移植块的优先块访问。更多信息,请参见帮助中的“优化访问的块”部分。
每次移植都将创建一个日志文件。该日志文件包含以下信息:
  • 移植期间要对对象所作的修改。
  • 对程序进行必要调整的相关信息。
步骤
如果要显示移植的日志文件,请执行以下步骤:
  1. 在项目树中打开“公共数据 > 日志”(Common data > Logs) 文件夹。 在此文件夹中,包含之先执行的所有移植。
  2. 双击所需的移植日志。
    将打开该日志。
  3. 在“转至”(Go to) 栏中,程序中与位置相关的消息将使用箭头进行标记。 双击该箭头,将跳转到程序中的相关位置。
  4. 而带有附加信息的消息则会在“?”栏中标记为问号。 要查看该消息的附加信息,则单击此问号。
以下规则适用于移植组织块:
  • 在传送过程中,块名称和编号都保持不变。
  • 块接口也保持不变。
  • OB 将分配给对应此 OB 类型的事件。
  • 同时,诸如优先级之类的 OB 参数也将保持不变。如果在新 CPU 中分配了其它参数,则将为这些参数指定默认值。
S7-1500 中对某些组织块 (OB) 不支持,因此无法移植。下表简要列出这些组织块以及有关如何在程序中重现功能的相关信息。
如果程序对硬件模块寻址,例如在“LADDR”或“ID”参数中,那么这些地址在移植到新硬件后就会失效。必须更换这些地址。S7-1500 的硬件模块通过硬件 ID 寻址。这意味着移植后必须在“LADDR”或“ID”参数中输入新模块的硬件标识符。
为此,请按以下步骤操作:
  1. 打开设备组态。
  2. 选择要寻址的模块。
  3. 在巡视窗口中选择“属性 > 系统常量”(Properties > System constants) 选项卡。
    表格包括所有已用模块的常量和所需的硬件标识符。
  4. 选择要寻址模块的常量,然后从快捷菜单选择“复制”(Copy) 命令。
  5. 将常量插入已移植指令的“LADDR”或“ID”参数中。

将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

在 S7-300/400 中,程序中运行该 IEC 定时器时确定的 IEC 定时器 TP、TON 和 TOF 的输出“Q”和“ET”。此后,“Q”和“ET”的状态将保持不变。如果在程序中多次访问这些输出,则收到的值始终相同。
在 S7-1500 中,这个现象有所改变:每次访问时该定时器时,程序都将检查当前的定时器值,并重新确定“Q”和“ET”输出。
因此移植后,如果多次访问“Q”或“ET”,则程序的动作可能会发生变更。
为了确保程序保持与 S7-300/400 中相同的行为,可将“Q”或“ET”的值赋值给一个变量。之后,在程序中可引用该变量而非引用输出。
带有 EN/ENO 互连的 IEC 定时器和 IEC 计数器
S7-1500 的指令已根据 IEC 1131-3 标准进行了相应修改。现在,这些指令可通过“IN”参数使用当前路径进行连接,而无需再使用“EN”和“ENO”参数。如果参考程序中包含一个预设有逻辑指令的 IEC 定时器或 IEC 计数器,而且在逻辑指令中使用“EN”输入参数进行判断,则移植将报错。
在预设的逻辑指令和 IEC 定时器或 IEC 计数器之间插入一个跳转指令后,将根据 RLO 的结果调用 IEC 定时器或 IEC 计数器。可使用以下跳转指令:
  • ---( JMP ):若 RLO = 1 则跳转
  • ---( JMPN ):若 RLO = 0 则跳转
IEC 计数器:块接口中指示计数器状态的新参数
移植后,块接口中将包含“QU”和“QD”参数,而非 IEC 计数器计数状态的“Q”输出参数。根据 IEC 计数器的类型,系统仅读取这两个参数中的一个,另一个参数不使用。
如果在程序代码中对“Q”参数进行了访问,则在移植后需要对该访问进行手动调整。“QU”用于加计数;“QD”用于减计数。
由 CPU 中的 CREAT_DB 或 CREATE_DB 指令生成且不能在线使用的块,不能移植。
S7-1500 系列的 CPU 中没有系统状态列表。但可通过“GET_DIAG”、“Geo2Log”、“DeviceStates”或“ModuleStates”指令读取相关信息。
有关移植系统状态列表的更多信息,请参见: 移植 RDSYSST 指令​
通过“报告系统错误”进行系统诊断
S7-1500 系列 CPU 具有集成的系统诊断功能。因此将不再支持“报告系统错误”。如果程序包含有“报告系统错误”的块,则在参考程序中禁用系统诊断,之后再进行移植并重新编译该程序。在此过程中,删除此处所述的块。
默认情况下,启用 S7-1500 CPU 的系统诊断。用户无需进行任何其它设置。
要更改系统诊断的设置,请在设备组态中选择该 CPU。系统诊断的相关设置将显示在巡视窗口中的“属性 > 系统诊断”(Properties > System diagnostics)下。在此,系统诊断报警为启用状态;如果不需要,则可以取消选中。
PROFINET/PROFIBUS 诊断
以下规则适用于移植 PROFINET/PROFIBUS 诊断:
  • 使用集成的系统诊断替换“报告系统错误”。
  • 由于不支持 FB 126,因此无法移植。
  • 可使用“DeviceStates”和“ModulStates”指令评估特定应用。
在 S7-300/400 中,无需声明地址符号即可对块的局部数据进行绝对寻址。
由于在 S7-1500 中不再支持真正的绝对寻址,将按以下方式进行移植:
  • 如果在局部数据中某个区域的块接口内声明了临时变量,则绝对地址将转换为符号地址。
  • 如果没有相应的临时变量,则将保留绝对地址。由于在移植过程中可能会因一些原因创建其它局部变量,因此局部数据中的地址可能有所变化。因而,应检查所使用的绝对地址是否仍然正确以及是否寻址的数据是否正确。必要时,在“Temp”区域创建一个变量并使用该变量进行寻址。要专门寻址声明变量中的区域,可以通过 AT 覆盖现有变量或通过语法 .X、.B、.W 或 .D 寻址各区域。
示例
以下举例说明了局部数据绝对寻址的移植。
在个表中,为移植前的程序段:
在第二个表中,为移植后的程序段:
  • 已为“LW20”和“LW3”声明了临时变量。移植后,将在程序中使用这些临时变量。
  • 未对“LW5”声明变量。因此,需要检查移植后的访问是否仍然正确。
在 S7-1500 的块内使用块参数时,应遵循以下规则:
  • Input 参数只能读取。
  • Out 参数只可写入。
  • In/out 参数可读取和写入。
  • 可能只写入函数值 (Ret_Val)。
如果程序不符合以上规则,则将编译期间输出一条警告信息。在这种情况下,可将相关输入或输出参数转化为输入/输出参数。
适用于函数 (FC) 参数分配的其它规则。
函数的参数分配​
块参数作为函数 (FC) 中的边沿存储位
在函数 (FC) 中编程边沿评估时,必须遵循上述的参数分配规则:
作为边沿存储位,数据值需要具有读写权限而且为多个循环保留。由于输入参数 (input) 为只读,而输出参数 (output) 为只写,因此无法作为边沿存储位。临时局部数据 (Temp) 也不能用作边沿存储位,这是因为它只能用于一个循环中。
因此,只能将 in/out 参数 (InOut) 作为函数 (FC) 中的边沿存储位。如果通过片段访问进行寻址,则可以使用 in/out 参数的单个位作为边沿存储位。
以下示例说明了如何将 in/out 参数作为边沿存储位。
“InOutFlagStore”是 BYTE 数据类型的 in/out 参数。可以通过地址“#InOutFlagStore.x0”,对作为边沿存储位的位地址 0 进行寻址。
函数 (FC) 中块参数的自动初始化
在 S7-300/400 中,必须事先为函数的临时局部数据 (Temp) 进行赋值。否则,程序执行时可能会使用未定义的值。
在 S7-1500 中,由于在调用块时,会对以下参数自动进行初始化,从而极大降低了操作未定义值的风险。
  • STRING 和 WSTRING 数据类型的临时局部数据始终预分配了大长度 254 和实际长度 0。
  • 但对于函数 (FC) 中的元素数据类型的临时局部数据,则将自动初始化为具有优化访问。然后,再按照指定的数据类型为其赋值预定义的值。例如,BOOL 类型的预定义值为“false”。对于 PLC 数据类型的元素,将预先赋值 PLC 数据类型 (UDT) 声明中所指定的默认值。对于 ARRAY 元素,即使用于 PLC 数据类型中,也将预先赋值数值“0”。
在 S7-300/400 中,必须为函数中的输出参数 (Output) 进行赋值,否则程序中可能会发生意外响应。使用跳转指令或 RLO 指令时,必须检查所支持每条程序路径。
在 S7-1500 中,由于在调用块时,会对元素数据类型的输出参数自动进行初始化,从而极大降低了未定义输出参数产生的风险。然后,再按照指定的数据类型为这种输出参数预先赋值为事先定义的值。例如,BOOL 类型的预定义值为“false”。但结构化的输出参数不会预先赋值。在调用块时,这种输出参数将作为指针传送,因此不能是未定义。
S7-1500 系列 CPU 中的所有函数块都具有多重实例功能。这意味着,在参考程序中标记为不带有多重实例功能的函数块,移植后可转换为带有多重实例功能的块。每次转化 FB 时都会在移植日志中都会输出一条通知。如果在移植后继续将 FB 用作单实例,则程序可直接运行无需更改。
S7-1500 中,无效浮点数的处理方式与 S7-300/400 中的不同。示例:
  • S7-300/400:表达式“无效浮点数 <> 1.0”的结果为 FALSE。
  • S7-1500:表达式“无效浮点数 <> 1.0”的结果为 TRUE。
请注意,由于存在这种差异,可能会导致程序中的指令产生不同结果。
如果要写入 STRING 中的某个字符或字节,则 S7-1500 CPU 会检查目标地址是否位于该 STRING 的实际长度内。如果超出实际长度,则不会写入该字符或字节。**例外:在 STRING 实际长度后直接写入字符时。
以下示例显示了实际长度为 5 时的字符串“hello”。该 STRING 的第 27 个字符超出了实际长度,无法写入。STRING 将保持不变,赋值结果为“hello”。
以下示例显示上述的例外情况:该字符将直接写在 STRING 后的第 6 个字符处。赋值结果为“hello!”。
如果可能,请尽量使用“扩展指令 > 字符串 + 字符”(Extended instructions > String + Cha) 窗格中的指令,对 STRING 进行处理。
S7-1500 中不再支持状态字。状态字中包含的信息极少,且目前只能在 STL 中进行评估。LAD 和 FBD 不再支持状态字评估。以下章节将介绍有关各编程语言中状态字访问的移植信息。
在下载软件变更方面,S7-1500 系列 CPU 的特性与 S7-300/400 系列 CPU 的不同。例如,S7-1500 CPU 允许在 STOP 和 RUN 模式中下载变更,而不会影响之前加载变量的实际值。
在移植过程中,会将原程序中使用的指令尽可能多的传递给新程序。在此过程中,会在尽可能不更改原程序语义的情况下自动进行一些必要的修改。如果指令存在多个版本,那么移植操作始终使用新的指令版本。
并使用兼容或类似指令自动替换 S7-1500 中不可用的指令。
移植场景
下表列出了移植指令时可能发生的情况:
移植类别 3 的指令信息
S7-300/400 中的一些指令在 S7-1500 中不再可用,这是由于在 S7-1500 中采用了更为便捷高效的方式实现这些功能。在移植过程中,PLC 移植将使用相应的新指令替代这些不支持的指令。但对于类别 3 中的指令则无法自动完整移植。例如,可能需要添加新参数。在程序中将标记出无法自动移植的位置。在程序的相应位置、移植日志或编译过程中,将以注释形式直接显示所需调整的相关信息。
可能需要进行以下手动调整:
  • 如果新指令有其它形参,则将为这些形参指定相应的实参。
  • 如果新指令中修改了参数名称,则需更改参数的分配。
  • 如果移植无法确保参数分配的定义与参考程序的相同,则将标记出需检查的实参。在移植后检查程序中这些位置处的语义,并在必要时进行更正。
  • 如果参考程序中包含有硬件标识号(例如,在“LADDR”参数中),则也会将这些标识号标记出来。在“LADDR”参数中输入新的 HW 标识符。
  • 如果新指令修改了错误代码,则需在程序中修改错误的处理方式。
有关移植类别 3 的指令示例,请参见章节“ 移植数据块指令​ ”。
移植类别 4 的指令信息
有些指令在 S7-1500 中已不再有效,这是因为这些指令的功能已经完全改变。在移植过程中不会替代这些指令。并在程序中以红色显示,同时程序无法编译。在程序的相应位置、移植日志或编译过程中,将以注释形式直接显示所需调整的相关信息。
在以下章节,我们将简要介绍移植类别 4 中不可移植的指令以及相应的备选解决方案。
有些 S7-300/400 中的指令无法移植到 S7-1500 中。例如,与某些特定模块一同使用的指令或者 S7-1500 中指令的功能有所不同时。
有关替换不可移植指令的信息(类别 4)
以下举例说明了无法移植的指令及其替换方式:
说明
无法移植的指令的技术支持
S7-1500 包含有一个“数据块”类别的修订指令集。 在移植过程中将自动替换这些指令。 之后还须进行手动修改。
下表简要列出了数据块指令的移植过程:
注意
异步处理
S7-1500 中的新指令可以异步执行,即这些指令的执行可以跨多个编程周期。
移植后手动调整
在 S7-1500 中,这些指令还带有其它形参,如用于进行异步执行。 在移植过程中,需要提供具有相应实参的附加参数。
在 S7-1500 中,所创建 DB 的块编号必须介于 60000 到 60999 之间。因此,需要将参数“LOW_LIMIT”和“UP_LIMIT”调整到新的编号范围。
有关这些参数的详细说明,请参见 S7-1500 的参考帮助。
示例
以下举例说明了使用“CREATE_DB”指令替换“CREAT_DB”指令的移植过程。
在张图中,为移植前对“CREAT_DB”的调用:
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
在第二张图中,为移植后对“CREATE_DB”的调用:
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
  • “REQ”参数不能用于“CREAT_DB”,移植过程中将对其进行修改。 该参数将赋值为默认值“TRUE”。
  • 参数“LOW_LIMIT”和“UP_LIMIT”超出所允许的编号范围 60000 到 60999。因此,在移植期间值“12”和“34”标记为无效。 此时,需要手动输入所允许的值“60000”和“60100”。
  • “ATTRIB”参数不能用于“CREAT_DB”,移植过程中将对其进行修改。 该参数将赋值为默认值“0”。 可通过此参数指定待创建 DB 的属性。
  • “SRCBLK”参数不能用于“CREAT_DB”,移植过程中将对其进行修改。 在此,可指定要将其内容写入待生成 DB 的数据区域。
  • “BUSY”参数不能用于“CREAT_DB”,移植过程中将对其进行修改。 在生成数据块之前,该参数将保持信号状态“1”。 要判别该信号,需要将输出参数与一个操作数进行互连。
指令“ RDSYSST:读取系统状态列表 ”指令在 S7-1500 中不再可用,这是因为 S7-1500 产品系列的 CPU 中没有系统状态列表。但可以通过以下某个指令读取之前由系统状态列表接收的信息:
  • “ RDREC​ ”(扩展指令 > 分布式 I/O)
  • “ GET_DIAG​ ”(扩展指令 > 诊断)
  • “ GEO2LOG​ ”(扩展指令 > 诊断)
  • “ DeviceStates​ ”(扩展指令 > 诊断)
  • “ ModuleStates​ ”(扩展指令 > 诊断)
  • “ RALRM​ ”(扩展指令 > 分布式 I/O)
  • “ LED​ ”(扩展指令 > 诊断)
在 S7-1500 中读取系统状态信息
下表列出了 S7-1500 中可读取的系统状态信息。
之前由 RDSYSST 指令读取的 ID 位于“SSL-ID”列中。后两个数位是相关的。“xy”占位符取决于所使用的模块。
在“移植”列中,将指示信息在 S7-1500 中是否仍然可用,以及如何读取。
S7-300/400 和 S7-1500 中均提供了“T_CONV”指令。在大多数情况下,都会自动移植该指令。 但是,如果您已使用“T_CONV”从 DATE_AND_TIME (DT) 数据类型中提取工作日,那么在 S7-1500 中需要注意以下事项:
在 S7-300/400 中,在抽取工作日时预计会使用数据类型 INT 的输出参数“OUT ”。 在 S7-1500 中,如果预计结果为工作日,那么该输出参数必须为数据类型 DTL。
如果输出参数“OUT”为其它数据类型,则在 PLC 移植过程中在移植日志中会输出一条错误。 这种情况下,请将该输出参数的数据类型转换为 DTL 并使用“工作日”组件。
更多信息,请参见“另请参见”。
参见
在 S7-1500 中,可以通过“Program_Alarm”指令集中执行报警组态的所有功能。
  “Program_Alarm”将取代 S7-300/400 中的以下指令:
报警移植过程
系统不会自动移植报警。您需要在移植后手动重新组态报警。
以下部分将介绍如何准备程序以使报警文本在移植后仍然保留,并使后续手动工作降至少:
要移植报警,请执行以下步骤:
  1. 打开包含报警的块。
    该块的接口中包含一个参数,该参数具有报警数据类型(例如,数据类型“C_Alarm_8”、“C_Alarm_s”、“C_Notify”等)。该参数定义了报警编号输入。
  2. 将报警编号输入的参数移至“Static”部分中。

将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

  1. 保存并编译该块。
  2. 然后执行 PLC 移植。
    另请参见“ 进行移植​ 
  3. 在新创建的 CPU 中,再次打开包含报警的块。
    用于报警组态的指令无法移植,且显示为红色。
  4. 使用新数据类型“Program_Alarm”替换报警数据类型(例如“C_Alarm_s”)。如果选择列表中未提供数据类型“Program_Alarm”,则使用键盘输入该名称。
  5. 打开“指令”(Instructions) 任务卡,并浏览至“扩展指令”(Extended instructions) 窗格的“报警”(Alarms) 文件夹。
  6. 将“Program_Alarm”指令拖到您的程序段中。
  7. 在“调用选项”(Call options) 对话框中,在“接口中的名称”(Name in the interface) 输入字段中选择先前重新组态的报警变量。
  8. 打开变量属性,转至“报警”(Alarm) 选项卡。
    已输入来自输出程序的报警文本。
  9. 从相关值中删除元素类型的字符(例如 Y、W、X、I 等)。相关值不包含有关 S7-1500 中元素类型的信息。
    另请参见“ 相关值的结构​ 
  10. 从程序段中删除旧的报警块。
    已移植报警组态。已从输出程序中获取报警文本。

将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于绝对寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“ATT: 将值添加到表格中”为例,说明如何实现该函数功能。
实现
以下 SCL 程序中说明了如何实现“ATT”指令。 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
下表列出如何实现函数“Attend”:
该函数将在表格的后一行写入参数“#val”的值。
“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于绝对寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“FIFO: 输出表格的个值”为例,说明如何实现该函数功能。
实现
以下 STL 程序说明了如何实现“FIFO”表格函数: 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
下表列出了如何实现函数“Fifo”:
该函数将返回写入表格中的个值(先进先出)。 函数值“true”表示表格为空。
“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于绝对寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“LIFO: 输出表格的后一个值”为例,说明如何实现该函数功能。
实现
以下 STL 程序说明了如何实现“LIFO”表格函数: 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
下表列出了如何实现函数“Lifo”:
该函数返回写入表格中的后一个值(后进先出)。 函数值“true”表示表格为空。
S7-300/400 将使用特定程序块以通过 SIMATIC NET CP 实现通信功能。 S7-1500 中包含有一个适用于这些通信功能的修订指令集。
以下表格简要列出了 S7-300/400 中所使用的程序块的移植信息。
有关“类别”列中规范的详细信息,请参见章节“ 有关移植指令的信息​ ”。
工业以太网/PROFINET 中的程序块
PROFIBUS 的程序块
其它形参
在 S7-1500 中,这些指令还带有其它形参,如用于进行异步执行。 在移植过程中,需要提供具有相应实参的附加参数。
有关这些参数的详细说明,请参见 S7-1500 的参考帮助。
其它步骤
  • 使用相关地址参数组态相应的连接类型。
移植调用参数 - 通过 UDP 进行通信
其它步骤
  • 使用相关地址参数组态相应的连接类型。
移植调用参数 - 通过电子邮件进行通信
其它步骤
  • 使用相关地址参数组态相应的连接类型。
其它步骤
  • 使用相关地址参数组态相应的连接类型。
S7-300/400 使用特定的程序块,通过点对点 CP 实现通信功能。
S7-1500 中包含有一个适用于这些通信功能的修订指令集。
在移植期间,将询问是使用适用于 S7‑1500 通信模块的修订指令集还是 S7‑300/400 通信处理器的程序块。
下表简要列出了移植 S7-300/400 中程序块时所使用的 S7-1500 指令。
有关“类别”列中规范的详细信息,请参见章节“ 有关移植指令的信息​ ”。
用于点对点通信的程序块
1) 有关移植该指令的信息,请参见“ 链接​ ”。
2) S7-1500 不支持 ET 200S 1SI 中的这些指令。而使用 Modbus (RTU) 或 USS 中的指令,连接点到点模块“ET 200SP CM PtP”。
其它形参
在 S7-1500 中,这些指令还带有其它形参。在移植过程中,需要为这些附加参数提供相应的实参。
该指令在 S7-1500 中不可用。在移植过程中,将对该指令进行以下处理:
如果在一个块的后一个程序段中使用“---(SAVE)”指令,则该指令将替换为带“RLO”参数的“---(RET)”指令。
但如果没有在该块的后一个程序段中使用“---(SAVE)”指令,则该指令将无法替换。应手动更改程序。例如,将 RLO 保存到一个 PLC 变量、DB 变量或局部变量中,并通过 --(RET) 指令将其返回到块结尾的调用块。
---(CALL) 调用块,无参数
该指令在 S7-1500 中不可用。在移植过程,系统将对程序进行相应修改,可通过一个指令框进行调用。
主控继电器
主控继电器在 S7-1500 中不可用。移植时将会报错。应手动更改程序。例如,使用临时变量根据条件执行指令或程序段。
块中的语言变更
寄存器、累加器和状态字中的数据仅适用于 STL 程序段。当 LAD 或 FBD 程序段位于 STL 程序段之后时,无法从 LAD 或 FBD 程序段中访问先前在 STL 中设置的寄存器数据。但在下游 STL 程序段中,可重新使用该寄存器中的数据。逻辑运算结果异常:如果在语言更改时设置为“未定义”(undefined),则在下游程序段中不再可用。
另请参见: 语言变更时使用寄存器传递值​
参见
寻址 DB 变量时未指定 DB 名称,称为部分限定寻址。 S7-1500 不支持 LAD/FBD 中进行部分限定寻址。 “---(OPN)”和“---(OPNI)”指令通常与部分限定寻址一起使用,在 S7-1500 同样不支持。
部分限定寻址的移植
必要时,在移植过程中将对部分限定寻址进行以下处理:
如果该数据库**,则在移植过程中将部分限定寻址替换为完全限定寻址,并指定相应的 DB。
如果是由数据块寄存器间接指定该 DB,则无法明确指定该数据块。 此时,移植过程中将在块接口中添加一个“DB_Any”数据类型的参数。 这样,便将数据块的名称传递给该参数。 移植过程中,将使用以下语法 #<参数名称>.%<绝对地址> 替换所有的部分限定寻址。
示例
以下举例说明如何移植部分限定寻址。 在张图中,为移植前的程序:
程序段 1 :使用部分限定寻址变量。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
下图为移植后的程序:
程序段 1 :明确指定包含变量的 DB。 将自动移植该程序。 “DB1”中的变量以完全限定寻址方式进行寻址。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

 

说明
移植部分限定寻址块参数
移植过程中,还会将部分限定寻址 DB 参数转换为完全限定寻址参数。 请注意,以下操作可能会更改传递给被调用块的参数类型:被调用块无法通过完全限定寻址方式直接寻址实参,而是在块调用过程中使用副本传递进行访问。

要提高 S7-1500 系列 CPU 的程序执行性能,可以只使用全局数据块或 PLC 变量通过块接口在块间传递值。 而不通过 LAD 和 FBD 中的状态字传递值。
移植指令“--| |--:获取状态位”和“--|/|--:获取取反的状态位”
该指令在 S7-1500 中不可用。具体移植,分为以下几种情况:
  • 如果在同一程序段中的数学指令后插入一个状态位查询,则将改为使用比较器。
  • 在所有其它情况下,移植后程序将会出错。 此时,需要对程序进行更改。 例如,使用 ENO 输出查询而不是 OV 状态位查询。 如果多个 ENO 查询的取反结果进行“或”运算,则可替换 OS 状态位查询。
示例
以下举例说明如何移植状态位查询。 在张图中,为移植前的程序。
程序段 1 :“<=0”指令将查询状态位“A1”, 用于指示乘法运算的结果是否小于等于零。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
下图为移植后的程序。
程序段 1 :该程序将自动移植。 将删除“<=0”指令。 并使用带“myTag3”变量的比较器查询乘法运算的结果。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
要提高 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 DI L 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-300/400 中,可以在任意指令的 STL 中放置跳转标签,然后通过程序跳转到所标记的位置处。但如果在逻辑程序单元中定义跳转的目标位置,但没有定义 RLO 的状态,则在程序执行过程中可能会出现意外结果。CPU 可能会切换为 STOP 状态。
因此,在编程过程中必须采取相应措施,确保仅在逻辑操作顺序的开始处设置跳转标签。同时还需避免从逻辑操作顺序中段进行跳转。
在逻辑操作顺序中进行跳转时,不同的 CPU 系列的反应不同:
  • 在 S7-300 中,跳转标签后指令的个输入位扫描特性取决于该指令之前的执行序列。而无需考虑跳转标签后的指令为线性到达还是跳转到达。
  • 在 S7-400 中,跳转标签后指令的个输入位扫描特性取决于实际执行的程序流。因此,个输入位扫描特性可取决于该跳转标签为线性到达或跳转到达。
  • 在 S7-1500 中,如果程序中包含的跳出/跳入逻辑操作序列会导致 S7-300 或 S7-400 执行时的操作不同,则将输出一个编译错误。因此,在该位置处必需对程序进行相应调整,以确定程序的既定目标。
示例
以下举例说明了到逻辑运算顺序的一个跳转操作。第 6 行跳转标签 n_OK 处的指令未清晰定义个输入位的扫描特性。因此,不能生成 RLO。在 S7-1500 中,该程序序列将导致编译错误。

将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中

跳转到逻辑运算顺序的移植过程
该移植过程不会更改 STL 程序中的跳转标签。但如果检测到跳转标签冲突,则在编译过程中将报告一个错误。此时,需检查冲突报告处块的编程逻辑。使用指令 SET 或 CLR 可标记新“逻辑单元”的开始处,并强制扫描个输入位。
建议
例如,程序代码优化过程中,尽量避免在逻辑操作顺序中跳转。这将导致代码混乱,维护困难。
寄存器、累加器和状态字中的数据仅适用于 STL 程序段。 当 LAD 或 FBD 程序段位于 STL 程序段之后时,无法从 LAD 或 FBD 程序段中存取先前在 STL 中设置的寄存器数据。 但在下游 STL 程序段中,可重新使用该寄存器中的数据。
RLO 位属于例外情况: 如果该位在语言更改时设置为“未定义”(undefined),则在下游程序段中不再可用。
移植当语言发生变更时使用寄存器进行值传递
如果在移植的 LAD 或 FBD 程序段中存取寄存器,则在编译期间将报告一个错误。 请按以下方式对程序进行更改:仅在 STL 程序段中设置和读取寄存器。
示例
以下举例说明了如何移植累加器的存取操作。 在前两个图中,为移植前的程序:
程序段 1: 将 "myIN1" 操作数下载到累加器 1 中,然后再将 "myIN2" 下载到累加器 1, 同时将 "myIN1" 传送到累加器 2。这样就将这两个值相加在一起。 结果存储在累加器 1 中,并将其分配给 "myOUT" 操作数。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
程序段 2: 将 "myIN3" 操作数下载到累加器 1 中。同时将现有 "myOUT" 操作数传送到累加器 2,并可立即该操作数与 "myIN3" 操作数相加。 无需再次显式下载 "myOUT" 操作数。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
移植后,程序段 2 将发生故障,这是因为 LAD 程序段无法再将值写入累加器中。 必须手动修改程序,将这两个值显式加载到 STL 中的累加器中。
下图为纠正错误后的程序段 2。
程序段 2: 在进行加法操作之前,已将这两个值显式加载到 STL 中的累加器中。
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
在块发生更改时,寄存器、累加器和状态字中的值将置位为“0”或者将状态设定为“未定义”(undefined)。 这意味着不能传递到被调用块中。
仅“CC”和“UC”指令除外。 如果使用“UC”或“CC”指令并希望通过寄存器、状态字或累加器将参数传送到被调用块中,则必须在被调用块的属性中选择“通过寄存器传送参数”(Parameter passing via registers) 选项。 请注意,该选项仅适用于 STL 块中进行标准访问,而且该块可能没有形参。 启用该选项后,可以在块之间传送寄存器中的数据。 RLO 位属于例外情况: 在进行块转换时,该位将始终设置为“未定义”(undefined),而且在块调用后该位不再可用。
要将错误消息传递给调用的块,则可使用 BR 位 。 首先需要将错误消息存储在调用块的 BR 位 中。 要执行此操作,可使用指令“ SAVE ”或“ JNB ”。 然后,再读取调用块中的 BR 位 。
如果在块调用后访问被调用块中所设置的寄存器数据,则将报告一个错误。 在这种情况下,需更改应用程序。 例如,使用数据块中的变量或 PLC 变量将值返回调用块。
示例
以下示例说明了通过寄存器将值传递给调用块时所需对程序进行的更改。
在个表中,为移植前的程序:
第二个表中列出了需要对程序进行的更改。
在 S7-300/400 中,可使用指令 UC 和 CC 编程块调用。 参数是通过寄存器而非接口传递到调用块,例如 AR1、AR2、DB、DI、 累加器或状态字。
这些调用会降低程序的执行速度,因而在 S7-1500 中不再设置为默认调用,而是使用 CALL 指令。但 CALL 指令不能进行间接块调用。 如果要使用 UC 或 CC 进行间接块调用,则需要在被调用块的属性中选择 “通过寄存器传送参数” (Parameter passing via registers) 选项。 这样就可在不同块之间传递寄存器数据。 RLO 位 属于例外情况: 在进行块转换时,该位将设置为“未定义”(undefined),而且在块调用后不再可用。
请注意,该选项仅适用于 STL 块中进行标准访问,而且该块可能没有形参。 启用该选项后,可以在块之间传送寄存器中的数据。 在此,RLO 位也属于例外情况: 在进行块转换时,该位将设置为“未定义”(undefined),而且在块调用后不再可用。
在创建受专有技术保护的库元素时,无需再使用间接块调用。 TIA Portal 中可自动实现这一功能: 从库中插入块时,用户程序将自动解决块的编码冲突问题。
移植通过 "UC" 或 "CC" 进行的块调用
在移植过程中,将使用以下方式处理通过 "UC" 或 "CC" 进行的块调用:
  • 将指定有块编号的 "UC FC" 指令替换为 "CALL" 指令。
  • 将指定有块编号的 "CC FC" 指令替换为 "CALL" 指令。 并添加执行条件调用的跳转指令。
  • 间接指定了块编号的 "UC FC" 和 "CC FC" 指令保持不变。
  • 间接指定了块编号的 "UC FB" 和 "CC FB" 指令保持不变。
示例
以下举例说明如何移植通过 "UC" 进行的块调用。
在个表中,为移植前的程序:
下表为移植后的程序:
寻址 DB 变量时指定 DB 名称或 DB 编号,称为完全限定寻址。每次通过完全限定寻址方式访问数据块后,数据块寄存器将置位为“0”。如果要通过完全限定寻址后再次访问此 DB 寄存器,则必须先使用 OPEN DB 命令重新分配一个值。
完全限定寻址的移植
在进行完全限定寻址后,移植将插入“ OPN ”指令并将当前数据块重新加载到数据块寄存器中。
示例
以下举例说明完全限定寻址的移植。
在个表中,为移植前的程序:
下表为移植后的程序:
寻址 DB 变量时未指定 DB 名称或 DB 编号,称为部分限定寻址。 通过部分限定寻址方式,访问当前存储在 DB 寄存器的数据块中定义的值。
以下限制条件适用于 S7-1500 中的部分限定寻址。
  • 在 S7-1500 中,仅当当前块中显式设置了 DB 寄存器时才可以进行部分限定寻址。 例如,使用“ OPN ”指令设置 DB 寄存器。 在进行标准访问的数据块中,只能对变量进行部分限定寻址。
  • 在 S7-1500 中,可通过块调用将数据块寄存器置位为“0”。这意味着在一个块中将无法打开数据块,而且也无法在从属块中通过部分限定寻址数据块中的数据元素。 需要先在当前块中设置 DB 寄存器,然后才能对 DB 变量进行部分限定寻址。
  • 每次进行完全限定访问时(例如,%DB10.DBW10),DB 数据块寄存器都将设置为“0”。 需要在进行完全限定访问后设置 DB 寄存器,然后才能对 DB 变量进行部分限定寻址。
  • 在运行时使用部分限定的地址会降低程序的处理速度。
部分限定寻址的移植
在移植过程中,将对 STL 中的部分限定寻址进行以下处理:
  • 必要时,可将部分限定寻址转换为完全限定访问。
  • 如果在调用的代码块中打开该数据块且无法明确标识该 DB,则移植将在被调用块的接口处插入一个“DB_Any”数据类型的参数。 这样,就可将数据块名称传递给该参数。 移植将在被调用块中插入“ OPN ”指令以打开数据块。
示例
以下举例说明部分限定寻址的移植。
在个表中,为移植前的程序:
下表为移植后的程序:
说明
移植部分限定寻址块参数
移植过程中,还会将部分限定寻址 DB 参数转换为完全限定访问参数。 请注意,可以更改传送给被调用块的参数类型,这是因为: 被调用的块可能无法使用完全限定访问直接访问实参,而是使用块调用期间所传送的副本。
请确保所移植程序的自动执行机制与参考程序的相一致。
更多信息,请参见: 在程序执行过程中访问块参数​ 如果不希望进行调整,则可以使用结构化数据类型的参数而非元素块参数。
将 PLC 数据类型 (UDT) 定义为形参并传送该类型的变量或传递 PLC 数据类型 (UDT) 的 DB。
示例:
CALL "MyFC"
InStruct :="DBofUDT"或CALL "MyFC"
InStruct := "DBArrayOfUDT".a[#i]

“OPN DI”或“CDB”指令将数据块加载到 DI 寄存器中。在 S7-300/400 中,此处打开的块将作为背景数据块。FB 块接口的局部形参的后续符号寻址(IN、OUT、InOut、Static)将不再对在块调用中指定为背景数据块的数据块进行寻址,而是对位于 DI 寄存器中的数据块进行寻址。要随后对块接口中的局部形参进行符号寻址,则必须将背景数据块加载到 DI 寄存器中。
即使在执行指令 "L AR2", "+ AR" 和 "TAR" 之后,S7-300/400 中也无法从块接口对形参进行符号寻址,这是由于这些指令破坏了参数的访问方式。
S7-1500 中已修正该错误:如果在 S7-1500 中对块接口中的局部形参进行符号寻址(例如,使用指令 L #myIn),则需始终访问块调用中指定为背景数据块的数据块。虽然 OPN DI L AR2, +AR2, TDB, TAR 指令将更改 DI 或地址寄存器中的数据,但在对局部形参进行寻址时不会对这些寄存器中的数据进行判断。
对背景数据块中局部变量访问的移植
移植过程不会更改已编程的访问方式。但是,如果更改了引用程序中的 OPN DI , L AR2, +AR2, TDB, TAR, 指令,则该程序的定义可能会发生变更。
要恢复初的程序定义,则必须手动更改该程序。通常无需再通过寄存器对数据进行寻址。但是,可以使用背景数据块中的 ARRAY 间接索引 ARRAY 中的元素。
示例 1
以下示例说明如何修改 OPN DI 指令的定义:
示例 2
以下示例说明了如何修改 LAR2 指令的定义:
示例 3
以下示例介绍了在 S7-1500 中如何对 DB 变量进行间接寻址而不使用地址寄存器:
如果由 S7-300/400 创建的 SCL 块的定义清晰,则这些 SCL 块将自动移植到 S7-1500。 移植后,将程序位置无法识别的地方标记为问号,这将导致语法错误。 请在移植后检查程序中这些位置的定义,并在必要时进行相应更正。
某些情况下,移植过程中可能会更改程序代码。 而原程序中相应的代码段则会作为注释部分传送到移植后的代码块中, 这样便于跟踪移植时发生的更改。
在 S7-1500 中,统一了所有编程语言的间接寻址选项,因此在移植过程中将部分转换 S7-300/400 中支持的间接寻址。
下表简要列出了转换的选项。 下面详细介绍了各种语言结构的移植。
"BLOCK_DB" 数据类型到 "DB_ANY" 的移植
"BLOCK_DB" 数据类型在 S7-1500 中不可用。这种数据类型的变量将通过移植转换为 "DB_ANY" 数据类型。 "BLOCK_DB_TO_WORD" 和 "WORD_TO_BLOCK_DB"转换函数将通过移植转换为 "UINT_TO_WORD(DB_ANY_TO_UINT)" 和 "UINT_TO_DB_ANY(WORD_TO_UINT)" 。
以下举例说明如何移植 "BLOCK_DB" 数据类型。
在个表中,为移植前的三个程序段:
在第二个表中,为移植后的三个程序段:
移植 DB 变量的间接寻址
在 S7-1500 中,通过“PEEK”/“POKE”指令间接指定数据块或 DB 变量。在移植过程中将自动转换为间接寻址。
以下举例说明了如何移植 DB 变量的间接寻址。
在个表中,为移植前的程序段:
在第二个表中,为移植后的程序段:
移植 PLC 变量的间接寻址
在 S7-1500 中,通过“PEEK”/“POKE”指令间接指定 PLC 变量。在移植过程中将自动转换为间接寻址。
以下举例说明了如何移植 DB 变量的间接寻址。
在个表中,为移植前的程序段:
在第二个表中,为移植后的程序段:
S7-1500 的指令集略有不同。 包含有一些新指令或替换了旧指令。
在移植过程中,将尽可能的保留程序中所使用的指令。 如果一条指令在 S7-1500 中不可用,则将尝试将其替换为一个兼容的或类似的指令。 然后,需要再次检查移植后的程序并进行必要的修改。
例如,可能会发生以下变化:
  • 新指令中带有其它形参。 此时,需要组态这些参数。
  • 新指令的形参为其它数据类型。 此时,移植将自动增加一条指令转换数据类型。
如果在移植中无法确保参数分配的语义与原程序相同,则会将相关参数注释掉。 在移植后检查程序中这些位置处的语义,并在必要时进行更正。
以下举例说明了如何移植“AG_SEND”指令到“TSEND”指令。
在个表中,为移植前对“AG_SEND”的调用:
在个表中,为移植后对“TSEND”的调用:
" REQ “的实参源自“ AG_SEND ”指令的“ ACT ”参数。 该参数已注释掉,这是由于必须在此位置对程序进行检查。
“ID”的实参源自“ AG_SEND ”,也需要进行测试。
“ LEN ”参数的数据类型与“ AG_SEND ”的不同。 在移植过程中将自动进行转换。
移植表达式中的指令
在某些情况下,例如一个输出参数在移植后的数据类型不同而且必须形参进行转换,那么移植后一条指令可能会生成多条指令。 转换指令插入在移植后的指令之后。 然而,这也就意味着原始指令不能再用作表达式。 此时,移植将在移植后的块接口中增加一个临时变量,并将该指令的结果作为变量的值。 然后将该临时变量用作一个表达式。 通常无法对复杂的表达式进行自动移植。 移植后,将无法解释的表达式标记为问号,这将导致语法错误。 在移植后检查程序中这些位置处的语义,并在必要时进行更正。
以下举例说明了如何移植“READ_RTM”指令到“RTM”指令。
在个表中,为移植前对“READ_RTM”的调用:
在第二个表中,为移植后对“RTM”的调用:
原程序中的指令将作为注释部分传送到移植后的块中, 这样便于跟踪移植时发生的更改。
由于“ RTM ”中 CV 的数据类型为 DINT,因此将插入一个转换指令将实参从 INT 转换为 DINT。 这就意味着 RTM 结果不能再用作 IF 指令中的表达式。
在移植后块的接口处插入临时变量“ SCL_MIGRA_TEMP_INT_1 ”, 并将 RTM 指令的结果分配给该临时变量。
临时变量用作 IF 指令中的表达式而非“ RTM ”指令中的。
由 S7-300/400 创建的 GRAPH 程序可自动移植到 S7-1500 中。PLC 移植程序会对 GRAPH 程序进行调整,以便在 S7-1500 系列的 CPU 上正常运行。 在移植日志中,将记录移植过程中所有的程序自动变更,并提示用户所需进行的手动调整。
PLC 移植程序中对 GRAPH 程序的修改
下表列出了在 PLC 移植过程中一些自动修改的示例。 我们将在以下章节中详细介绍所作的所有更改。
  • 修改块接口
    移植程序对 GRAPH 块接口进行稍许更改, GRAPH 块可进行 S7-1500 优化块访问。
  • 集成的符号寻址
    集成符号编程是 SIMATIC S7-1500 中的一个特性。 通过这种方式极大地提高了编程效率,同时还降低了访问错误的风险。
    正因为此,如果初始程序使用一个尚未声明的符号名称作为地址,则移植程序就会为该地址指定一个符号名称。
  • GRAPH DB 的存储模型
    根据 S7-1500 的性能数据,就无需再使用对低内存空间具有一定要求的 GRAPH DB。 因此,GRAPH 中将不再包含各种内存空间模型。 由于用户可以访问整个参数集,因此可使用所有 GRAPH DB 中的完整功能。
    在移植过程中,将对低内存空间具有一定要求的 DB 进行扩展,以包括整个参数集。
S7-1500 的新功能
移植 GRAPH 程序之后,可以使用 S7-1500 的所有功能。以下列出了一些新功能示例:
  • 优化块访问
    通过优化块访问,将在块的可用存储区域中自动排列已声明的数据元素,从而提高存储空间的使用率。 并根据所使用的 CPU 对数据进行结构化和保存。从而极大提高了 CPU 的应用性能。 例如,从 HMI 中进行数据访问时不再出错。
    在 S7-1500 中,GRAPH 块始终启用“优化块访问”(Optimized block access) 属性,并且无法取消选中。
    另请参见: 可优化访问的块​
  • 新指令
    在“指令”(Instructions) 任务卡中包含 S7-1500 的完整指令集。其中,包含诸多新开发或创新的各种指令。 例如,在“基本指令”(Basic instructions) 窗格的“程序控制”(Program control) 文件夹中包含有编程本地故障排除的指令“GET_ERROR”。
    另请参见: GET_ERROR:获取本地错误信息​
  • LAD/FBD 函数
    在 S7-300/400 中,GRAPH 仅能对功能框中个布尔型输入处的前置逻辑运算进行编程。 而在 S7-1500 中,则可对所有布尔型输入的前置逻辑运算进行编程。
    这样,就可以为各指令选择性地启用或禁用使能输出 (ENO)。
    另请参见: 启用和禁用 EN/ENO 机制​
  • 新数据类型
    在 S7-1500 中,对数据类型集进行了扩展并新增了一些数据类型转换选项。
    另请参见: 有效数据类型概述​
  • 常量
    S7-1500 中还增加了一些常量符号选项。 这样就可以将数据类型分配给常量。
PLC 移植将自动修改 GRAPH 程序,以尽量适应新的 CPU 系列。 在此过程中,将对编程条件语句中的操作和 LAD 或 FBD 程序段进行分析。 并对 S7-1500 中无效的程序结构进行更新。 同时会将新 CPU 中无法使用的指令替换为相应的 S7-1500 指令。
符号寻址
集成符号编程是 SIMATIC S7-1500 中的一个特性。 通过这种方式极大地提高了编程效率,同时还降低了访问错误的风险。
如果原程序使用符号名称尚未声明的绝对地址,则会将该绝对地址标记为无效。 编译移植程序之前,必须先对符号名称进行声明。
如果原程序中使用已声明了符号名称的绝对地址,则在移植过程中将使用符号名称而非绝对地址。 将使用片断访问代替对所声明符号操作数中各个位的访问。
以下示例说明了移植前的绝对地址访问:
而下面显示的则是在移植过程中如何替换绝对地址访问。 由于在“DataBlock1”中个数据字节声明为“FirstDataByte”变量,因此可将该变量中个位的访问替换为一个片段访问。
完全限定访问
在 S7-300/400 程序中,通常经常使用部分限定寻址进行间接访问。 此时,只能指定数据块中的 DB 变量地址。 而不会指定地址中的 DB 名称或 DB 编号(如,%DBX0.2 )。 在运行过程中,程序将访问 DB 寄存器中当前存储的数据块。 S7-1500 不支持部分限定寻址。要间接寻址 DB 变量,则可以使用“DB_ANY”数据类型的块参数。
如果在 GRAPH 程序中使用了部分限定地址,则在移植后将报告为错误。 同时该块无法编译。 此时,需要将部分限定地址替换为完全限定访问。
条件语句中的 LAD/FBD 元素
Transition、Interlock、Supervision 和 Permanent 指令中的 LAD 或 FBD 程序段的移植过程,与单纯 LAD 或 FBD 块中程序段的移植过程相同。
另请参见: 将 LAD/FBD 程序移植到 S7-1500​
GRAPH 操作
SIMATIC S7-1500 对指令集进行了稍许修改。 包含有一些新指令或替换了旧指令。
如果在 GRAPH 操作中使用了这些指令,则在移植过程中将检查在 S7-1500 是否支持这些指令。并尽可能延续使用这些指令。 如果一条指令在 S7-1500 中不可用,则将尝试将其替换为一个兼容的或类似的指令。
例如,“RLDA: 循环左移状态位 CC 1”和“RRDA: 循环右移状态位 CC 1”指令。 这两个指令将替换为“ROR: 循环右移”和“ROL: 循环左移”指令。
如果在移植过程进行指令替换,则将在移植日志中进行相应记录。 然后,需要再次检查移植后的程序并进行必要的修改。
在移植过程中将修改 GRAPH 块的接口。修改后,GRAPH 可进行 S7-1500 优化内存访问。在 S7-1500 中,GRAPH 块始终激活优化块访问功能,并且无法取消选中。并会对以下区域进行更改:
  • 静态参数:“STATIC”
  • 输出参数:“OUTPUT”
  • 所有内部参数的保持性设置
如果在原程序中使用 S7-1500 中预留的参数名称,则在移植过程中会对这些参数进行重命名。
静态参数
在移植过程中,将对静态参数进行以下修改:
  • 该接口将在 GRAPH FB 的每步和转换条件的“静态”部分中包含一个结构。在 S7-300/400 中,使用“GraphStep”、“GraphStepMin”、“GraphTransition”和“GraphTransitionMin”数据类型。而在 S7-1500 中,则将使用新数据类型“G7_StepPlus”和“G7_TransitionPlus”重新生成步和转换条件的结构。
    具体的移植过程如下所示:
    • “SNO”和“TNO”参数将和原结构的默认值一同转换,而其它所有默认值则不会进行转换。对低内存空间具有一定要求的 GRAPH DB 程序中并不包含“SNO”和“TNO”参数。如果要移植一个对低内存空间具有一定要求的 DB,则在移植过程中将为以“1”开头的参数分配默认值。
    • 但不会自动调整 GRAPH 程序中使用修改后参数的位置,而是标记为错误。因此,在移植后必须手动调整所使用的位置。
  • 其它所有静态参数都将转换为“RT_DATA”结构。因此,移植过程将尽可能延续使用默认值,并自动调整程序中的使用位置。
输出参数
由于 S7-1500 不再支持标准分析,因此在移植过程中将删除以下输出参数:
  • T_CRIT
  • T_CRITOLD
  • T_CRITFLT
  • S_CRITLOC
  • S_CRITLOCERR
  • S_CRITSUP
但不会自动调整 GRAPH 程序中的使用位置,而是标记为错误。因此,在移植后必须手动调整所使用的位置。
所有内部参数的保持性设置
内部 GRAPH 参数的保持性设置会影响掉电后顺控系统的动作:
  • 带有保持性参数的 GRAPH 块在掉电后,将继续执行上一个激活的步。
  • 带有非保持性参数的 GRAPH 块在掉电后,将重新启动初始步。
系统默认 S7-300/400 创建的 GRAPH 块具有保持性接口参数。
在将 GRAPH 函数块从 S7-300/S7-400 CPU 移植到 S7-1500 CPU 时,内部参数的保持性不会保留。移植后,内部参数将声明为非保持性。
要在移植后将 GRAPH 函数块的内部参数再次声明为保持性,请按以下步骤操作:
  1. 在移植后,打开 GRAPH 函数块。
  2. 在“编辑”(Edit) 菜单中,选择“保持性内部参数”(Retentive internal parameters) 命令。
    在 GRAPH 函数块的块接口中,将“保留”(Retain) 列中内部参数的设置从“保留”(Retain) 更变为“非保留”(Non-retain)。
  3. 保存并编译项目。
    参数设置将应用于所有背景数据块。
继续阅读
weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: