S7-200 SMART CPU 与 S7-1200 CPU 集成 PN 口的 ISO on TCP 通信
S7-200 SMART CPU 与 S7-1200 CPU 通过 ISO on TCP 通信,需要在双方都建立连接。在 S7-1200 调用 T-block 指令 (TCON, TDISCON, TSEND, TRCV) 、在 S7-200SMART 调用 Open User Communication库指令 (ISO_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。
注意:
S7-200 SMARTPLC V2.2 版本才开始支持 ISO on TCP 通信,早期版本的 CPU 需要升级固件后方可支持 ISO on TCP。
硬件和软件需求及所完成的通信任务
硬件:
① S7-1200 CPU (IP地址: 192.168.0.3 子网掩码: 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-1200 将通信数据区 DB11 中的 200 个字节发送到 S7-200 SMART 的 VB 数据区。
② S7-1200 读取 S7-200 SMART 中的 VB 数据区存储到 S7-1200 的数据区 DB12
S7-1200 侧硬件组态和编程
1. 使用 TIA V13 软件新建一个项目,添加 1 个 S7-1200 站点并为其分配网络和 IP 地址 ,如图 1 所示
图 1. 组态 S7-1200 并分配 IP 地址
为编程方便,使用 CPU 属性中定义的时钟位,在设备视图双击 CPU 设置 "系统和时钟存储器",如图 2 所示。
图 2. 启用时钟位
2. 在 S7-1200 中调用建立连接指令,进入 "项目树" > " PLC_1" > "程序块" > "OB1" 主程序中,从右侧窗口 "指令"> "通信">"开放式用户通信" 下调用 "TCON" 指令,配置连接参数,如图 3 所示。
图 3. 调用 "TCON" 指令并配置连接参数
表 1. TCON 指令参数说明
REQ | // 为 1 时,开始建立连接 |
ID | // 连接号,在组态窗口配置后自动生成 |
CONNECT | // 连接数据,在组态窗口配置后自动生成 |
DONE | // 为 1 时,表示已成功建立连接 |
BUSY | // 为 1 时,正在建立连接 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
3. 创建发送数据块 DB11(接收区数据块 DB12 类似),数据块中定义 200 个字节的数组,数据块的属性中需要取消 "优化的块访问" 选项。如图 4 所示。
图 4. 创建发送数据块 DB11
4. 在 OB1 中调用 TSEND 指令来发送数据,如图 5 所示
图 5:调用 TEND 发送指令
表 2. TSEND 指令参数说明
REQ | // 在检测到上升沿时启动发送作业 |
ID | // 连接号,要与 TCON 连接参数中的连接 ID 一致 |
LEN | // 发送的字节数 |
DATA | // 发送区,包含地址和长度 |
DONE | // 为 1 时,发送完成 |
BUSY | // 为 1 时,发送作业仍未完成,此时无法启动新作业 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
5. 在 OB1 中调用 TRCV 指令来接收数据,如图 6 所示
图 6:调用 TRCV 接收指令
表 3. TRCV 指令参数说明
EN_R | // 为 1 时,开始接收 |
ID | // 连接号,要与 TCON 连接参数中的连接 ID 一致 |
LEN | // 接收长度 |
DATA | // 接收区,包含地址和长度 |
NDR | // 为 1 时,接收完成 |
BUSY | // 为 1 时,正在进行接收作业 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
RCVD_LEN | // 实际接收到的数据量(以字节为单位) |
S7-200 SMART 侧编程
1. 调用 ISO_CONNECT 指令建立连接,伙伴 TSAP (RemTsap) 与本地 TSAP (LocTsap) 必须与 S7-300 中的连接配置交叉对应。如图 7 所示
图 7:调用 ISO_CONNECT 建立连接指令
表 4. ISO_CONNECT 指令参数说明
Req | // 为 1 时,开始建立连接 |
Active | // 是否主动建立连接,必须与 S7-300 中的连接配置相反。 |
ConnID | // 连接 ID |
RemTsap | // 伙伴 TASP |
LocTsap | // 本地 TSAP |
DONE | // 为 1 时,表示已成功建立连接 |
BUSY | // 为 1 时,正在建立连接 |
ERROR | // 为 1 时,有故障发生 |
STATUS | // 状态代码 |
2. 调用 TCP_RECV 指令接收数据。如图 8 所示
图 8:调用 TCP_RECV 接收指令
表 5. TCP_RECV 指令参数说明
ConnID | //连接号,要与 ISO_CONNECT 指令中填写的的连接 ID 一致 |
MaxLen | // 接收长度 (超出此长度的消息无法接收) |
DataPtr | // 接收区,包含地址和长度 |
Done | // 为 1 时,接收完成 |
Busy | // 为 1 时,正在进行接收作业 |
Error | // 为 1 时,有故障发生 |
Status | // 状态代码 |
Length | // 接收到的数据长度 (字节) |
3. 调用 TCP_SEND 指令发送数据。如图 9 所示
图 9:调用 TCP_SEND 发送指令
表 6. TCP_SEND 指令参数说明
Req | // 在检测到上升沿时启动发送作业 |
ConnID | // 连接号,要与 ISO_CONNECT 指令中填写的的连接 ID 一致 |
Datalen | // 作业要发送的最大字节数 |
DataPtr | // 发送区,包含地址和长度 |
Done | // 为 1 时,接收完成 |
Busy | // 为 1 时,发送作业仍未完成,此时无法启动新作业 |
Error | // 为 1 时,有故障发生 |
Status | // 状态代码 |
4. 为通信指令分配库存储器。如图 10 所示
监控通信结果
图 11 监控结果