S7-200 SMART CPU 与 S7-300 CP343 进行 ISO on TCP 通信
S7-200 SMART CPU 与 S7-300 CP343 通过 ISO on TCP 通信,需要在双方都建立连接。在 S7-300 通过网络组态创建连接并调用 AG_SEND 和 AG_RECV 指令、在 S7-200S MART 调用 Open User Communication 库指令 (ISO_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。
注意:
S7-200 SMARTPLC V2.2 版本才开始支持 ISO on TCP 通信,早期版本的 CPU 需要升级固件后方可支持 ISO on TCP。
硬件和软件需求及所完成的通信任务
硬件:
① S7-300 CPU 和 CP343 (IP地址: 192.168.0.5 子网掩码: 255.255.255.0)
② S7-200 SMART CPU (固件 V2.2) (IP地址: 192.168.0.2 子网掩码: 255.255.255.0)
③ PC(带以太网卡)
④ TP 以太网电缆
软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2
所完成的通信任务:
① S7-300 将通信数据区 DB11 中的 200 个字节发送到 S7-200 SMART 的 VB 数据区。
② S7-300 读取 S7-200 SMART 中的 VB 数据区存储到 S7-1200 的数据区 DB12。
S7-300 侧硬件组态和编程
1. 使用 TIA V13 软件新建一个项目,添加1个 S7-300 CPU 以及 CP343 ,并为 CP343 分配网络和 IP 地址 ,如图 1 所示
图 1. 组态 S7-300 和 CP343 并分配 IP 地址
为编程方便,使用 CPU 属性中定义的时钟位,在设备视图双击 CPU 设置时钟存储器,如图 2 所示。
图 2. 启用时钟位
2. 在 S7-300 中添加 ISO on TCP 连接,打开 "设备组态" > "网络视图" ,在窗口左上角选中 "连接",然后右键点击 CPU 建立新连接,类型选择 "ISO-on-TCP" 如图 3 所示。
图 3. 在网络视图建立新连接
3. 在 "常规" 和 "地址详细信息" 页面配置详细连接参数如 IP 地址、TSAP 等,如图 4 所示。
图 4. 配置连接参数
4. 创建发送数据块 DB11(接收区数据块 DB12 类似),数据块中定义 200 个字节的数组,如图 5 所示。
图 5. 创建发送数据块 DB11
5. 在 OB1 中,在 "指令树" > "通信" > "通信处理器"> "Simatic NET CP" 下,调用 AG_SEND 指令发送数据,如图 6 所示
图 6:调用 AG_SEND 发送指令
表 1. AG_SEND 指令参数说明
ACT | // 为 1 时,启动发送作业 |
ID | // 连接号,要与图 3 中的连接 ID 一致 |
LADDR | // CP 卡硬件地址,必须填写 16 进制数据 |
SEND | // 发送区,包含地址和长度 |
LEN | // 发送的字节数 |
DONE | // 为 1 时,发送完成 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
6. 在 OB1 中,在 "指令树" > "通信" > "通信处理器"> "Simatic NET CP" 下,调用 AG_RECV 指令接收数据,如图 7 所示
图 7:调用 AG_RECV 接收指令
表 2. AG_RECV 指令参数说明
ID | // 连接号,要与 TCON 连接参数中的连接 ID 一致 |
LADDR | // CP 卡硬件地址,必须填写 16 进制数据 |
RECV | // 接收区,包含地址和长度 |
NDR | // 为 1 时,接收完成 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
LEN | // 实际接收到的数据量(以字节为单位) |
S7-200 SMART 侧编程
1.调用 ISO_CONNECT 指令建立连接,伙伴 TSAP (RemTsap) 与本地 TSAP (LocTsap) 必须与 S7-300 中的连接配置交叉对应。如图 8 所示
图 8:调用 ISO_CONNECT 建立连接指令
表 3. ISO_CONNECT 指令参数说明
Req | // 为 1 时,开始建立连接 |
Active | // 是否主动建立连接,必须与 S7-300 中的连接配置匹配。 |
ConnID | // 连接 ID |
RemTsap | // 伙伴 TASP |
LocTsap | // 本地 TSAP |
DONE | // 为 1 时,表示已成功建立连接 |
BUSY | // 为 1 时,正在建立连接 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
2.调用 TCP_RECV 指令接收数据。如图 9 所示
图 9:调用 TCP_RECV 接收指令
表 4. TCP_RECV 指令参数说明
ConnID | //连接号,要与 ISO_CONNECT 指令中填写的的连接 ID 一致 |
MaxLen | // 接收长度(超出此长度的消息无法接收) |
DataPtr | // 接收区,包含地址和长度 |
Done | // 为 1 时,接收完成 |
Busy | // 为 1 时,正在进行接收作业 |
Error | // 为 1 时,有故障发生 |
Status | // 状态代码 |
Length | // 接收到的数据长度 (字节) |
3. 调用 TCP_SEND 指令发送数据。如图 10 所示
图 10:调用 TCP_SEND 发送指令
表 5. TCP_SEND 指令参数说明
Req | // 在检测到上升沿时启动发送作业 |
ConnID | // 连接号,要与 ISO_CONNECT 指令中填写的的连接 ID 一致 |
Datalen | // 作业要发送的最大字节数 |
DataPtr | // 发送区,包含地址和长度 |
Done | // 为 1 时,接收完成 |
Busy | // 为 1 时,发送作业仍未完成,此时无法启动新作业 |
Error | // 为 1 时,有故障发生 |
Status | // 状态代码 |
4. 为通信指令分配库存储器。如图 11 所示
监控通信结果
图 12 监控结果