MES 项目最难的不是接入 PLC,而是让车间和 IT 都点头
MES 项目最难的不是接入 PLC,而是让车间和 IT 都点头
MES 集成商系列 | 写给做选型与交付决策的人
项目进场第一天,车间主任就问:
「这个网关接上 PLC,会不会影响正常生产?」
还没来得及回答,客户 IT 又发来一份安全问卷:
「需要开放哪些端口?数据有没有加密?账号权限怎么控制?」
这两个问题,几乎是工业数据采集项目进场时绕不开的。
车间关心的是生产不能受影响,IT 关心的是网络不能留下安全隐患。对于集成商来说,这两边都得交代清楚。
这篇文章就从现场交付的角度,聊聊采集网关进场前需要确认哪些事情,以及遇到车间和 IT 的问题应该怎么回答。
项目地址:
- GitHub:https://github.com/Ellisata/iot-gateway
- Gitee:https://gitee.com/wang4856304/iot-gateway
一、先分清楚:车间和 IT 关注的不是一回事
同样是接入一台采集网关,车间和 IT 的关注点完全不同。
| 对接人员 | 主要关注的问题 |
|---|---|
| 车间、设备人员 | 会不会影响 PLC?会不会占用设备资源?断网后会不会影响生产? |
| IT、信息安全人员 | 开放哪些端口?有没有身份认证?数据怎么传输?出了问题能不能追查? |
所以,现场沟通时不要拿一套技术说明同时回答两边。
跟车间沟通,重点是说明采集方式、设备负载和异常处理方式。
跟 IT 沟通,则需要准备网络拓扑、端口清单、认证方式和数据流向。
下面分别来看。
二、先解决车间最关心的问题:接入网关会不会影响生产?
先说明一个事实:PLC 数据采集不是完全没有资源开销。
无论使用 Modbus TCP、S7 还是其他协议,网关都需要与 PLC 建立通信连接,定期读取数据。这些操作会占用设备的通信资源,也会带来一定的网络负载。
关键不在于有没有影响,而在于能不能控制影响范围。
1. 默认只读,不主动修改 PLC 数据
这是进场时首先需要向车间说明的事情。
iot-gateway 的控制下发功能默认关闭:
control.enabled=false,默认不允许控制下发。- 即使开启控制功能,还需要同时满足协议的
Writable配置、点位的W权限以及物模型属性的W权限。 - 普通数据采集只执行读取操作,不会主动修改 PLC 的寄存器或控制变量。
因此,现场可以这样解释:
「我们先按只读方式接入,只读取 PLC 中已有的数据,不执行写入操作。如果后续有控制需求,需要单独评估和配置,不会在采集过程中自动开启。」
这比简单地说「不会影响设备」更有说服力。
2. 采集周期可以调整,不是所有点位都要每秒读取
采集频率越高,通信请求就越频繁,PLC 和网络承担的负载也会相应增加。
iot-gateway 支持按点位配置采集周期,范围为 100ms 到 60s。
现场配置时,不建议所有点位都设置成 1 秒。
可以根据数据用途区分:
- 需要快速响应的状态或报警点位,可以设置较短周期。
- 用于趋势分析和报表的数据,5 秒、10 秒甚至 30 秒通常就能满足需求。
- 电表、水表等累计量,通常可以采用 30 秒或 60 秒的采集周期。
采集周期还需要结合 PLC 性能、点位数量和通信协议综合评估,不能只看网关本身。
关于容量和采集周期,可以参考系列文章:
- 《这个点位规模,网关扛得住吗?——投标前的容量估算》
- 《客户要 1 秒一个点,设备扛得住吗?》
3. RS-485 总线不能随便接入第二个主站
如果现场使用的是 RS-485 设备,这一点尤其需要注意。
一条 RS-485 总线上,通常采用一个主站轮询多个从站的通信方式。同一时刻不能让两个主站同时争用总线。
例如,现场原本已经有一套上位机在读取电表,现在又准备接入采集网关。如果两边同时发送请求,就可能出现通信冲突,导致数据读取异常。
因此,进场前要确认:
- 当前 RS-485 总线由哪套系统负责读取?
- 原来的组态软件或上位机是否需要继续运行?
- 如果新旧系统必须同时使用,是否需要增加串口服务器、隔离器,或者调整原有通信架构?
不要等网关部署完成后,才发现串口已经被其他软件占用。
4. 设备扫描不是必须开启的
iot-gateway 支持扫描指定网段,主动探测网络中的 PLC 等设备。
这个功能可以帮助工程师发现设备,但它会向网段内的 IP 地址发起连接探测。
对于普通办公网络,这通常不是什么问题。但在一些工厂网络中,IT 会明确禁止主动扫描。
如果客户有相关规定,可以在运行开关中关闭设备扫描。
关闭后,不影响已经配置好的设备正常采集。
另外,网关还有局域网自动发现功能,它与设备扫描不是一回事,后面介绍网络安全时再具体说明。
5. 不要第一天就接入整条产线
即使前面的配置都没有问题,也不建议刚进场就把所有设备一次性接入。
比较稳妥的方式是先选一台非关键设备进行试点。
建议按下面的顺序推进:
- 选择一台非关键设备,先配置少量点位,采用较长的采集周期。
- 连续运行 24 小时,观察 PLC 扫描周期、通信连接数以及网关 CPU、内存占用。
- 确认没有异常后,再逐步增加点位和同类型设备。
- 最后再接入关键设备。
这里有一个很重要的沟通细节:
不要向车间承诺「接入后绝对不会影响生产」。
更合理的说法是:
「我们先选一台非关键设备试运行 24 小时,你们一起观察设备运行情况,确认没有问题后再扩大接入范围。」
生产现场最看重的是可控,而不是口头保证。
三、再解决 IT 的问题:网关应该部署在哪里?
车间确认可以接入后,接下来通常就是 IT 部门的网络安全审核。
首先要确定网关在工厂网络中的位置。
不同的部署方式,安全要求也不一样。
方案一:管理网络和采集网络分开(推荐)
IT 管理网络
|
防火墙
|
网关管理口
采集网络
|
交换机
|
网关采集口 ---- PLC
网关出站
|
防火墙
|
MQTT / 时序数据库 / MES
这种方式将设备采集和网关管理分开,IT 可以分别控制两类网络的访问权限。
方案二:网关与 PLC 使用同一个网段
工厂内部网络
|
交换机
/ \
网关 PLC
|
管理端口 9082
|
仅允许 MES 或运维网段访问
如果现场网络条件有限,也可以采用这种方式,但需要通过防火墙限制管理端口的访问来源。
方案三:网关直接连接公网(不推荐)
如果确实需要远程访问,应通过反向代理、TLS 加密和访问控制进行保护。
不建议直接把网关管理端口暴露在公网。
需要特别说明:iot-gateway 当前管理界面使用 HTTP,没有内置 HTTPS。
如果客户要求通过 HTTPS 访问,可以在网关前面部署 Nginx 等反向代理,由代理负责 TLS 加密;也可以通过 VPN 或专线进行远程运维。
四、网络防火墙需要放行哪些端口?
IT 部门通常会要求提供端口清单。
下面是 iot-gateway 常见的端口配置。
| 方向 | 端口/协议 | 用途 | 说明 |
|---|---|---|---|
| 入站 | TCP 9082 | 管理控制台、内部 API、OpenAPI | 默认端口,HTTP |
| 入站 | UDP 9083 | 局域网自动发现 | 默认开启,可以关闭 |
| 入站 | TCP 4840 | OPC UA Server | 创建 OPC UA 通道后才监听 |
| 出站 | TCP 502 | Modbus TCP | 根据设备配置 |
| 出站 | TCP 102 | Siemens S7 | 常见默认端口 |
| 出站 | TCP/UDP 9600 | Omron FINS | 常见默认端口 |
| 出站 | TCP 44818 | EtherNet/IP(CIP) | 常见默认端口 |
| 出站 | TCP 4840 | OPC UA Client | 根据服务端配置 |
| 出站 | TCP 1883/8883 | MQTT | 普通连接 / TLS 连接 |
| 出站 | TCP 80/443 | HTTP/Webhook | 根据 MES 地址配置 |
| 出站 | TCP 6041 | TDengine | taosAdapter WebSocket 默认端口 |
| 出站 | TCP 8181 | InfluxDB 3.x | HTTP 默认端口 |
注意,这些是常见默认值,不代表每个现场都使用相同端口。
例如,Modbus TCP 默认使用 502,但设备也可能经过修改,使用其他端口。
正式进场时,应该根据实际设备配置逐一核对,再提交给 IT 部门。
还有一个容易忽略的问题:Windows 防火墙。
如果网关运行在 Windows 上,作为服务启动时,防火墙不会像普通桌面程序那样弹出交互式放行提示。
尤其是 UDP 9083,如果入站规则没有放行,可能出现这样的情况:
管理平台能够看到网关的广播信息,但主动探询时收不到网关应答。
遇到类似问题,不要只检查网关程序,还要检查 Windows 防火墙规则。
五、账号、认证和数据加密,目前是什么情况?
端口开放只是第一步,IT 通常还会继续问:
- 管理界面怎么登录?
- API 调用有没有认证?
- 数据传输有没有加密?
- 不同用户能不能限制操作权限?
这部分建议按照项目当前的实际能力回答,不要为了通过审核而做过度承诺。
1. 管理控制台:账号密码登录,但目前没有内置 HTTPS
当前管理控制台采用账号密码登录,并使用 JWT 进行身份认证。
初始账号口令在首次启动时从环境变量或配置中读取。如果没有设置,会随机生成,并且只在日志中打印一次。
需要注意的是:
管理控制台目前使用 HTTP,没有内置 TLS 加密。
因此,正式部署时建议:
- 修改初始管理员密码。
- 限制管理端口 9082 的访问来源。
- 需要 HTTPS 时,在前面部署反向代理。
- 远程管理优先使用 VPN 或专线。
2. OpenAPI:通过 X-Api-Key 验证调用身份
如果 MES 或其他系统需要通过 API 获取网关数据,可以使用 OpenAPI。
接口通过请求头中的 X-Api-Key 进行身份验证。
但这里有一个需要提前说明的问题:
当前 X-Api-Key 通过 HTTP 传输时是明文的。
这意味着,如果通信链路没有额外保护,密钥可能被网络中的其他人获取。
因此建议:
- 只在隔离内网或专线上使用。
- 不同系统使用不同的 API Key。
- 人员或系统发生变更时,及时更换密钥。
- 不要将密钥写入前端代码或提交到公开代码仓库。
另外,这个 Key 不只是读取数据的凭据。在控制功能开启的情况下,它也可能用于执行点位写入操作。
所以不能把它当成普通的查询密钥来管理。
3. Agent API:默认关闭,不要随意开放
网关还提供了一组供 AI Agent 或外部程序调用的接口,路径为:
/agentApi/*
这组接口目前没有身份认证。
而且,它不仅包含数据查询,还包括设备删除、插件上传和控制下发等操作。
虽然功能比较方便,但从安全角度看,这意味着调用方可能获得较大的操作权限。
因此,Agent API 出厂默认关闭。
关闭状态下,通过 /agentApi/systemConfig/update 也不能直接把它打开,因为该接口同样会被 403 拦截。
如果确实需要使用,应确保网关运行在隔离内网,或者与调用程序部署在同一台机器上。
不满足这些条件时,不建议开启。
4. 账号暂时没有细粒度角色权限
目前系统采用登录用户级别的账号管理,还没有实现完整的角色权限矩阵。
也就是说,不能简单地认为给客户创建一个普通账号,就能限制他只能查看数据、不能执行其他管理操作。
目前主要依靠以下方式控制访问:
- 网络隔离。
- 管理端访问限制。
- API Key 的分发和管理。
- 控制功能默认关闭。
如果客户要求不同人员具有不同的菜单权限、设备权限和操作权限,需要提前说明当前能力边界,不能把尚未实现的功能当成已有功能介绍。
六、还有几个容易忽略的网络行为
除了端口和账号,IT 有时还会关心网关会不会主动向外发送数据,或者在网络中执行其他操作。
这里有几个需要提前说明的地方。
局域网自动发现
网关默认会通过 UDP 广播自己的身份信息,方便局域网内的管理平台发现网关。
如果客户不允许广播,可以关闭自动发现功能。关闭后不影响已经配置的设备采集。
设备扫描
设备扫描会主动向指定网段的 IP 地址发起连接探测。
如果客户禁止网络扫描,需要关闭这个功能。
数据推送
网关向 MQTT、HTTP 或时序数据库推送数据时,采用主动发起出站连接的方式。
正常情况下,不需要为了这些推送任务在网关上开放额外的入站端口。
协议插件
管理端支持上传和加载协议插件。
这项功能需要特别注意,因为加载插件相当于在网关本机执行代码。
因此,插件上传权限应当只交给可信任的管理员,不能随意开放给普通运维人员。
运行日志
请求日志可能记录请求参数和响应内容,其中可能包含业务数据。
因此,日志目录也应按照敏感数据进行管理,限制访问权限,并提前确定日志保留策略。
七、IT 安全问卷,常见问题怎么回答?
实际项目中,IT 部门经常会发来一份安全问卷。下面整理了几个常见问题,可以作为填写时的参考。
| IT 常见问题 | 需要说明的内容 |
|---|---|
| 网关开放哪些端口? | 入站 TCP 9082、UDP 9083(可关闭)、按需启用 TCP 4840;出站端口根据 PLC 和数据推送配置确定。 |
| 通信是否加密? | 管理界面目前为 HTTP,需要通过反向代理或 VPN 保护;OpenAPI 的 Key 在 HTTP 下明文传输;MQTT 支持 TLS 连接。 |
| 如何进行身份认证? | 管理端采用 JWT;OpenAPI 使用 X-Api-Key;MQTT 使用 Broker 账号;Agent API 无认证,默认关闭。 |
| 是否支持角色权限? | 目前没有细粒度角色权限矩阵,主要依靠网络隔离和密钥管理控制访问。 |
| 是否会连接公网? | 仅向配置的 MQTT、HTTP 或数据库目标发起连接,不会主动连接未配置的公网服务;设备扫描和自动发现可以关闭。 |
| 是否有操作日志? | 提供请求日志和控制日志,可记录控制操作的人员、来源、写入内容、回读结果及确认状态。 |
| 如何升级? | 通过替换程序文件和 plugins/ 目录进行升级;插件支持热升级,没有自动联网升级机制。 |
| 数据保存在哪里? | 数据保存在本地 SQLite 和日志目录中,没有默认云端存储;备份可以通过复制数据目录完成。 |
还有一点需要特别提醒:
不要向客户承诺网关能够直接通过等保测评。
等保涉及整个系统的网络架构、主机安全、访问控制、日志审计等多个方面,不是一个采集网关就能决定的。
集成商能提供的是网关自身的技术资料,包括端口、认证、数据流向和日志能力。最终是否满足客户的安全要求,需要结合实际部署环境,由相关测评或审核人员判断。
把现状和限制讲清楚,比简单承诺「符合安全要求」更可靠。
八、进场前,建议按这张清单逐项确认
前面的内容涉及不少技术细节,真正到了现场,可以把它们整理成一张检查表。
建议在网关正式接入生产网络之前,由交付人员、车间代表和 IT 人员共同确认。
【采集网关进场检查表】
一、网络环境
□ 网关部署位置已确认(管理网 / 采集网 / 单网段)
□ 管理端 9082 的访问范围已限制
□ 远程访问方式已确认(反向代理 / VPN / 专线)
□ 防火墙入站、出站规则已逐项确认
□ 自动发现 9083 已确认(开启 / 关闭)
□ 设备扫描已确认(开启 / 关闭)
二、设备接入
□ PLC 型号、通信协议和端口已核对
□ PLC 最大连接数已确认
□ 网关采集连接数未超过设备允许范围
□ RS-485 串口归属已确认
□ 原有组态软件或上位机的运行情况已确认
□ 关键设备和非关键设备已区分
□ 试点设备及观察时间已确定(建议 24 小时)
三、账号与安全
□ 初始管理员密码已修改
□ JWT 密钥已通过环境变量固定,或已确认重启后的影响
□ OpenAPI 密钥已按系统分配并记录持有人
□ Agent API 保持关闭,或已确认隔离条件
□ 控制下发保持关闭,或已完成单独审批
□ 协议插件上传权限已明确
四、时间与日志
□ 网关主机时间和时区已确认
□ NTP 时间同步已配置,或已确认手工校时方式
□ PLC、表计与网关的时间偏差已记录
□ 日志目录容量及保留策略已确认
□ 日志查看和下载权限已明确
五、数据推送与备份
□ MQTT、HTTP、时序数据库地址及端口已确认
□ 数据推送测试已通过
□ 数据目录和配置目录的备份方式已确认
□ 断网缓存容量及默认批次上限已确认
交付方:____________
车间代表:__________
IT 代表:____________
日期:________________
九、最后说几句:现场交付,重要的是把边界提前讲清楚
采集网关进场,真正难的往往不是把 PLC 数据读出来,而是让车间和 IT 都认可这套接入方案。
有些事情必须提前说明:
- 管理界面目前没有内置 HTTPS,需要通过反向代理或 VPN 保护,不能直接暴露 9082 到公网。
- OpenAPI 的
X-Api-Key在 HTTP 下明文传输,只适合有额外网络保护的环境。 /agentApi没有身份认证,默认关闭,不应随意开放。- 当前没有细粒度角色权限,不能承诺可以按人员精确限制所有操作。
- 采集会占用 PLC 的通信资源,需要结合设备情况设置采集周期和连接数量。
- 是否满足客户的安全合规要求,需要结合整个部署环境进行评估,不能只凭网关本身下结论。
这些问题并不意味着网关不能用于工业现场,而是交付时必须知道它能做什么、不能做什么,以及需要通过哪些部署措施弥补不足。
对集成商来说,提前把这些事情讲清楚,远比设备接入完成后再处理安全和生产方面的争议要省事。
项目地址
iot-gateway 是一个开源工业数据采集网关项目,采用 AGPL-3.0 协议开源。
- GitHub:https://github.com/Ellisata/iot-gateway
- Gitee:https://gitee.com/wang4856304/iot-gateway
欢迎工业自动化集成商、MES 厂商及相关技术人员交流使用,也欢迎围绕项目开展技术合作。
MES 集成商系列文章
- 01 ·《做 MES 集成的都懂:PLC 采集不难,难在每个项目重来一遍》
- 02 ·《接一个采集项目,工期该报几天?》
- 03 ·《这个点位规模,网关扛得住吗?——投标前的容量估算》
- 04 ·《开源网关交付给客户,我会被要求开源吗?》
- 05 ·《RS-485 挂 20 台电表,为什么总是读不全?》
- 06 ·《工业数据采集项目验收清单》
- 07 ·《多厂区复制:一套模板交付四个工厂》
- 08 ·《老设备改造场景集:拿到一台十年前的老设备,数据怎么接?》
- 09 ·《采集网关的四种路线:把授权成本算清楚》
- 10 ·《协议驱动真机验证清单:哪些上过真机,哪些还没有》
- 11 ·《数据没上去?从上位机到 MES 的七段排查》
- 12 ·《项目交付后,怎么把自己摘出来》
- 13 ·《采集项目的合同,该写死哪几件事》
- 14 ·《客户掏出一台没人认识的设备:专有协议,现在能自己写驱动了》
- 15 ·《设备台账怎么进 MES:接口现成,但别用翻页去取》
- 16 ·《点位录入别再手敲:三条路,共用同一套结果契约》
- 17 ·《点位全绿了,怎么证明读的是对的?》
- 18 ·《MES 收到的值,字段该怎么定?》
- 19 ·《电表读数对不上,差在哪一段?》
- 20 ·《采集网关能不能顺手做控制?》
- 21 ·《进场第一周:车间怕停产,IT 怕出事》(本文)
更多推荐
所有评论(0)