S7 协议用在哪些设备上
S7 是西门子 PLC 的原生通信协议(走 ISO-on-TCP,端口 102),覆盖 S7-200 SMART、S7-300、S7-400、 S7-1200、S7-1500 全系列,也适用于用这些 PLC 做主控的第三方设备。 能访问的存储区包括 DB 数据块、M 位存储器、I 输入区、Q 输出区、T 定时器与 C 计数器。 在国内自动化设备里,西门子 PLC 的占比很高,所以 S7 通常是数采项目里第一个要打通的协议。
敏洽 SCADA 数采软件的 siemens_s7 驱动基于
snap7 实现,源码内嵌静态编译,现场部署不需要装西门子的任何通信组件,
也不需要装 Simatic NET 或者 OPC Server,避免了授权与版本冲突问题。
实际会遇到的几个坑
1. 「优化的块访问」是头号拦路虎
S7-1200/1500 新建 DB 块时,TIA Portal 默认勾上「优化的块访问」。 优化块里的变量没有固定的绝对偏移,只能按符号名访问,而经典 S7 协议是按 「DB 号 + 字节偏移 + 长度」寻址的,因此优化块用 S7 协议读会直接失败或读到无意义数据。 解决办法:在块属性里取消勾选「优化的块访问」,重新编译下载。
但直接改现有块有风险——地址重排可能影响已有程序里的间接寻址。 更稳妥的做法是新建一个非优化的 DB 块专做「采集镜像区」, 由 PLC 程序周期性把要上传的变量搬进去。这样做还有个附带好处: 采集接口与 PLC 内部逻辑解耦,PLC 程序后续升级不会连带影响采集。
2. PUT/GET 权限没勾,连接被拒
在 PLC 设备属性的「保护与安全」页里,有一项 「允许来自远程对象的 PUT/GET 通信访问」。 S7-1200/1500 默认不勾,外部读取会被直接拒绝。表现是 TCP 三次握手成功、 协议协商阶段就被断开。这一项必须勾上并重新下载硬件组态。 顺带说一句,勾上之后 PLC 对外是可读可写的,出于安全考虑应该把采集网段与办公网隔离。
3. 不要把 M 区当数据接口
现场为了快,经常直接读 M 区。这在调试期没问题,但作为交付方案是隐患: M 区是 PLC 程序员的临时工作区,下次改程序时某个 MW 地址被挪走, 采集侧读到的就是别的含义的数据,而且不会报错,只会安静地出错数。 这类问题排查起来极其费时。正确做法是约定专用 DB 块,地址表书面确认, 作为接口文档的一部分归档,双方任何一侧要改都必须走变更流程。
4. 数据类型与字节序
西门子是大端字节序。读 REAL(32 位浮点)时要按大端解析,读 DINT 同理。
常见错误是按小端解析导致数值离谱(比如温度读出来 -1.7e38)。
另外 S7-1500 的 LREAL 是 64 位浮点,占 8 字节,容易和 REAL 混淆。
BOOL 变量在 DB 块里按位存放,地址形如 DB10.DBX4.3,
读的时候要注意是读整字节再取位,还是驱动帮你算好。
字符串类型 STRING 在 S7 里前两个字节是最大长度与实际长度,
直接当 ASCII 读会带上这两个字节的垃圾。
5. 一次读多少合适
S7 协议单次请求的数据量受 PDU 大小限制(常见 240 或 480 字节)。 把需要的变量在 DB 块里连续排布,一次批量读一整段, 比逐个变量单独发请求快一个数量级。所以「采集镜像区」的字段顺序设计是有讲究的: 按数据类型分组连续摆放,避免为了对齐插入大量空洞。 实际项目里几百个点位排好后,1 秒周期采集完全没有压力。
各系列的接入条件
| 系列 | 接入方式 | 注意事项 |
|---|---|---|
| S7-1500 | 网口直连,S7 协议 | 需关闭目标 DB 的优化块访问;需勾选 PUT/GET 权限;注意 LREAL 为 8 字节 |
| S7-1200 | 网口直连,S7 协议 | 同 S7-1500;固件较老的版本 PDU 较小,批量读要拆包 |
| S7-400 | 网口(CP 模块) | 需要 CP 通信模块或集成 PN 口;DB 块无优化概念,地址直接可用 |
| S7-300 | 网口(CP 343 / 集成 PN) | 同 S7-400;纯 MPI 机型需加装以太网模块或走 MPI 转换 |
| S7-200 SMART | 网口直连,S7 协议 | V 区映射为 DB1,地址换算需注意 |
| S7-200(老) | PPI 串口 | 不支持 S7 以太网协议,需串口服务器 + 自由口协议实现,成本较高 |
硬件上需要客户准备的东西不多:工业交换机、网线,以及固定的 IP 分配表。 建议采集网段与办公网物理隔离,PLC 用静态 IP,不要走 DHCP—— 现场断电重启后 IP 变化导致采集全线中断,是排查起来很浪费时间的一类故障。
相关交付情况
在整线数采项目里,西门子 PLC 通常是主控,同时还挂着仪表、机器人、视觉工站。 敏洽的做法是把 PLC 侧的「采集镜像区」作为整条线的数据汇聚点: 工站数据先进 PLC,再由采集软件一次批量读出,这样只需维护一份点表, 调试时也只有一个数据源要核对。当然,如果某些工站数据量大或者节拍要求高, 也可以让工站直接对接采集软件,绕过 PLC 中转。这个取舍在方案阶段确定, 判断依据是数据量、节拍要求与现场布线成本三项。
更多交付情况见 案例中心, 协议清单见 SCADA 软件的 45 个协议驱动。
常见问题
有具体设备清单或工件样品,可以直接给判断
提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。