简介
在以下示例中,将在 S7-1500 系列的两个 CPU 间创建一个编程连接,并将数据记录从 CPU 1 发送到 CPU 2 中。
要求
两个 S7-1500 系列的 CPU 通过 PROFINET 进行互连,它们之间的连接尚未组态。
基于“属性 > 保护”(Properties > Protection) 中的低保护级别,可确保每个 CPU 都可进行读写访问。
CPU 1 中的程序:数据的存储
为数据记录,创建以下 PLC 数据类型。
要进行数据传送,需基于所创建的 PLC 数据类型,创建以下数据块(“SLI_plcDB_sendData_TSEND”)。
要对该数据进行存储,需使用以下结构和变量,创建一个全局数据块(“SLI_gDB_TSEND”)。
CPU 1 中的程序:参数互连
创建函数块“SLI_FB_TSEND”,并在该数据块中创建以下局部变量。
程序段 1:互连“TCON”指令的参数,如下所示:
程序段 2:如果 TCON 出错,则保存状态信息,如下所示。
程序段 3:互连“TSEND”指令的参数,如下所示:
程序段 4:如果 TSEND 出错,则保存状态信息,如下所示。
程序段 5:互连“TDISCON”指令的参数,如下所示:
程序段 6:如果 TDISCON 出错,则保存状态信息,如下所示。
CPU 1 中的程序:TCON 的组态
要互连输入参数 CONNECT,可通过“属性 > 组态”(Properties > Configuration) 打开指令“TCON”的向导。
对 TCON 的组态进行如下设置:
输入字段 | 条目 |
---|---|
端点 | 在下拉列表中,选择作为发送方和接收方的 CPU。 系统将自动输入接口、子网和地址。 |
连接数据 | 在下拉列表中选择“新建”(New),为每个 CPU 创建一个数据块。 该数据块用于存储连接数据。数据块的名称可任意设置。 为 CPU 1(本地 CPU)建立主动连接。 |
连接类型 | 选择条目“ISO-on-TCP”。 这意味着,建立连接时将使用“ISO-on-TCP”协议的以太网连接。 |
连接 ID | 在该通信连接中,输入任意一个选定的连接 ID。 该连接 ID 在项目中尚未分配。确保数值与所用变量“connectionID”中的值相同。 |
TSAP ID | 在选择“ISO-on-TCP”连接类型时,系统将自动输入详细的地址信息。 |
CPU 2 中的程序:数据的存储
为数据记录,创建以下 PLC 数据类型。
要进行数据传送,需基于所创建的 PLC 数据类型,创建以下数据块(“SLI_plcDB_rcvData_TRCV”)。
要对该数据进行存储,需使用以下结构和变量,创建一个全局数据块(“SLI_gDB_TRCV”)。
CPU 2 中的程序:参数互连
创建函数块“SLI_FB_TRCV”,并在该数据块中创建以下局部变量。
程序段 1:互连“TCON”指令的参数,如下所示:
程序段 2:如果 TCON 出错,则保存状态信息,如下所示。
程序段 3:互连“TRCV”指令的参数,如下所示:
程序段 4:如果 TRCV 出错,则保存状态信息,如下所示。
程序段 5:互连“TDISCON”指令的参数,如下所示:
程序段 6:如果 TDISCON 出错,则保存状态信息,如下所示。
CPU 2 中的程序:TCON 的组态
根据 CPU 1 / TCON 的示例,对 CPU 2 / TCON 连接进行以下设置:
说明 连接数据 完成 CPU 1 / TCON 的组态之后,已创建了一个数据块(“PLC_Tsend_Connection_DB”,“PLC_Trcv_Connection_DB”),并带有为各 CPU 存储的连接数据。如果不希望创建新的数据块并输入连接数据,则可直接使用创建的数据块(“PLC_Tsend_Connection_DB”,“PLC_Trcv_Connection_DB”)。 如果要选择已创建的数据块,则这些数据块必须位于“项目树”(project tree) 的“程序块 > 系统块”(Program blocks > System blocks) 中。 |
建立连接的操作步骤
请遵循相关操作步骤的顺序:
1.对于 CPU 2 / TCON,将参数 REQ 更改为“TRUE”。
2.对于 CPU 1 / TCON,将参数 REQ 更改为“TRUE”。
3.对于 CPU 2 / TCON,将参数 REQ 更改为“FALSE”。
4.对于 CPU 1 / TCON,将参数 REQ 更改为“FALSE”。
终止连接的操作步骤
请遵循相关操作步骤的顺序:
1.对于 CPU 1 / TDISCON,将参数 REQ 更改为“TRUE”。
2.对于 CPU 2 / TDISCON,将参数 REQ 更改为“TRUE”。
3.对于 CPU 1 / TDISCON,将参数 REQ 更改为“FALSE”。
4.对于 CPU 2 / TDISCON,将参数 REQ 更改为“FALSE”。
CPU 1 的行为
程序段 1 (TCON):
输入参数 REQ(“TCON.start”)的信号状态为“TRUE”时,启动指令“TCON”。多次调用时,指令“TCON”将创建与伙伴 CPU 的通信连接。为此,可通过输入参数 CONNECT(或数据块“PLC_Trcv_Connection_DB”)检索该连接数据。
连接设置成功时,输出参数 DONE(“#doneCON”)的信号状态为“TRUE”,且输出参数 STATUS(“TCON.status”)的值为“0000”。由于输出参数的值仅在有效时才显示,因此成功状态将保存在变量“TCON.done”中。复位所有之前连接终止的成功状态(“TDISCON.done”)。
输出参数 ERROR(“TCON.error”)或变量“TCON.memErrStatus”)可用于指示本示例中的执行过程是否出错。
程序段 2 (TCON):
如果 TCON 发出信号指示错误(“TCON.error”为“TRUE”),则所报告的状态(“TCON.status”)将进行永久性存储(“TCON.memErrStatus”)。
程序段 3 (TSEND):
根据输入参数 ID(“connectionID”),指令“TSEND”可确定待使用的通信连接。
输入参数 REQ(“TSEND.start”)的信号状态为“TRUE”时,启动指令“TSEND”。进行多次调用时,“TSEND”指令将传送输入参数 DATA(“SLI_plcDB_sendData_TSEND”)处检测到的数据记录。
数据记录传送成功时,输出参数 DONE(“#doneSEND”)的信号状态为“TRUE”,且输出参数 STATUS(“TSEND.status”)的值为“0000”。由于输出参数的值仅在有效时才显示,因此成功状态将保存在变量“TSEND.done”中。
输出参数 ERROR(“TSEND.error”)或变量“TSEND.memErrStatus”)可用于指示本示例中的执行过程是否出错。
程序段 4 (TSEND):
如果 TSEND 发出信号指示错误(“TSEND.error”为“TRUE”),则所报告的状态(“TSEND.status”)将进行永久性存储(“TSEND.memErrStatus”)。
程序段 5 (TDISCON):
输入参数 REQ(“TDISCON.start”)的信号状态为“TRUE”时,启动指令“TDISCON”。多次调用时,指令“TDISCON”将终止该通信连接。为此,需检索输入参数 ID(“connectionID”)中使用的通信连接。
连接终止成功时,输出参数 DONE(“#doneDISC”)的信号状态为“TRUE”,且输出参数 STATUS(“TDISCON.status”)的值为“0000”。由于输出参数的值仅在有效时才显示,因此成功状态将保存在变量“TDISCON.done”中。复位连接设置(“TCON.done”)和数据传送(“TSEND.done”)的成功消息。
输出参数 ERROR(“TDISCON.error”)或变量“TDISCON.memErrStatus”)可用于指示本示例中的执行过程是否出错。
程序段 6 (TDISCON):
如果 TDISCON 发出信号指示错误(“TDISCON.error”为“TRUE”),则所报告的状态(“TDISCON.status”)将进行永久性存储(“TDISCON.memErrStatus”)。
CPU 2 的行为
TCON 和 TDISCON 的运行与 CPU 1 中的相同。
程序段 3 (TRCV):
根据输入参数 ID(“connectionID”),指令“TRCV”可确定待使用的通信连接。
输入参数 EN_R(“TRCV.start”)的信号状态为“TRUE”时,启动指令“TRCV”。进行多次调用时,“TRCV”指令将接收所传送的数据记录。并检查输入参数 DATA(“SLI_plcDB_rcvData_TRCV”)处的该数据记录。
并通过输出参数 LEN(“#length”),确定 BYTE 中实际传送的数据记录长度。仅当传送成功时,才显示该值。之后,将检查“0”。数据记录接收成功时,输出参数 DONE(“#doneRCV”)的信号状态为“TRUE”,且输出参数 STATUS(“TRCV.status”)的值为“0000”。
由于输出参数的值仅在有效时才显示,因此请进行以下操作步骤:
成功状态保存在变量“TRCV.done”中。
BYTE 长度保存在变量“TRCV.readLength”中。
输出参数 ERROR(“TRCV.error”)或变量“TRCV.memErrStatus”)可用于指示本示例中的执行过程是否出错。
程序段 4 (TRCV):
如果 TRCV 发出信号指示错误(“TRCV.error”为“TRUE”),则所报告的状态(“TRCV.status”)将进行永久性存储(“TRCV.memErrStatus”)。