在构建分布式自动化控制系统时,实现多台PLC之间的高效数据交换是核心需求。西门子S7-200 SMART系列PLC提供了强大的开放式用户通信(Open User Communication, OUC)功能,允许用户通过以太网直接进行TCP通信。本文将介绍如何配置两台S7-200 SMART PLC,利用OUC指令集建立点对点的TCP连接,实现设备级的数据透传。这种通信方式完全基于标准TCP/IP协议栈,不依赖S7协议,具有高实时性和灵活性,非常适合用于多机协同控制或数据集中采集场景。
一、通信架构与角色定义
S7-200 SMART的开放式TCP通信严格遵循标准的“客户端-服务器”(Client-Server)模型。在建立连接前,必须明确两台PLC的角色:
1、客户端 (Client / 主动连接方):通信的发起者。该PLC负责调用TCP_CONNECT指令,主动向服务器的IP地址和端口发起连接请求(三次握手)。
2、服务器 (Server / 被动连接方):通信的监听者。该PLC在程序中调用TCP_CONNECT指令进入监听状态,等待客户端的连接请求。一旦连接建立,双方即可通过TCP_SEND和TCP_RECV指令进行全双工数据交换。
二、关键资源与限制
在开始编程前,必须了解S7-200 SMART在OUC通信方面的硬件与固件限制,以避免资源冲突:
1、连接资源限制:每台S7-200 SMART CPU最多支持 8个主动连接(作为客户端)和 8个被动连接(作为服务器)。这意味着一台PLC最多可以同时与16台其他设备建立TCP连接(8进8出)。
2、固件与软件要求:必须使用STEP 7-Micro/WIN SMART V2.2及以上版本的编程软件,且CPU固件版本需为V2.2或更高。
3、存储器占用:OUC指令库需要占用 50个字节 的连续V存储区(通常建议分配为VBx–VBx+49)作为连接控制块。如果该区域被其他逻辑覆盖,将导致通信失败。
4、指令调用位置:所有OUC指令(TCP_CONNECT, TCP_SEND, TCP_RECV, DISCONNECT)必须放置在主程序或中断服务程序中,严禁在子程序或循环中断以外的地方调用,否则会导致连接状态异常。
三、实现流程概览
实现两台S7-200 SMART之间的TCP通信主要分为以下三个阶段:
1、网络规划与硬件连接
使用标准以太网线将两台PLC的以太网口连接至同一交换机或直连。配置静态IP地址,确保在同一网段。例如:
客户端 PLC: IP 192.168.0.5, 子网掩码 255.255.255.0
服务器 PLC: IP 192.168.0.6, 子网掩码 255.255.255.0
2、服务器端 (Server) 编程
a)调用TCP_CONNECT指令。
b)Active: 设置为 FALSE (被动连接)。
c)LocPort: 设置本地监听端口(如 2000),范围需在1-49151之间,且避开系统保留端口(如20, 21, 80, 102等)。
d)RemPort: 对于被动连接,通常设置为 0,表示接受任意远程端口的连接,或者指定特定端口。
e)IPaddr: 可以设置为 0.0.0.0 以接受任意IP的连接,或者指定客户端IP。
f)连接建立后,使用TCP_RECV指令(常使能)循环接收数据。
3、客户端 (Client) 编程
a)调用TCP_CONNECT指令。
b)Active: 设置为 TRUE (主动连接)。
c)IPaddr1-4: 填入服务器的IP地址(192.168.0.101)。
d)RemPort: 填入服务器监听的端口(2000)。
e)LocPort: 设置本地端口(如 2001)。
f)连接成功后(Done位为1),使用TCP_SEND指令(上升沿触发)发送数据。
四、常见问题与调试建议
1、连接失败排查:如果TCP_CONNECT报错,首先检查Status输出引脚的错误代码。常见的如6801通常表示资源不足或V区地址冲突。
2、数据粘包处理:TCP是流协议,不保留消息边界。如果发送方快速发送多条短消息,接收方可能会一次性接收到合并后的长消息。建议在应用层定义简单的协议(如“消息头+长度+数据”),以便接收方正确拆分数据。
3、断线重连:S7-200 SMART的OUC指令不会自动重连。如果网络波动导致连接断开,程序需检测Error位或连接状态,并重新触发TCP_CONNECT指令来建立新连接。
五、验证
1、客户端IB0控制服务器QB0
2、服务器IB0控制客户端QB0
3、客户端VB0传数据给服务器VB10
4、服务器VB0传数据给客户端VB10