FW_IOT: 使用 FETCH和 WRITE 通过 ISO-on-TCP 实现数据交换 (S7-300, S7-400) 说明 借助“FW_IOT”指令,通过ISO-on-TCP 连接可以提供 FETCH/WRITE 功能。 调用 由于每一个 FETCH/WRITE 服务都需要独立的 TCP连接,在组织块 OB1 内需要调用 “FW_IOT”指令两次: • 第一次调用背景数据块 FETCH_IOT_DB 可以通过ISO-on-TCP 连接提供 FETCH 功能。 • 第二次调用背景数据块 WRITE_IOT_DB 可以通过 ISO-on-TCP连接提供 WRITE 功能。 CPU 冷启动、暖启动或者热启动、以及连接参数更改之后,都会自动建立 ISO-on-TCP 连接。用于连接建立的参数都存储在数据块“ConnectParam”内。 通过 ENABLE输入参数,用户可以使用手动控制连接建立和终止的选项。 连接参数更改之后,将会自动终止并重新建立该 连接。 下表为 ISO-on-TCP连接的连接参数数据结构。 长为 64 个字节。 以下示意图描述了在 OB1 内调用的指令“FW_IOT”,它通过 ISO-on-TCP连接实现 FETCH 和 WRITE 功能。
参数 声明 数据类型 存储区 说明ADDRMODE Input INT I、Q、M、D、L 或常数 该参数定义如何寻址作业 FETCH 或者 WRITE 的数 据(在S7 或 S5 寻址模式中)。 • 0 = S7 寻址模式 (数据的起始地址被解释为字节地址) • 1 = S5 寻址模式(数据的起始地址被解释为字地址) NDR Output BOOL I、Q、M、D、L new data record 参数:该参数表示,已经成功获得 WRITE 作业的数据, 且已经生成并发送了确认帧。 ERROR Output BOOL I、Q、M、D、L在以下情况下会设置该参数: • 建立或终止连接时出错 • 发送或者接收数据期间出现了错误的情况。 • 收到的 FETCH/WRITE数据头帧无效。 MODE Output BYTE I、Q、M、D、L 该参数表示是执行 FETCH 还是 WRITE 作业。 • 0= 无作业处于激活状态 • 1 = WRITE 作业 • 2 = FETCH 作业 STATUS Output WORDM、D 内部通信状态位通过参数 STATUS 输出。 有关有效数据类型的更多信息,请参见“有效数据类型概述。
“ConnectParam”背景数据块的连接参数 在建立连接之前,应检查以下连接参数: • connection_type• id • local_tsap_id •local_tsap_id _len若错误定义其中某个参数,则不能建立通信连接。 未发送或接收任何数据。 •成功建立通信连接之后,将会收到 FETCH/WRITE 服务的一个 16 字节头部帧。 该头部帧 描述是否存在一个处于等待状态的FETCH 或者 WRITE 作业。 • 如果某个 FETCH 作业正处于等待状态,则在该指令的背景数据块 FETCH_IOT_DB内部准 备通信伙伴所需要的数据,并生成一个确认帧。 确信帧与已经准备好的数据一起发出。 • 如果某个 WRITE作业处于等待状态,则在 16 字节头部帧评估完成之后,将用户数据接 收下来并写入目标区域。 此后,在背景数据块WRITE_IOT_DB 内生成确认帧并发送。 下表为用于 TCP 连接的连接参数数据结构。 长为 64 个字节。 参数 数据类型起始值 说明 id WORD W#16#1 连接 ID: 参数值必须在以下范围之内: id = W#16#0001 至W#16#0FFF(1 至 4095) connection_type BYTE B#16#12 连接类型。 以下设置适用于ISO-on-TCP 连接: connection_type = B#16#12 active_est BOOL FALSE被动连接建立 local_device_id BYTE B#16#3 ID,用于本地 PN/IE 接口(此处为: CPU319-3PN/DP)。 local_tsap_id_len BYTE B#16#2 所使用的 local_tsap_id参数的长度(以字节为单位): • 2 至 16(连接类型 = 18(ISO-on-TCP)时) rem_subnet_id_le nBYTE B#16#0 该参数未使用。 rem_staddr_len BYTE B#16#0以字节为单位的伙伴端点地址长度(rem_staddr 参数)。由 于该连接为未指定连接,与该参数无关。rem_tsap_id_len BYTE B#16#0 所使用的 rem_tsap_id 参数的长度(以字节为单位): • 2 至16(连接类型 = 18(ISO-on-TCP)时) next_staddr_len BYTE B#16#0 该参数未使用。local_tsap_id ARRAY [1..16] of BYTE B#16#7 B#16#D0 B#16#0 : :B#16#0 本地 TSAP ID,用于 ISO-on-TCP 连接。 • local_tsap_id[1] = B#16#E0; •local_tsap_id[2] = 本地端点的机架和插槽(位 0 至 4:插 槽号;位 5 至 7: 机架号); •local_tsap_id[3-16] = TSAP 扩展,可选 注: 确保每一个 local_tsap_id 值在该 CPU内都具有惟一 性。参数 数据类型 起始值 说明 rem_subnet_id ARRAY [1..6] of BYTE B#16#0 …该参数未使用。 rem_staddr ARRAY [1..6] of BYTE B#16#0 伙伴端点的 IP地址(例如,192.168.2.3): • rem_staddr[1] = 192 • rem_staddr[2] = 168 •rem_staddr[3] = 2 • rem_staddr[4] = 3 • rem_staddr[5-6] = 无关与采用被动连接建立方式建立的未指定连接无关。 rem_tsap_id ARRAY [1..16] of BYTE B#16#0通信伙伴的端口。 对于使用 ISO-on-TCP 的伙伴 TSAP ID: • rem_tsap_id[1] = B#16#E0; •rem_tsap_id[2] = 伙伴端点的机架和插槽(位 0 至 4:插 槽号;位 5 至 7: 机架号); •rem_tsap_id[3-16] = TSAP 扩展,可选 与采用被动连接建立方式建立的未指定连接无关。 next_staddrARRAY [1..6] of BYTE B#16#0 该参数未使用。 spare WORD W#16#0 该参数未使用。 参数指令“FW_IOT”的参数如下表所示: 参数 声明 数据类型 存储区 说明 ENABLE Input BOOL I、Q、M、D、L、T、C 使用该参数建立和终止连接: • 0 = 连接已终止 • 1 = 连接已建立 CONNECT Input ANY D指向数据块的数据区域的 ANY 指针,该数据区 域包含用于建立 TCP 连接的参数。 该数据区域 必须不小于 64 个字节。参数 声明数据类型 存储区 说明 ADDRMODE Input INT I、Q、M、D、L 或常数 该参数定义如何寻址作业 FETCH 或者WRITE 的 数据(在 S7 或 S5 寻址模式中)。 • 0 = S7 寻址模式 (数据的起始地址被解释为字节地址) • 1 =S5 寻址模式 (数据的起始地址被解释为字地址) NDR Output BOOL I、Q、M、D、L new data record参数: 该参数表示,已经成功获得 WRITE 作业的数 据,且已经生成并发送了确认帧。 ERROR Output BOOLI、Q、M、D、L 在以下情况下会设置该参数: • 建立或终止连接时出错 • 发送或者接收数据期间出现了错误的情况。 • 收到的FETCH/WRITE 数据头帧无效。 MODE Output BYTE I、Q、M、D、L 该参数表示是执行 FETCH 还是WRITE 作业。 • 0 = 无作业处于激活状态 • 1 = WRITE 作业 • 2 = FETCH 作业 STATUS(页 8807) Output WORD M、D 内部通信状态位通过参数 STATUS 输出。有关有效数据类型的更多信息,请参见“有效数据类型概述STATUS 参数 (S7-300, S7-400) 参数 STATUS 的结构指令“FW_TCP”和“FW_IOT”的输出参数 STATUS 提供有 S7 站和 PC 站之间通信状态的信息。 该状态字的结构如下:位 背景 DB.FB 的状态 说明 高位字节 0 NotConnected 连接未建立或者连接已中断 • FETCH/WRITE客户端仍未开始建立连接 • 连接建立期间出错 1 ErrorConnect 连接建立期间出错(例如:连接参数的数据结构存在错误)