【实战】西门子S7 PLC数据采集:边缘网关避坑指南

0 阅读3分钟

【实战】西门子S7 PLC数据采集:边缘网关避坑指南

工业现场数据采集,西门子PLC是绕不开的话题。本文记录一个真实项目中对S7 PLC的数据采集全过程,包括踩过的坑和最终方案。


先说背景

项目是汽车零部件工厂,核心设备是一台西门子 S7-1500 PLC,控制整条产线。

目标: 把这台PLC的关键数据(产量、报警、IO状态)采集上来,推送到边缘网关做本地分析。


硬件环境

西门子 S7-1500 (CPU 1515-2 PN)
  ↕ Profinet
普通工业交换机
  ↕
边缘网关(运行 Prometeusz)
  ↕ 本地分析
MQTT Broker / MySQL

看起来简单,实际上...


坑一:网段配置不匹配

问题: PLC和边缘网关不在同一网段,ping不通。

排查过程:

  1. 先确认PLC的IP地址(S7-1500需要在TIA Portal里看,或直接看PLC屏幕)
  2. 确认边缘网关的网段是否在同一网段
  3. 关键:有些PLC的PN接口默认是192.168.x.x,需要手动修改

解决: 在TIA Portal里把PLC的IP固定下来,确保网关能访问到。


坑二:S7协议认证

问题: 连接时提示"Access denied"。

西门子S7-1500默认启用了连接保护,需要:

  1. TIA Portal → 设备配置 → 防护与安全 → 允许来自远程对象的PUT/GET访问 → 勾选
  2. 或者在PLC程序里开放相应的DB块访问权限

这一步卡了很久,因为错误信息不够明确,一开始以为是网络问题。


坑三:数据点位怎么找

问题: 知道PLC能连上了,但不知道采集哪些数据。

我的做法:

  1. 先问工艺工程师:"你们最关心什么数据?"

    • 产量计数、报警信息、设备运行状态
  2. 在TIA Portal里找到对应的 DB块(Data Block)

    • 记下DB块编号 + 变量偏移地址
  3. 用Prometeusz的点位配置工具填入:

协议:S7
PLC IP:192.168.1.10
Rack:0
Slot:1
DB块编号:1
起始字节:0
数据类型:INT / DINT / BOOL

采集上来的数据

变量名地址类型说明
产量计数DB1.DBD0DINT累计产量
报警状态DB2.DBX0.0~3.7Bool数组报警位
运行速度DB1.DBD4REAL实时速度
设备状态DB3.DBX0.0Bool1=运行

采样频率:1次/秒


本地边缘分析

数据采集上来之后,在边缘端做了几件事:

1. 设备状态实时显示

设备状态:运行 / 停机 / 报警
OEE计算:基于运行时间自动统计

2. 报警推送

当DB2的报警位从0变1时,边缘网关自动发MQTT消息到工位看板。

3. 产量统计

把DINT计数器值做差分计算,得到小时产量、日产量,存入本地MySQL。


完整配置示例(Prometeusz)

# s7_collector.yaml
device:
  name: S7_1500_Line1
  protocol: s7
  host: 192.168.1.10
  rack: 0
  slot: 1

points:
  - name: output_count
    db: 1
    offset: 0
    datatype: dint
    interval: 1000

  - name: alarm_word
    db: 2
    offset: 0
    datatype: word
    interval: 500

  - name: running_speed
    db: 1
    offset: 4
    datatype: real
    interval: 1000

forward:
  - type: mqtt
    broker: mqtt://localhost:1883
    topic: prometeusz/s7/line1/data

  - type: mysql
    host: localhost
    database: factory
    table: line1_realtime

总结几个经验

  1. 先打ping:网络不通一切白搭,先确认PLC能ping通
  2. TIA Portal看点位:比猜要准得多
  3. S7-1500注意开PUT/GET:这个坑卡了我2小时
  4. 采样频率别贪高:1s足够,太高频反而给PLC造成负担
  5. 边缘端先做简单计算:不要一上来就上AI,先把数据看住

工具推荐

  • S7连接测试:Snap7 + Python(轻量级S7模拟)
  • 点位配置:Prometeusz内置点位管理(支持在线点位发现)
  • 协议分析:Wireshark抓包(排查连接问题时神器)

完整demo和配置文件可访问 www.prometeusz.cn 申请体验。