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。
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 |
// 实际接收到的数据量(以字节为单位) |
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 监控结果