通信过程
在以太网上访问 S7 PLC 时,报文按三层嵌套:最外层是传输层封装,负责长度与版本标识;中间是连接层,负责建立与释放连接;最内层才是 S7 报文,承载读写的具体语义。客户端先发出连接请求,请求中携带双方连接端点标识,服务器确认后连接建立,随后 S7 作业在此连接上往返。连接端点标识里编码了连接类型与 CPU 的位置信息,填错就建不起连接;而连接建立成功却读写报错,则说明问题出在区域或地址上。
基本信息
| 承载方式 | ISO-on-TCP,习惯使用 102 端口 |
|---|---|
| 外层封装 | 版本标识与报文长度 |
| 连接层 | 连接请求、连接确认、断开请求、数据传输 |
| 连接端点标识 | 编码连接类型与 CPU 位置信息 |
| S7 报文 | 报文头 + 参数段 + 数据段 |
| 报文类型 | 作业、确认、确认数据、用户数据 |
| 建连前提 | 端口可达、端点标识匹配、CPU 允许该连接类型 |
典型使用场景
- 抓包定位连不上:看是否有连接确认,判断卡在网络还是参数
- 核对端点标识与机架槽号是否一一对应
- 区分连接失败与变量访问失败:前者没有作业报文,后者有明确错误响应
- 验证防火墙策略:确认双向都放行,而不仅是客户端到服务器方向
- 判断驱动兼容性:老库不支持新机型的连接方式,建连阶段即失败
- 评估报文长度上限:决定一次能读多少个变量
常用数据区编码
| 数据区 | 含义 | 常见误用 |
|---|---|---|
| 输入区 | 现场信号映像 | 当成可写区导致写入无效 |
| 输出区 | 输出映像 | 误写入直接改变现场动作 |
| 位存储器 | 中间标志 | 与其他程序共用导致相互覆盖 |
| 数据块 | 用户数据容器 | 偏移与数据类型混淆 |
| 定时器 | 系统定时器资源 | 新机型已改为数据块承载 |
| 计数器 | 系统计数器资源 | 同上,需按机型确认 |
抓包时关注什么
抓包时关注什么
# 过滤条件:只保留目标端口 102 的流量
# 关键帧顺序:连接请求(含两端点标识)→ 连接确认 → 作业 → 确认数据
# 只有连接请求没有确认:端口不通、端点标识不匹配或被访问控制拦截
# 有连接确认但作业返回错误:数据区、地址或数据类型写错
# 连接频繁重建:客户端超时设置过短或 CPU 连接资源紧张同一端口号也可能被其他工业协议占用,现场排查前先确认端口归属,避免把不同协议的流量混在一起分析。
这套 连接层 与 S7 报文结构可用于合法诊断,也可被用于构造非法读写;生产网络中应限制可达来源,而不是依赖报文隐蔽性。