一个汽车配件车间的数采项目全过程:电表、PLC、CNC,数据怎么采、怎么推MES
摘要: 文章分享了新能源汽车配件厂数据采集项目实战经验,涉及正泰电表、西门子S7 PLC和发那科CNC三类设备的统一采集与MES对接。通过Modbus TCP、S7协议和发那科协议分别接入10台电表(RS485转TCP)、产线PLC(产量/报警)和CNC(宏变量/刀具数据),利用NodeSCADA平台实现多协议统一管理。数据通过HTTP定时推送至MES(JSON格式模板化组装),同时为车间大屏提供
冯工聊数采NodeSCADA · 工控老兵手记 · 数据采集MES对接案例 PLC数据上报MES CNC数据采集
去年12月份在齐鲁大地做了一个项目,给新能源汽车供应配件的厂子,一个冲压车间,甲方的需求说起来不复杂:现场三类设备的数据采进来,推给MES,另外给车间做一块可视化大屏。
设备清单:10台正泰电表、1套西门子S7产线PLC、1台发那科0i系统的CNC加工中心。
这篇把整个配置过程写出来(保密需要,文中截图和数据都做了脱敏处理,不是现场真实数据)。
整体架构
先说清楚数据整整体是怎么一个流程

MES那边的数据通过HTTP定时推送,5秒每次。大屏是通过网页 nginx 部署的。自己开发的,直接调NodeSCADA的HTTP API实时拉取(接口1秒一次),NodeSCADA的接口可以查询实时数据,也可以查询点位的历史数据。不需要MES后端中转,这一点极大地减少了跟mes对接的工作量。
一、电表采集:10台正泰,两个串口服务器
10台电表分布在2个电控柜里,每个柜5台,走RS485总线。RS485不能直接接网络,需要转一下。
这里用了有人口红串口服务器,两台,一台管一个柜,加起来不到1张哇塞,接上网线就能用。
串口服务器把RS485转成TCP,NodeSCADA这边用Modbus TCP协议连上去采集。每台电表配了不同的站号,NodeSCADA按站号区分,10台电表在一个驱动器下配好各自的站号和点位就行。
每台电表采集的点位:
- 电压(A/B/C三相)
- 电流(A/B/C三相)
- 有功功率
- 电能累计值
正泰电表的寄存器地址文档,官网竟然没找到,隐藏的太深了。最后是找厂家售后要的。拿到之后按文档配地址,Modbus功能码03,读保持寄存器,数据类型注意对——电能累计值是32位浮点,这个在采集软件直接配置就行,当你配置为单精度浮点的时候,软件自动去读两个寄存器,并且按照浮点数规则展示。


二、产线PLC采集:西门子S7,产量+报警
产线PLC是西门子S7-1200,走以太网,NodeSCADA用S7协议直连,不需要额外硬件。
需要采集的点位:
- 当日产量(DB块,word)
- 良品数(DB块,word)
- 不良品数(DB块,word)
- 报警信息(DB块,word,枚举)
- 产线运行状态(M区,BOOL)
S7协议配置前,PLC那边要确认是否开启了PUT/GET通信权限,1200默认是关的,需要在博途里打开,不然连得上但读不到数据。这个细节卡过不少人,碰到102端口TCP连接正常但S7通讯失败的情况,先查这个。
报警信息是一个数值,现场有16条报警定义,名称按报警枚举含义命名,这个是原始值直接推给了MES, 看板上根据枚举值显示具体的报警文本。

S7采集示例图
三、CNC采集:发那科0i,宏变量+产量+刀具寿命
这台CNC是发那科0i系统,走以太网,NodeSCADA支持发那科协议,直接配IP地址连上去。
需要采集的内容:
- 宏变量 #100~#120(用于存工艺参数,甲方自定义的)
- 加工工件数(产量)
- 刀具寿命数据
发那科的宏变量读取,在NodeSCADA里按变量号配就行,#100对应地址100,依次往下。宏变量的数据类型是双精度浮点,配置时注意选对。
刀具寿命这块稍微说一下。发那科系统里刀具寿命管理有两种模式:计数方式和时间方式,读出来的值含义不一样。这个要提前跟工艺那边确认或者在发那科系统的HMI上看清楚,不然采回来的数字没法直接用。

四、HTTP推送配置:按MES要求组装格式
三类设备的数据采进来之后,统一通过HTTP推送给MES。
MES那边要求的格式是一个列表,每一项是一个采集点,结构如下(结构和数值已脱敏):
[
{
"code": "1200_t1",
"name": "温度",
"value": null,
"transformed_value": null,
"identifier": "t1",
"deviceCode": "1200",
"dataType": "uint16",
"localtime": null
}
]
每个点位要有code、name、value、deviceCode、dataType、localtime这些字段,其中code是deviceCode_identifier的拼接格式。
NodeSCADA的推送模板支持完整的art-template语法,模板里用forEach循环遍历所有需要推送的点位,每个点位组装成MES要求的对象结构,最后用JSON.stringify转成字符串推出去。这样不管点位有多少,模板逻辑是固定的,新增点位只需要在采集侧加配置,推送模板不用动。
具体写法见截图。
数据源用的历史库推送,有时间指针,网络抖了之后自动补推,不丢数据。

五、可视化大屏
大屏是甲方IT自己开发的前端页面,数据直接通过NodeSCADA的HTTP API获取,想要哪个点位的实时值就调接口取,不需要后端服务做中转。NodeSCADA本身提供了开放的HTTP API,这块对接起来没什么复杂的,前端那边按接口文档接就行。由于这个涉及到客户隐私,就不放图了。
整体跑下来的感受
这个项目三类设备协议都不一样——Modbus、S7、发那科——放在一个软件里统一管理,配置界面是一套,采集出来的数据在同一个地方看,推送也是统一配置,比以前每种设备搞一套方案、分开维护要省事很多。
现场调试花了两天,大部分时间在对MES的点位清单——甲方MES那边要200多个点位,每个点位的code、name、dataType都要跟他们对好,这个过程比采集本身费时间。
对接完之后MES那边的产量统计、MES能耗报表当天就跑起来了,比我预期要顺利。
冯工聊数采NodeSCADA · 持续更新工控数采实战经验
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)