S7-200 SMART 开放式用户通信(OUC)深度指南:TCP/ISO-on-TCP(上)
在工业自动化现场,当你需要让 S7-200 SMART PLC 与非西门子设备(比如三菱机器人、基恩士视觉系统、第三方仪表)通信时,之前讲的 GET/PUT 指令就 “失灵” 了 —— 这时必须靠开放式用户通信(OUC) 。OUC 基于标准 Socket 协议,支持 TCP、UDP、ISO-on-TCP 三种模式,是 PLC 打破品牌壁垒、实现灵活互联的 “核心工具”。
但很多工程师面对 OUC 的四条指令(TCON、TSEND、TRECV、TDCON)时,常被 “参数表配置”“主动 / 被动模式”“UDP 与 TCP 区别” 搞晕。今天就从基础逻辑到实战案例,把 OUC 拆透,帮你搞定跨设备通信!
一、先搞懂:OUC 是什么?和 GET/PUT 有啥不一样?
开放式用户通信(OUC)本质是底层 Socket 通信接口,给 PLC “自定义通信规则” 的权限 —— 你可以自己定义数据格式(比如 ASCII 码、二进制)、交互逻辑(比如 “发指令→等回复→再执行”),不像 GET/PUT 只能用固定 S7 协议。
OUC 与 GET/PUT 的核心差异(避坑第一点)
对比维度 | GET/PUT 通信 | 开放式用户通信(OUC) |
适用设备 | 仅限西门子 PLC(S7-200/1200 等) | 所有支持 TCP/UDP/ISO-on-TCP 的设备(跨品牌) |
协议支持 | 仅 S7 协议 | TCP、UDP、ISO-on-TCP(RFC 1006) |
灵活性 | 固定格式,无自定义空间 | 完全自定义协议、数据帧结构 |
连接管理 | 自动维护连接 | 需手动用 TCON 建连接、TDCON 断连接 |
核心依赖 | 远程 IP + 数据地址 | 连接 ID(唯一标识一个通信链路) |
关键前提
- 硬件支持:仅带以太网端口的 S7-200 SMART CPU(ST20/ST30/ST40/ST60)支持,CR 系列无网口不支持;
- 后台通信时间:OUC 指令需要足够的 “后台时间” 处理数据,默认 10ms 可能不够 —— 需在 MicroWIN“系统块→通信” 中改到 30~50ms(最多 255ms);
- 连接 ID 唯一性:每个 OUC 连接需分配唯一的 “连接 ID”(0~65534,不可用 65535),TSEND/TRECV/TDCON 需通过连接 ID 关联到对应的 TCON。
二、指令拆解:四条 OUC 指令,一条都不能错!
OUC 的核心是 “连接→收发→断开” 的闭环,对应四条指令:TCON(建连接)、TSEND(发数据)、TRECV(收数据)、TDCON(断连接) 。每条指令都依赖 “参数表”(连续 VB 区),参数配置错了,通信必失败。
1. TCON:通信的 “第一步”—— 建立连接
TCON 是 “连接创建器”,负责与远程设备建立 TCP/UDP/ISO-on-TCP 连接,关键是区分主动模式(客户端) 和被动模式(服务器) :
- 主动模式:PLC 主动发起连接(比如 PLC 连机器人,PLC 是客户端);
- 被动模式:PLC 等待远程设备连接(比如 PLC 连 PC,PLC 是服务器)。
TCON 参数表:两种格式(必看!)
TCON 参数表分 “TCP/UDP 通用格式” 和 “ISO-on-TCP 专用格式”,核心差异在是否需要配置 TSAP(ISO-on-TCP 特有)。
(1)TCP/UDP 的 TCON 参数表(字节偏移量对应内容)
字节偏移量 | 位分配 / 作用 | 关键细节 |
0 | 状态位(D = 完成,A = 激活,E = 错误)+ 错误代码高 5 位 | 输入时忽略,输出时显示通信状态;E=1 时需查错误代码 |
1 | 位 0=REQ(触发建连),位 7=A/P(1 = 主动,0 = 被动) | REQ 需上升沿触发(避免重复建连);A/P 决定 PLC 是客户端还是服务器 |
2~3 | 连接 ID(16 位) | 唯一标识,比如连接 1 设为 10,连接 2 设为 20,不可重复且≠65535 |
4 | 连接类型 | TCP=11,UDP=19(必须填对,错了直接建连失败) |
5~8 | 远程 IP 地址(4 字节,大端) | 主动模式:填远程设备 IP(如 192.168.2.30→0xC0,0xA8,0x02,0x1E);被动模式:填 0.0.0.0(允许所有 IP 连) |
9~10 | 远程端口(16 位) | 主动 TCP:填远程设备端口(如机器人端口 5000);UDP / 被动 TCP:填 0 |
11~12 | 本地端口(16 位) | 主动 / 被动模式都需填(如 1024,避免用 1024 以下的知名端口) |
(2)ISO-on-TCP 的 TCON 参数表(差异点)
ISO-on-TCP 是 “带确认的 TCP”,需额外配置 TSAP(传送服务访问点),参数表后半段不同:
字节偏移量 | 作用 | 关键细节 |
4 | 连接类型 | ISO-on-TCP=12(固定) |
5~8 | 远程 IP 地址 | 同 TCP 格式 |
9~25 | 远程 TSAP(2~16 字符) | 如 “E001”(需与远程设备一致,格式:首字符 0xE0,后跟 1 字节标识) |
26~42 | 本地 TSAP(2~16 字符) | 如 “E002”,不可用 “SIMATIC” 字符串,需与远程 TSAP 匹配 |
实战注意点
- 主动模式建连失败:先 ping 远程 IP,再查连接类型、端口是否匹配(比如远程设备端口没开);
- 被动模式没人连:查本地端口是否被占用(比如其他程序用了 1024 端口),可换个端口(如 2000)。
2. TSEND & TRECV:数据收发的 “核心操作”
TCON 建连成功后,靠 TSEND(发数据)和 TRECV(收数据)交换信息。两者参数表分 “TCP/ISO-on-TCP 通用” 和 “UDP 专用”,重点在 UDP 需每次指定远程 IP 和端口。
(1)TCP/ISO-on-TCP 的 TSEND 参数表
字节偏移量 | 作用 | 关键细节 |
0 | 状态位 + 错误代码高 5 位 | 同 TCON,D=1 表示发送完成 |
1 | 位 0=REQ(触发发送) | 需上升沿触发(避免重复发同一批数据);TRECV 忽略此位 |
2~3 | 连接 ID | 必须与对应的 TCON 连接 ID 一致(比如 TCON 用 10,TSEND 也用 10) |
4~5 | 数据长度(16 位) | 最大 1024 字节(超过需分多次发送) |
6~9 | 数据指针(本地地址) | 指向要发送的数据区(如 & VB100,表示从 VB100 开始发) |
(2)UDP 的 TSEND 参数表(差异点)
UDP 是 “无连接” 协议,每次发送都要指定远程 IP 和端口,参数表多了 4 个字节:
字节偏移量 | 作用 | 关键细节 |
10~13 | 远程 IP 地址 | 每次发送都需填(如 192.168.2.40→0xC0,0xA8,0x02,0x28) |
14~15 | 远程端口 | 每次发送都需填(如仪表端口 6000) |
(3)TRECV 参数表(TCP/ISO-on-TCP vs UDP)
TRECV 是 “常使能” 指令(En_R=1),等待接收数据,参数表与 TSEND 类似,但有 2 个关键差异:
- 数据长度:输入时是 “接收缓冲区最大容量”,输出时是 “实际接收字节数”;
- UDP 特有字段:接收后,字节 10~13 会返回 “发送方 IP”,字节 14~15 返回 “发送方端口”(可用于识别多台 UDP 设备)。
实战注意点
- TSEND 发送失败:查连接 ID 是否匹配、连接是否已建立(TCON 的 Done 位是否为 1);
- TRECV 收不到数据:① 确认 TRECV 已使能(En_R=1);② TCP 是 “流协议”—— 若远程连续发多个小消息,PLC 可能一次收到合并的大消息,需自定义 “消息头 + 长度” 拆分(比如前 2 字节表示消息长度);
- 缓冲区溢出:TRECV 的 “数据长度”(缓冲区容量)要大于等于远程发送的字节数,否则超出部分会丢失,且报 “缓冲区溢出” 错误。
3. TDCON:通信的 “收尾”—— 断开连接
当通信结束(比如设备停机),需用 TDCON 断开连接,释放资源(避免占用连接数)。
TDCON 参数表(超简单,仅 4 字节)
字节偏移量 | 作用 | 关键细节 |
0 | 状态位 + 错误代码高 5 位 | D=1 表示断开完成;E=1 可能是 “连接已断开”(错误代码 24) |
1 | 位 0=REQ(触发断连) | 需上升沿触发(避免重复断连) |
2~3 | 连接 ID | 与要断开的 TCON 连接 ID 一致 |
实战注意点
- 断开后重连:TDCON 断开后,若需重新通信,必须重新调用 TCON(PLC 不会自动重连);
- 报错 “无待决操作”(错误代码 24):说明连接已断开,无需再执行 TDCON。