NScada
文档中心 › 西门子 S7 采集

西门子 S7-1200/1500 数据采集到 SQLite/MQTT 的完整方案

分类:S7 采集 · 2026-09-08 · nscada 技术团队

S7-1200/1500 是中小型产线最常见的 PLC。把它们的温度、转速、产量等变量定时读到服务器或边缘网关,再写入数据库、上送 MQTT/HTTP,是数据中台、设备预测性维护、能源管理的第一步。本文给出可直接落地的完整链路,以及最容易踩坑的 TIA 设置。

一、先解决 TIA 侧的“能不能读”

nscada 使用标准 S7comm over ISO-on-TCP(端口 102)读取。绝大多数“连不上/读不到”都不是软件问题,而是 PLC 工程里没有开放远程访问:

  1. TIA Portal 打开 CPU → 属性 → 防护与安全 → 连接机制,勾选“允许从远程伙伴(PUT/GET 通信)访问”
  2. 被测数据块(DB)的属性中取消“优化的块访问”(或把需要采集的变量放在非优化 DB 中),否则无法按偏移直接读取;
  3. S7-1200 的 PUT/GET 连接数有限(约 3~8 条,视固件),确认没有被上位机、触摸屏占满;S7-1500 连接数较充裕。
接线与网络:PLC 与采集服务器同一网段即可;不需要改 PLC 程序逻辑,只改 CPU 属性与 DB 属性。

二、地址怎么写(DB / 标记区 / I/Q)

nscada 点表支持 nodes7 语法,几个示例:

DB1,REAL0        // DB1 第 0 字节起,32 位浮点(工艺值)
DB1,X14.0        // DB1.DBX14.0 布尔(运行/故障位)
DB1,INT12.2      // DB1 第 12 字节起 2 个 INT(数组)
M32.2            // 标记区位
MW30 / MD40      // 标记区字/双字
I0.1 / Q2.3      // 输入/输出位

槽位建议:S7-300/400 常为 rack0/slot2,S7-1200/1500 为 rack0/slot1(在设备连接参数里配置)。

三、几百个点位如何不把 PLC 拖垮

逐点轮询会产生大量请求。nscada 会把同一 DB 内连续地址自动合并成区块读取,并按 PDU 上限分包,一次周期通常只发 2~6 个请求即可覆盖数百点;采集周期可按点组拆分——关键点 1~5 秒,趋势点 10~30 秒。

四、数据落 SQLite,转发 MQTT/HTTP

  1. 采集到的原始值按点表做线性缩放(value = a×raw + b)与精度舍入;
  2. 写入本地 SQLite(按天分表、可设保留天数),断网/上位机宕机数据也不丢;
  3. 同时写入Outbox 持久队列,由发送器投递:MQTT 主题如 cx/{deviceId}/data(支持 QoS/retain),或 HTTP 批量 POST JSON;失败指数退避重试,进程重启自动续投。

五、最小验证清单

想直接体验?打开 在线 Demo下载软件
扫码加客服获取完整《部署与联调手册》
客服
扫码联系客服

扫码咨询