全新的西门子S7-1500PLC 带来了标准型,紧凑型,分布式以及开放式不同类型的 CPU 模块。凭借快速的响应时间、集成的 CPU 显示面板以及相应的调试和诊断机制,SIMATIC S7-1500 的 CPU *地提升了生产效率,降低了生产成本。
产品简介
详细介绍
山东西门子S7-1500代理商欢迎您(总代理)
将 PLC 程序移植到 S7-1500 CPU / ET 200SP 中
5.2.1 有关移植 PLC 程序的基本信息
可以在 TIA Portal 中移植 PLC 程序。TIA Portal 中的移植称为“PLC 移植”。通过这种移植,可以在项目中创建新模块并将现有 PLC 程序复制到新模块中。旧模块在项目中仍然可用。
移植较之复制的优势在于,程序会好地适应新 CPU 系列。而且会更新旧的程序结构。同时会将新模块中无法使用的指令替换为相应的 S7-1500 指令。
下表提供了可移植模块的概述:
原始块 | 目标块 |
---|---|
S7-300/400 CPU | S7-1500 CPU |
ET 200S CPU | ET200SP CPU |
ET 200S CPU | S7-1500 CPU |
ET 200S CPU | ET 200pro CPU |
IM 154-8 CPU | CPU 1516-2 PN |
移植到 S7-1500 的规则与移植到 ET 200SP 中的相同。PLC 程序在这两种移植操作中被视为相同。
移植范围
在 PLC 移植过程中,会将 PLC 程序的所有组件都复制到新创建的模块中。包括以下对象,例如:
程序块,S7-1500 支持其编程语言且无专有技术保护。
PLC 变量表
检查表和强制表
PLC 数据类型
工艺对象
项目导航中的用户定义组
输出模块的硬件配置不会自动传输。
警告 | ||
防止人身伤害和设备损坏 某些情况下,在 PLC 移植过程中会对程序进行一些更改。因此,在移植后必须在测试环境中先仔细检查,才能使用。 |
5.2.2 进行移植
具有一个有效的且*的参考程序。
所有块均编译为版本,以及项目中的块,但项目中的块不能在程序执行过程中调用。
程序由 TIA Portal V12 或更高版本创建,或已升级到此版本。
移植前的准备
可按以下步骤进行移植前的程序准备:
在项目导航中打开包含引用程序的设备。
打开文件夹“程序块”(Program blocks) 并检查其是否包含专有技术保护块。
移除块的专有技术保护。
打开文件夹“程序块 > 系统块”(Program blocks > System blocks),并检查文件夹中所包含的块是否带有扩展名“_LF”(传统函数)。
在 TIA Portal 中不支持 STEP 7 中的某些库块。由于这些块受专有技术保护,因此在移植 PLC 时,不会将这些块传送到新设备。
必要时,可使用“指令”(Instructions) 任务卡中的指令替换这些块。
如果程序包含有关报警组态的指示信息,请遵循有关移植报警及相关值的指示信息。
另请参见“ 移植报警及相关值 ”
操作步骤
要在 TIA Portal 中移植 PLC 程序,请按以下步骤操作:
在项目导航中打开包含引用程序的设备。
打开设备组态。
在设备视图或网络视图中选择包含引用程序的模块。
在快捷菜单中,选择命令“移植到 S7-1500”(Migrate to S7-1500)。
将打开“移植到 S7-1500”(Migrate to S7-1500) 对话框。
在“新设备”(New device) 区域中,选择程序移植的目标设备并使用“确定”(OK) 进行确认。
将显示一条安全消息,通知该程序在移植过程中将发生变更。
确认此安全提示。
此时将打开一个对话框,在此可移植程序中要用于点对点通信的指令。
选择所需指令集。
选择“对 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 程序。将显示一条报警信息,通知在移植过程中是否发生错误。报警还包含一条件链接指向该移植日志。
打开移植日志。其中包含有关移植的详细信息,以及为使程序在新设备上可执行而必须进行的程序更改。
然后,按照移植日志中的所有信息进行处理。
编译移植的项目。
另请参见“ 移植点对点程序块 ”
结果
在项目导航中的原始设备旁边创建新设备。该 CPU 中包含移植后的 PLC 程序。
要访问 S7-1500 中的所以功能,建议启用移植块的优先块访问。更多信息,请参见帮助中的“优化访问的块”部分。
5.2.3 显示日志文件
每次移植都将创建一个日志文件。该日志文件包含以下信息:
移植期间要对对象所作的修改。
对程序进行必要调整的相关信息。
步骤
如果要显示移植的日志文件,请执行以下步骤:
在项目树中打开“公共数据 > 日志”(Common data > Logs) 文件夹。 在此文件夹中,包含之先执行的所有移植。
双击所需的移植日志。
将打开该日志。
在“转至”(Go to) 栏中,程序中与位置相关的消息将使用箭头进行标记。 双击该箭头,将跳转到程序中的相关位置。
而带有附加信息的消息则会在“?”栏中标记为问号。 要查看该消息的附加信息,则单击此问号。
5.2.4 移植 PLC 程序时的特别注意事项
5.2.4.1 有关移植 PLC 程序的信息
5.2.4.1.1 移植组织块
以下规则适用于移植组织块:
在传送过程中,块名称和编号都保持不变。
块接口也保持不变。
OB 将分配给对应此 OB 类型的事件。
同时,诸如优先级之类的 OB 参数也将保持不变。如果在新 CPU 中分配了其它参数,则将为这些参数默认值。
S7-1500 中对某些组织块 (OB) 不支持,因此无法移植。下表简要列出这些组织块以及有关如何在程序中重现功能的相关信息。
无法移植的 OB | 备注 |
---|---|
OB60(多处理器中断) | 该 OB 不可替代。S7-1500 不具有多处理器功能。 |
OB65(技术同步中断) | 在程序中检查该 OB 是否可替换为 MC 伺服 OB 或 MC 插补器 OB。 |
OB7x(冗余错误) | 该 OB 不可替代。S7-1500 不具有冗余功能。 |
OB81(电源错误) | 在程序中检查该 OB 是否可替换为诊断中断 OB。 |
OB84(CPU 硬件故障) | 在程序中检查该 OB 是否可替换为诊断中断 OB。 |
OB85(程序执行错误) | 在程序中检查该 OB 是否可替换为插拔 OB 或机架错误 OB。 |
OB87(通信错误) | 在程序中检查该 OB 是否可替换为诊断中断 OB。 |
OB88(处理中断) | 在程序中检查该 OB 是否可替换为编程错误 OB。 |
OB90(后台循环) | 该 OB 不可替代。S7-1500 不具有后台处理功能。 |
OB101(热启动) | 该 OB 不可替代。S7-1500 不具有热启动功能。 |
OB102(冷启动) | 在程序中检查该 OB 是否可替换为启动 OB。 |
5.2.4.1.2 移植硬件 ID
如果程序对硬件模块寻址,例如在“LADDR”或“ID”参数中,那么这些地址在移植到新硬件后就会失效。必须更换这些地址。S7-1500 的硬件模块通过硬件 ID 寻址。这意味着移植后必须在“LADDR”或“ID”参数中输入新模块的硬件标识符。
为此,请按以下步骤操作:
打开设备组态。
选择要寻址的模块。
在窗口中选择“属性 > 系统常量”(Properties > System constants) 选项卡。
表格包括所有已用模块的常量和所需的硬件标识符。
选择要寻址模块的常量,然后从快捷菜单选择“复制”(Copy) 命令。
将常量插入已移植指令的“LADDR”或“ID”参数中。
5.2.4.1.3 移植 IEC 定时器和 IEC 计数器
在 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”用于减计数。
5.2.4.1.4 移植 CPU 数据块
由 CPU 中的 CREAT_DB 或 CREATE_DB 指令生成且不能在线使用的块,不能移植。
5.2.4.1.5 移植诊断功能
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”指令评估特定应用。
5.2.4.1.6 移植对局部数据的访问
在 S7-300/400 中,无需声明地址符号即可对块的局部数据进行寻址。
由于在 S7-1500 中不再支持真正的寻址,将按以下方式进行移植:
如果在局部数据中某个区域的块接口内声明了临时变量,则地址将转换为符号地址。
如果没有相应的临时变量,则将保留地址。由于在移植过程中可能会因一些原因创建其它局部变量,因此局部数据中的地址可能有所变化。因而,应检查所使用的地址是否仍然正确以及是否寻址的数据是否正确。必要时,在“Temp”区域创建一个变量并使用该变量进行寻址。要专门寻址声明变量中的区域,可以通过 AT 覆盖现有变量或通过语法 .X、.B、.W 或 .D 寻址各区域。
示例
以下举例说明了局部数据寻址的移植。
在*个表中,为移植前的程序段:
STL
| |
---|---|
L %LW20 L %LW3 +I T %LW5 |
在第二个表中,为移植后的程序段:
STL
| |
---|---|
L "MyTempVar1" L "MyTempVar2" +I T %LW5 |
已为“LW20”和“LW3”声明了临时变量。移植后,将在程序中使用这些临时变量。
未对“LW5”声明变量。因此,需要检查移植后的访问是否仍然正确。
5.2.4.1.7 S7-1500 中的块参数
在 S7-1500 的块内使用块参数时,应遵循以下规则:
Input 参数只能读取。
Out 参数只可写入。
In/out 参数可读取和写入。
可能只写入函数值 (Ret_Val)。
如果程序不符合以上规则,则将编译期间输出一条警告信息。在这种情况下,可将相关输入或输出参数转化为输入/输出参数。
适用于函数 (FC) 参数分配的其它规则。
函数的参数分配
块参数作为函数 (FC) 中的边沿存储位
在函数 (FC) 中编程边沿评估时,必须遵循上述的参数分配规则:
作为边沿存储位,数据值需要具有读写权限而且为多个循环保留。由于输入参数 (input) 为只读,而输出参数 (output) 为只写,因此无法作为边沿存储位。临时局部数据 (Temp) 也不能用作边沿存储位,这是因为它只能用于一个循环中。
因此,只能将 in/out 参数 (InOut) 作为函数 (FC) 中的边沿存储位。如果通过片段访问进行寻址,则可以使用 in/out 参数的单个位作为边沿存储位。
以下示例说明了如何将 in/out 参数作为边沿存储位。
STL
| |
---|---|
FP #InOutFlagStore.x0 |
“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”。但结构化的输出参数不会预先赋值。在调用块时,这种输出参数将作为指针传送,因此不能是未定义。
5.2.4.1.8 S7-1500 中的多重实例功能
S7-1500 系列 CPU 中的所有函数块都具有多重实例功能。这意味着,在参考程序中标记为不带有多重实例功能的函数块,移植后可转换为带有多重实例功能的块。每次转化 FB 时都会在移植日志中都会输出一条通知。如果在移植后继续将 FB 用作单实例,则程序可直接运行无需更改。
5.2.4.1.9 S7-1500 中的浮点数
S7-1500 中,无效浮点数的处理方式与 S7-300/400 中的不同。示例:
S7-300/400:表达式“无效浮点数 <> 1.0”的结果为 FALSE。
S7-1500:表达式“无效浮点数 <> 1.0”的结果为 TRUE。
请注意,由于存在这种差异,可能会导致程序中的指令产生不同结果。
5.2.4.1.10 将 STRING 的具体字符写入 S7-1500
如果要写入 STRING 中的某个字符或字节,则 S7-1500 CPU 查目标地址是否位于该 STRING 的实际长度内。如果超出实际长度,则不会写入该字符或字节。例外:在 STRING 实际长度后直接写入字符时。
以下示例显示了实际长度为 5 时的字符串“hello”。该 STRING 的第 27 个字符超出了实际长度,无法写入。STRING 将保持不变,赋值结果为“hello”。
SCL
| |
---|---|
MyDB.mystring := 'hello'; | |
MyDB.mystring[27] := CHAR_TO_BYTE('!'); |
以下示例显示上述的例外情况:该字符将直接写在 STRING 后的第 6 个字符处。赋值结果为“hello!”。
SCL
| |
---|---|
MyDB.mystring := 'hello'; | |
MyDB.mystring[6] := CHAR_TO_BYTE('!'); |
如果可能,请尽量使用“扩展指令 > 字符串 + 字符”(Extended instructions > String + Cha) 窗格中的指令,对 STRING 进行处理。
SCL
| |
---|---|
CONCAT(IN1 := 'hello', IN2 := '!'); |
5.2.4.1.11 访问 S7-1500 中的状态字
S7-1500 中不再支持状态字。状态字中包含的信息极少,且目前只能在 STL 中进行评估。LAD 和 FBD 不再支持状态字评估。以下章节将介绍有关各编程语言中状态字访问的移植信息。
5.2.4.1.12 将软件更改加载到 S7-1500
在下载软件变更方面,S7-1500 系列 CPU 的特性与 S7-300/400 系列 CPU 的不同。例如,S7-1500 CPU 允许在 STOP 和 RUN 模式中下载变更,而不会影响之前加载变量的实际值。
5.2.4.2 移植指令到 S7-1500
5.2.4.2.1 有关移植指令的信息
在移植过程中,会将原程序中使用的指令尽可能多的传递给新程序。在此过程中,会在尽可能不更改原程序语义的情况下自动进行一些必要的修改。如果指令存在多个版本,那么移植操作始终使用的指令版本。
并使用兼容或类似指令自动替换 S7-1500 中不可用的指令。
移植场景
下表列出了移植指令时可能发生的情况:
类别 | 情况 | 系统响应 | 手动修改程序 |
---|---|---|---|
1 | 该指令在两个 CPU 系列中相同。 | 移植该指令。 | 无需任何修改。所移植程序的语义保持不变且可编译。 |
2 | 该指令在 S7-1500 中不可用,但是存在与之兼容的新指令。 | 将该指令替换为新指令。可能会插入保留原程序语义的其它指令。并在移植日志中报告这一替换操作。 | 无需任何修改。所移植程序的语义保持不变且可编译。 |
3 | 该指令在 S7-1500 中不可用,但是存在与之类似的指令。 | 将该指令替换为该类似的指令。并在移植日志中报告这一替换操作。程序中将标记待检查的位置。在程序中的相应位置处或在编译过程中,将以注释形式显示所需调整的相关信息。 | 此时,必须检测程序并进行必要的修改。 |
4 | 该指令在 S7-1500 中不可用,也没有与之类似的指令。 | 该指令将以红色高亮显示。同时该程序无法编译。 | 此时,必须检测程序并进行必要的修改。 |
移植类别 3 的指令信息
S7-300/400 中的一些指令在 S7-1500 中不再可用,这是由于在 S7-1500 中采用了更为便捷高效的方式实现这些功能。在移植过程中,PLC 移植将使用相应的新指令替代这些不支持的指令。但对于类别 3 中的指令则无法自动完整移植。例如,可能需要添加新参数。在程序中将标记出无法自动移植的位置。在程序的相应位置、移植日志或编译过程中,将以注释形式直接显示所需调整的相关信息。
可能需要进行以下手动调整:
如果新指令有其它形参,则将为这些形参相应的实参。
如果新指令中修改了参数名称,则需更改参数的分配。
如果移植无法确保参数分配的定义与参考程序的相同,则将标记出需检查的实参。在移植后检查程序中这些位置处的语义,并在必要时进行更正。
如果参考程序中包含有硬件标识号(例如,在“LADDR”参数中),则也会将这些标识号标记出来。在“LADDR”参数中输入新的 HW 标识符。
如果新指令修改了错误代码,则需在程序中修改错误的处理方式。
有关移植类别 3 的指令示例,请参见章节“ 移植数据块指令 ”。
移植类别 4 的指令信息
有些指令在 S7-1500 中已不再有效,这是因为这些指令的功能已经*改变。在移植过程中不会替代这些指令。并在程序中以红色显示,同时程序无法编译。在程序的相应位置、移植日志或编译过程中,将以注释形式直接显示所需调整的相关信息。
在以下章节,我们将简要介绍移植类别 4 中不可移植的指令以及相应的备选解决方案。
5.2.4.2.2 无法移植指令的概述
有些 S7-300/400 中的指令无法移植到 S7-1500 中。例如,与某些特定模块一同使用的指令或者 S7-1500 中指令的功能有所不同时。
有关替换不可移植指令的信息(类别 4)
以下举例说明了无法移植的指令及其替换方式:
指令组 | 不可移 植的指令 | 备注 |
---|---|---|
其它指令 | SETP | 检查该指令在程序中是否可替换为“SET_BF”指令。 |
RESETP | 检查该指令在程序中是否可替换为“RESET_BF”指令。 | |
DRUM_X | 检查该指令在程序中是否可替换为“DRUM”指令。 | |
TONR_X | 检查该指令在程序中是否可替换为“TONR”指令。 | |
RESET | 检查该指令在程序中是否可替换为“RESET_BF”指令。 | |
SET | 检查该指令在程序中是否可替换为“SET_BF”指令。 | |
WSR | 该指令不可替换。更多帮助信息,请联系 SIMATIC 客户支持。 | |
SHRB | 该指令不可替换。更多帮助信息,请联系 SIMATIC 客户支持。 | |
RESETI | 检查该指令在程序中是否可替换为“RESET_BF”指令。 | |
SETI | 检查该指令在程序中是否可替换为“SET_BF”指令。 | |
运行时控制 | COMPRESS | 删除该指令。在 S7-1500 中,无需压缩 CPU 的 工作存储器或装载内存。 |
PROTECT | 在 S7-1500 CPU 的前面板中或 CPU 的模块属性中, 组态防护等级和密码。 | |
CIR | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
日期和时间 | SET_CLKS | 检查该指令在程序中是否可替换为“WR_SYS_T”指令。 |
LOC_TIME | 检查该指令在程序中是否可替换为“RD_SYS_T”指令。 | |
BT_LT | 检查该指令在程序中是否可替换为“RD_SYS_T”指令。 | |
LT_BT | 检查该指令在程序中是否可替换为“RD_SYS_T”指令。 | |
S_LTINT | 检查该指令在程序中是否可替换为“SET_TINTL”指令。 | |
SET_SW | 检查该指令在程序中是否可替换为“WR_SYS_T” 或“RD_SYS_T”指令。 | |
SET_SW_S | 检查该指令在程序中是否可替换为“WR_SYS_T” 或“RD_SYS_T”指令。 | |
TIMESTMP | 检查该指令在程序中是否可替换为“WR_SYS_T” 或“RD_SYS_T”指令。 | |
WS_RULES | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
分布式 I/O | D_PRAL | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 |
ASi_3422 | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
SALRM | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
模块参数分配 | PARM_MOD | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 |
中断 | MP_ALM | S7-1500 不具有多处理器功能。 |
REPL_VAL | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
报警 | EN_MSG | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 |
DIS_MSG | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
ALARM_SQ | 检查该指令在程序中是否可替换为“ Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM_S | 检查该指令在程序中是否可替换为“ Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM_SC | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
WR_USMSG | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
READ_SI | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
DEL_SI | 该指令不可替换。更多帮助信息, 请联系 SIMATIC 客户支持。 | |
ALARM_DQ | 检查该指令在程序中是否可替换为“ Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM_D | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
NOTIFY_8P | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM_8 | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
ALARM_8P | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
NOTIFY | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
AR_SEND | 检查该指令在程序中是否可替换为 “Program_Alarm”指令。 更多信息,请参见“ 移植报警及相关值 ” 章节中或者联系 SIMATIC 客户支持。 | |
诊断 | RDSYSST | 指令“RDSYSST:读取系统状态列表” 指令在 S7-1500 中不再可用,这是因为 S7-1500 产品系列的 CPU 中没有系统状态列表。但可通过“GET_DIAG”、“Geo2Log”、 “DeviceStates”或“ModuleStates”指令读取相关信息。更多信息,请参见“ 移植指令 RDSYSST ”章节中或者联系 SIMATIC 客户支持。 |
OB_RT | 检查该指令在程序中是否可替换为“RD_SYS_T”指令。 | |
表功能 | ATT | 这些指令不可替换。如果这些指令在程序中必不可缺,则必须手动实现该指令。更多技术支持信息,请参见“ 表格指令的移植过程 ”章节或联系 SIMATIC 客户技术支持。 |
FIFO | ||
TBL_FIND | ||
LIFO | ||
TBL | ||
TBL_WRD | ||
WRD_TBL | ||
DEV | ||
CDT | ||
TBL_TBL | ||
PACK | ||
寻址 | LGC_GADR | 这两种指令不可用于网关(例如,IE/PB 链接器)后的模块。可以使用指令“GEO2LOG”和“LOG2GEO”代替。 “LGC_GADR”和“GADR_LGC”指令可继续用于那些没有通过网关(例如,IE/PB 链接器)连接到 CPU 的模块。 |
GADR_LGC | ||
智能从站 | SET_ADDR | 该指令不可替换。更多帮助信息,请联系 SIMATIC 客户支持。 |
PID 控制 | TUN_EC | 检查程序中该指令是否可替换为“PID_Compact”或“PID_3Step”工艺对象。 |
TUN_ES | ||
功能模块 | CNT_CTRL | 检查程序中该指令是否可替换为“High_Speed_Counter”工艺对象,与“S7-1500 TM Count 2x24V”或“TM PosInput 2”计数器模块配合使用。 也可以检查所需的函数是否可使用“ET 200S 1Count24V”或“1Count5V”模块实现。 |
DIAG_INF | ||
CNT_CTL1 | ||
CNT_CTL2 | ||
CNT2WRPN | ||
CNT2RDPN | ||
CNT2_CTR | ||
DIAG_RD | ||
ABS_INIT | 检查这些函数是否可由“S7-1500 Motion”或“ET 200S 1PosU”实现。 检查这些函数是否可使用“TM Count 2x24V”或“TM PosInput 2”模块实现。 | |
ABS_CTRL | ||
ABS_DIAG | ||
CAM_INIT | 检查是否可以通过模块“S7-1500 TM Count 2x24V”或“TM PosInput 2”读取编码器,并使用两个 DQ 进行快速响应。根据应用程序中的编码器值,可以切换为标准 DQ 的其它 DQ。 | |
CAM_CTRL | ||
CAM_DIAG | ||
PID_FM | 检查程序中该指令是否可替换为工艺对象“PID_Compact”、“PID_3Step”或 PID 的基本函数。 | |
FUZ_355 | ||
FORCE355 | ||
READ_355 | ||
CH_DIAG | ||
PID_PAR | ||
CJ_T_PAR | ||
FMT_PID | ||
FMT_PAR | ||
FMT_CJ_T | ||
FMT_DS1 | ||
FMT_TUN | ||
FMT_PV | ||
300C 函数 | ANALOG_300C | 检查程序中的指令是否可以替换为“运动控制”组中的指令。 |
DIGITAL_300C | ||
COUNT_300C | 检查程序中的指令是否可替换为“High_Speed_Counter”工艺对象,与计数器模块配合使用。 | |
FREQUENC_300C | ||
PULSE_300C | 检查程序中的指令是否可以替换为“CTRL_PWM”指令。 | |
SEND_RK_300C | S7-1500 的通信指令不支持 RK 512。如果需要使用 RK 功能,则需手动实现。 | |
FETCH_RK_300C | ||
SERVE_RK_300C | ||
与智能从站/智能设备的通信 | I_GET | 这些指令不可替换。更多帮助信息,请联系 SIMATIC 客户支持。 |
I_PUT | ||
I_ABORT | ||
S7 通信 | 检查程序中的这些指令是否可替换为 S7-1500 中的 S7 通信指令。例如,指令“CONTROL”和“C_CNTRL”可替换为“T_DIAG”指令。 | |
START | ||
STOP | ||
RESUME | ||
STATUS | ||
USTATUS | ||
CONTROL | ||
C_CNTRL | ||
开放式用户通信 | TCON_PAR | S7-1500 中进行开放式用户通信时不需要使用这些指令。在块属性中,已设置了相应的连接参数。 |
TADDR_PAR | ||
TCP_conn_active | ||
TCP_conn_passive | ||
ISOonTCP_conn_active | ||
SOonTCP_conn_passive | ||
ISOonTCP_conn_CP_active | ||
ISOonTCP_conn_CP_passive | ||
UDP_local_open | ||
UDP_rem_address_and_port | ||
通信处理器 | SIMATIC NET CP 组的指令 PTP CP 340、PTP CP341、PTP CP 440、PTP CP 441 组的指令 | 有关这些指令的详细信息,请参见章节“ 通信指令的移植过程 ”。 |
PROFINET / CBA | PN_IN | S7-1500 不支持 PROFINET/CBA 通信。而使用 S7 通信或开放式用户通信。 |
PN_OUT | ||
PN_DP | ||
MPI 通信 | X_SEND | S7-1500 不支持 MPI 通信。 而使用 S7 通信或开放式用户通信。 |
X_RCV | ||
X_GET | ||
X_PUT | ||
X_ABORT | ||
全局数据通信 | GD_SND | S7-1500 不支持全局数据通信。 而使用 S7 通信或开放式用户通信。 |
GD_RCV | ||
点对点通信 | P_PRINT | 点对点通信模块不支持打印功能。 |
P_PRINT341 | 点对点通信模块不支持打印功能。 | |
MODB_341 | S7-1500 不支持 CP 341/CP 441 中的这些块。而使用 Modbus (RTU) 中的指令进行替代。
与 S7-1500 点对点模块连接
有关这些指令的详细信息,请参见章节“ 移植点对点程序块 ”。 | |
MODB_441 | ||
S_MODB | S7-1500 不支持 ET 200S 1SI 中的这些指令。而使用 Modbus (RTU) 或 USS 中的指令,连接点到点模块“ET 200SP CM PtP”。 有关这些指令的详细信息,请参见章节“ 移植点对点程序块 ”。 | |
S_USST | ||
S_USSR | ||
S_USSI | ||
远程服务 | PG_DIAL | S7-1500 不支持将 MPI 接口作为默认接口。该指令不再可用。 |
AS_DIAL | S7-1500 不支持将 MPI 接口作为默认接口。该指令不再可用。 | |
SMS_SEND | S7-1500 不支持将 MPI 接口作为默认接口。检查该指令在程序中是否可替换为“TMAIL_C”指令。 | |
AS_MAIL | S7-1500 不支持将 MPI 接口作为默认接口。检查该指令在程序中是否可替换为“TMAIL_C”指令。 | |
用户库 | PNIO_DIAG | 可将“PNIO_DIAG”指令下载到 S7-300/400 的用户库进行故障诊断。在 S7-1500 中已集成有诊断功能,因而不再需要“PNIO_DIAG”指令。 默认情况下,在 S7-1500 中启用系统诊断。因此,可以直接使用系统诊断而进行更多设置。必要时,可以在“属性 > 诊断”(Properties > Diagnostics)选项卡内对 S7-1500 设备组态中的系统诊断进行设置。在该选项卡中,也可组态系统诊断中断。在默认情况下,将启用这些中断。 在移植后,可以删除与“PNIO_DIAG”一起使用的诊断画面和 HMI 面板中的相关变量。而使用诊断画面中的“系统诊断显示”进行控制。 |
说明 | ||
无法移植的指令的技术支持 |
5.2.4.2.3 移植数据块指令
S7-1500 包含有一个“数据块”类别的修订指令集。 在移植过程中将自动替换这些指令。 之后还须进行手动修改。
下表简要列出了数据块指令的移植过程:
S7-300/400 中的指令 | S7-1500 中的指令 | 移植类别 |
---|---|---|
CREA_DBL | CREATE_DB | 3 |
CREAT_DB | CREATE_DB | 3 |
CREA_DB | CREATE_DB | 3 |
DEL_DB | DELETE_DB | 3 |
TEST_DB | ATTR_DB | 3 |
注意 | ||
异步处理 S7-1500 中的新指令可以异步执行,即这些指令的执行可以跨多个编程周期。 | ||
移植后手动调整
在 S7-1500 中,这些指令还带有其它形参,如用于进行异步执行。 在移植过程中,需要提供具有相应实参的附加参数。
在 S7-1500 中,所创建 DB 的块编号必须介于 60000 到 60999 之间。因此,需要将参数“LOW_LIMIT”和“UP_LIMIT”调整到新的编号范围。
有关这些参数的详细说明,请参见 S7-1500 的参考帮助。
示例
以下举例说明了使用“CREATE_DB”指令替换“CREAT_DB”指令的移植过程。
在*张图中,为移植前对“CREAT_DB”的调用:
在第二张图中,为移植后对“CREATE_DB”的调用:
“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”。 要判别该信号,需要将输出参数与一个操作数进行互连。
5.2.4.2.4 移植指令 RDSYSST
指令“ 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 中是否仍然可用,以及如何读取。
部分列表 | SZL-ID | 移植 |
---|---|---|
模块 ID | W#16#xy11 | 可使用“RDREC”指令读取该信息。 读取“ INDEX ”参数中的数据记录 16#AFF0。 |
CPU 特性 | W#16#xy12 | S7-1500 中目前不提供该信息。 |
用户存储器区域 | W#16#xy13 | S7-1500 中目前不提供该信息。 |
系统区域 | W#16#xy14 | S7-1500 中目前不提供该信息。 |
块类型 | W#16#xy15 | S7-1500 中目前不提供该信息。 |
一个组件的标识 | W#16#xy1C | 可使用指令“RDREC”读取*模块和 PROFINET IO 中的信息。 读取“ INDEX ”参数中的数据记录 16#AFF0。 |
中断状态 | W#16#xy22 | S7-1500 中不提供该信息。 |
分配部分过程映像分配和 OB | W#16#xy25 | S7-1500 中不提供该信息。 |
通信:状态数据 | W#16#xy32 | S7-1500 中不提供该信息。 |
H-CPU 组信息 | W#16#xy71 | 不相关 |
模块 LED 的状态 | W#16#xy74 | 可使用指令“LED”读取该信息。 读取“ LED ”参数中的数据记录 W#16#xy74。 |
H 系统中已转换的 DP 从站 | W#16#xy75 | 不相关 |
DP 主站系统信息 | W#16#xy90 | S7-1500 中不提供该信息。 |
模块状态信息 | W#16#xy91 | 可使用指令“GET_DIAG”或“ModuleStates”读取该信息。 |
机架/站的状态信息 | W#16#xy92 | 可使用指令“GET_DIAG”或“DeviceStates”读取该信息。 |
机架/站的状态信息 | W#16#xy94 | 可使用指令“GET_DIAG”或“DeviceStates”读取该信息。 |
扩展 DP 主站系统信息 | W#16#xy95 | S7-1500 中不提供该信息。 |
PROFINET IO 和 PROFIBUS DP 模块的状态信息 | W#16#xy96 | 可使用指令“GET_DIAG”、“ModuleStates”或“DeviceStates”读取该信息。 |
工具快换装置的信息 (PROFINET IO) | W#16#xy9C | S7-1500 中不提供该信息。 |
诊断缓冲区 | W#16#xyA0 | S7-1500 中不提供该信息。 |
模块诊断信息(数据记录 0) | W#16#00B1 | 可使用指令“GET_DIAG”或“RDREC”读取该信息。在中断 OB 中,还可使用“RALRM”指令获取诊断信息。 |
模块诊断信息(数据记录 1),物理地址 | W#16#00B2 | 可使用指令“RDREC”或“GEO2LOG”读取该信息。在中断 OB 中,还可使用“RALRM”指令获取诊断信息。 |
模块诊断信息(数据记录 1),逻辑地址 | W#16#00B3 | 可使用指令“GET_DIAG”或“RDREC”读取该信息。在中断 OB 中,还可使用“RALRM”指令获取诊断信息。 |
从站诊断数据 | W#16#00B4 | 可使用指令“ModuleStates”或“GET_DIAG”读取部分信息。 在中断 OB 中,还可使用“RALRM”指令获取诊断信息。 有些信息在 S7-1500 中不再使用。 |
5.2.4.2.5 移植 T_CONV 指令
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 并使用“工作日”组件。
更多信息,请参见“另请参见”。
参见
5.2.4.2.6 移植报警及相关值
在 S7-1500 中,可以通过“Program_Alarm”指令集中执行报警组态的所有功能。
“Program_Alarm”将取代 S7-300/400 中的以下指令:
用于报警组态的指令 (S7-300/400) | 用于报警组态的指令 (S7-1500) |
---|---|
ALARM_SQ | Program_Alarm(移植类别 4) |
ALARM_S | |
ALARM_SC | |
ALARM_DQ | |
ALARM_D | |
NOTIFY_8P | |
ALARM | |
ALARM_8 | |
ALARM_8P | |
NOTIFY | |
AR_SEND |
报警移植过程
系统不会自动移植报警。您需要在移植后手动重新组态报警。
以下部分将介绍如何准备程序以使报警文本在移植后仍然保留,并使后续手动工作降至少:
要移植报警,请执行以下步骤:
打开包含报警的块。
该块的接口中包含一个参数,该参数具有报警数据类型(例如,数据类型“C_Alarm_8”、“C_Alarm_s”、“C_Notify”等)。该参数定义了报警编号输入。
将报警编号输入的参数移至“Static”部分中。
保存并编译该块。
然后执行 PLC 移植。
另请参见“ 进行移植 ”
在新创建的 CPU 中,再次打开包含报警的块。
用于报警组态的指令无法移植,且显示为红色。
使用新数据类型“Program_Alarm”替换报警数据类型(例如“C_Alarm_s”)。如果选择列表中未提供数据类型“Program_Alarm”,则使用键盘输入该名称。
打开“指令”(Instructions) 任务卡,并浏览至“扩展指令”(Extended instructions) 窗格的“报警”(Alarms) 文件夹。
将“Program_Alarm”指令拖到您的程序段中。
在“调用选项”(Call options) 对话框中,在“接口中的名称”(Name in the interface) 输入字段中选择先前重新组态的报警变量。
打开变量属性,转至“报警”(Alarm) 选项卡。
已输入来自输出程序的报警文本。
从相关值中删除元素类型的字符(例如 Y、W、X、I 等)。相关值不包含有关 S7-1500 中元素类型的信息。
另请参见“ 相关值的结构 ”
从程序段中删除旧的报警块。
已移植报警组态。已从输出程序中获取报警文本。
5.2.4.2.7 表格指令的移植过程
5.2.4.2.7.1 移植“ATT: 将值添加到表格中”的示例
“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“ATT: 将值添加到表格中”为例,说明如何实现该函数功能。
实现
以下 SCL 程序中说明了如何实现“ATT”指令。 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
操作数 | 声明 | 数据类型 | 说明 | |
---|---|---|---|---|
val | Input | INT | 输入的值 | |
tab | InOut | PLC 数据类型“Table10” | 包含有 10 行的表格 | |
x | InOut | INT 类型的 ARRAY[0..9] | 每个 ARRAY 元素表示一行。 本示例中使用 INT 类型的 ARRAY。 但是,可创建任何数据类型的 ARRAY。 如,也可以使用 STRUCT 数据类型的 ARRAY 或 PLC 数据类型的 ARRAY。 | |
lng | InOut | INT | 缓冲区的长度。 该值取决于“tab.x”的 ARRAY 中元素的数目。 | |
first | InOut | INT | *个写入值 | |
last | InOut | INT | 后一个写入值 | |
h | Temp | INT | 辅助变量 | |
Ret_Val | BOOL | 函数值 |
下表列出如何实现函数“Attend”:
该函数将在表格的后一行写入参数“#val”的值。
SCL
| |
---|---|
#h:=(#tab.last+1) MOD #tab.lng; // 递增索引 IF #h <> #tab.first THEN // 扫描以查看索引是否可以相互覆盖 #tab.x[#tab.last] := #val; // 写入值 #tab.last := #h; // 保存下一个空元素的索引 #Attend:= false; ELSE #Attend:= true; // 错误 >> 表格已满;无法输入值 END_IF; |
5.2.4.2.7.2 移植“FIFO: 输出表格中的*个值”的示例
“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“FIFO: 输出表格的*个值”为例,说明如何实现该函数功能。
实现
以下 STL 程序说明了如何实现“FIFO”表格函数: 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
操作数 | 声明 | 数据类型 | 说明 | |
---|---|---|---|---|
val | Output | INT | 返回值 | |
tab | InOut | PLC 数据类型“Table10” | 包含有 10 行的表格 | |
x | InOut | INT 类型的 ARRAY[0..9] | 每个 ARRAY 元素表示一行。 本示例中使用 INT 类型的 ARRAY。 但是,可创建任何数据类型的 ARRAY。 如,也可以使用 STRUCT 数据类型的 ARRAY 或 PLC 数据类型的 ARRAY。 | |
lng | InOut | INT | 缓冲区的长度。 该值取决于“tab.x”的 ARRAY 中元素的数目。 | |
first | InOut | INT | *个写入值 | |
last | InOut | INT | 后一个写入值 | |
h | Temp | INT | 辅助变量 | |
Ret_Val | BOOL | 函数值 |
下表列出了如何实现函数“Fifo”:
该函数将返回写入表格中的*个值(*先出)。 函数值“true”表示表格为空。
SCL
| |
---|---|
#h:=(#tab.first+1) MOD #tab.lng; // 递增索引 IF #h <> #tab.last THEN // 扫描以查看索引是否可以相互覆盖 #tab.first := #h; · // 保存下一个值的索引 #val := #tab.x[#h]; // 输出所需值 #Fifo:= false; ELSE #Fifo:= true; // 错误 >> 表格为空;不输出任何值 #val := #tab.x[#tab.first]; // 输出后一个有效值 END_IF; |
5.2.4.2.7.3 移植“LIFO: 输出表格的后一个值”的示例
“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“LIFO: 输出表格的后一个值”为例,说明如何实现该函数功能。
实现
以下 STL 程序说明了如何实现“LIFO”表格函数: 本示例中的函数已可用作 SCL 中一个函数。
下表列出了所用变量的声明:
操作数 | 声明 | 数据类型 | 说明 | |
---|---|---|---|---|
val | Output | INT | 返回值 | |
tab | InOut | PLC 数据类型“Table10” | 包含有 10 行的表格 | |
x | InOut | INT 类型的 ARRAY[0..9] | 每个 ARRAY 元素表示一行。 本示例中使用 INT 类型的 ARRAY。 但是,可创建任何数据类型的 ARRAY。 如,也可以使用 STRUCT 数据类型的 ARRAY 或 PLC 数据类型的 ARRAY。 | |
lng | InOut | INT | 缓冲区的长度。 该值取决于“tab.x”的 ARRAY 中元素的数目。 | |
first | InOut | INT | *个写入值 | |
last | InOut | INT | 后一个写入值 | |
h | Temp | INT | 辅助变量 | |
Ret_Val | BOOL | 函数值 |
下表列出了如何实现函数“Lifo”:
该函数返回写入表格中的后一个值(后进先出)。 函数值“true”表示表格为空。
SCL
| |
---|---|
#h:=(#tab.last-1) MOD #tab.lng; // 递减索引 IF #h<0 THEN #h:=#h + #tab.lng; END_IF; // 只允许正数索引 IF #h <> #tab.first THEN // 扫描以查看索引是否可以相互覆盖 #tab.last := #h; // 保存下一个值的索引 #val := #tab.x[#h];// 输出所需值 #Lifo:= false; ELSE #Lifo:= true; // 错误 >> 表格为空;不输出任何值 #val := #tab.x[#tab.last]; // 输出后一个有效值 END_IF; |
5.2.4.2.8 通信指令的移植过程
5.2.4.2.8.1 SIMATIC NET CP/CM
5.2.4.2.8.1.1 移植程序块
S7-300/400 将使用特定程序块以通过 SIMATIC NET CP 实现通信功能。 S7-1500 中包含有一个适用于这些通信功能的修订指令集。
以下表格简要列出了 S7-300/400 中所使用的程序块的移植信息。
有关“类别”列中规范的详细信息,请参见章节“ 有关移植指令的信息 ”。
工业以太网/PROFINET 中的程序块
通信服务/功能范围 | 指令类型 | 库 | S7‑1500 中的指令 | 类别 | |
---|---|---|---|---|---|
CP 300 | CP 400 | ||||
SEND/RECEIVE (开放式通信服务) | AG_SEND 移植 AG_SEND/AG_LSEND | √ | √ | T_SEND | 3 |
AG_LSEND 移植 AG_SEND/AG_LSEND | √ | √ | T_SEND | 3 | |
AG_SEND(通过 UDP) 移植 AG_SEND/AG_LSEND | √ | √ | TUSEND | 3 | |
AG_SEND(电子邮件) 移植 AG_SEND/AG_LSEND | √ | √ | TMAIL_C | 3 | |
AG_RECV 移植 AG_RECV/AG_LRECV | √ | √ | T_RCV | 3 | |
AG_LRECV 移植 AG_RECV/AG_LRECV | √ | √ | T_RCV | 3 | |
AG_LOCK | √ | √ | - | 4 | |
AG_UNLOCK | √ | √ | - | 4 | |
AG_CNTRL | √ | √ | T_DIAG, T_RESET, TCON, TDISCON | 3 | |
编程通信连接 | IP_CONFIG | √ | √ | T_CONFIG | 3 |
FTP | FTP_CMD | √ | √ | FTP_CMD | 3 |
PROFINET IO | PNIO_SEND | √ | - | 4 *) | |
PNIO_RECV | √ | - | 4 *) | ||
PNIO_RW_REC | √ | - | 4 *) | ||
PNIO_ALARM | √ | - | 4 *) |
*) 应使用其它存取机制。
PROFIBUS 的程序块
通信服务/功能范围 | 指令类型 | 库 | S7-1500 中的指令 | 案例编号 | |
---|---|---|---|---|---|
CP 300 | CP 400 | ||||
SEND/RECEIVE (开放式通信服务) | AG_SEND 移植 AG_SEND/AG_LSEND | √ | √ | T_SEND | 3 |
AG_LSEND 移植 AG_SEND/AG_LSEND | - | √ | T_SEND | 3 | |
AG_RECV 移植 AG_RECV/AG_LRECV | √ | √ | T_RCV | 3 | |
AG_LRECV 移植 AG_RECV/AG_LRECV | - | √ | T_RCV | 3 | |
PROFIBUS DP | DP_SEND | √ | - | - | 4 *) |
DP_RECV | √ | - | - | 4 *) | |
DP_DIAG | √ | - | - | 4 *) | |
DP_CTRL | √ | - | - | 4 *) |
*) 应使用其它存取机制。
其它形参
在 S7-1500 中,这些指令还带有其它形参,如用于进行异步执行。 在移植过程中,需要提供具有相应实参的附加参数。
有关这些参数的详细说明,请参见 S7-1500 的参考帮助。
5.2.4.2.8.1.2 移植 AG_SEND/AG_LSEND
移植 AG_SEND/AG_LSEND
AG_SEND / AG_LSEND | T_SEND | 说明/注释 | ||
---|---|---|---|---|
参数 | 类型 | 参数 | 类型 | |
ACT | BOOL | REQ | BOOL | |
ID | INT | ID | CONN_OUC (WORD) | |
LADDR | WORD | -- | -- | |
SEND | ANY | DATA | VARIANT | |
-- | -- | 软件中缺少的 | VARIANT | |
LEN | INT | LEN | UINT | |
DONE | BOOL | DONE | BOOL | |
-- | -- | BUSY | BOOL | |
ERROR | BOOL | ERROR | BOOL | |
STATUS | WORD | STATUS | WORD |
其它步骤
使用相关地址参数组态相应的连接类型。
移植调用参数 - 通过 UDP 进行通信
移植 AG_SEND/AG_LSEND
AG_SEND / AG_LSEND | TUSEND | 说明/注释 | ||
---|---|---|---|---|
参数 | 类型 | 参数 | 类型 | |
ACT | BOOL | REQ | BOOL | |
ID | INT | ID | CONN_OUC (WORD) | |
LADDR | WORD | -- | -- | |
SEND | ANY | DATA | VARIANT | |
-- | -- | 软件中缺少的 | VARIANT | |
LEN | INT | LEN | UINT | |
DONE | BOOL | DONE | BOOL | |
-- | -- | BUSY | BOOL | |
ERROR | BOOL | ERROR | BOOL | |
STATUS | WORD | STATUS | WORD |
其它步骤
使用相关地址参数组态相应的连接类型。
移植调用参数 - 通过电子邮件进行通信
移植 AG_SEND/AG_LSEND
AG_SEND / AG_LSEND | TMAIL_C | 说明/注释 | ||
---|---|---|---|---|
参数 | 类型 | 参数 | 类型 | |
ACT | BOOL | REQ | BOOL | |
ID | INT | -- | -- | |
LADDR | WORD | -- | -- | |
SEND | ANY | TO_S | STRING | |
SEND | ANY | CC | STRING | |
SEND | ANY | SUBJECT | STRING | |
SEND | ANY | TEXT | STRING | |
SEND | ANY | ATTACHMENT | VARIANT | |
-- | -- | ATTACHMENT _NAME | STRING | |
-- | -- | MAIL_ADDR_PARAM | VARIANT | |
LEN | INT | -- | -- | |
DONE | BOOL | DONE | BOOL | |
-- | -- | BUSY | BOOL | |
ERROR | BOOL | ERROR | BOOL | |
STATUS | WORD | STATUS | WORD |
其它步骤
使用相关地址参数组态相应的连接类型。
5.2.4.2.8.1.3 移植 AG_RECV/AG_LRECV
移植 AG_RECV/AG_LRECV
AG_RECV / AG_LRECV | TRCV / TURCV | 说明/注释 | ||
---|---|---|---|---|
参数 | 类型 | 参数 | 类型 | |
EN_R | BOOL | |||
ID | INT | ID | CONN_OUC (WORD) | |
LADDR | WORD | -- | -- | |
-- | -- | LEN | UDINT | |
RECV | ANY | DATA | VARIANT | |
-- | -- | 软件中缺少的 | VARIANT | |
LEN | INT | LEN | UINT | |
NDR | BOOL | NDR | BOOL | |
-- | -- | BUSY | BOOL | |
ERROR | BOOL | ERROR | BOOL | |
STATUS | WORD | STATUS | WORD |
其它步骤
使用相关地址参数组态相应的连接类型。
5.2.4.2.8.2 点对点 CP/CM
S7-300/400 使用特定的程序块,通过点对点 CP 实现通信功能。
S7-1500 中包含有一个适用于这些通信功能的修订指令集。
在移植期间,将询问是使用适用于 S7‑1500 通信模块的修订指令集还是 S7‑300/400 通信处理器的程序块。
下表简要列出了移植 S7-300/400 中程序块时所使用的 S7-1500 指令。
有关“类别”列中规范的详细信息,请参见章节“ 有关移植指令的信息 ”。
用于点对点通信的程序块