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-200SMART调用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-300CPU以及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 监控结果