冯工聊数采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
  }
]

每个点位要有codenamevaluedeviceCodedataTypelocaltime这些字段,其中codedeviceCode_identifier的拼接格式。

NodeSCADA的推送模板支持完整的art-template语法,模板里用forEach循环遍历所有需要推送的点位,每个点位组装成MES要求的对象结构,最后用JSON.stringify转成字符串推出去。这样不管点位有多少,模板逻辑是固定的,新增点位只需要在采集侧加配置,推送模板不用动。
具体写法见截图。
数据源用的历史库推送,有时间指针,网络抖了之后自动补推,不丢数据。

推送模板


五、可视化大屏

大屏是甲方IT自己开发的前端页面,数据直接通过NodeSCADA的HTTP API获取,想要哪个点位的实时值就调接口取,不需要后端服务做中转。NodeSCADA本身提供了开放的HTTP API,这块对接起来没什么复杂的,前端那边按接口文档接就行。由于这个涉及到客户隐私,就不放图了。


整体跑下来的感受

这个项目三类设备协议都不一样——Modbus、S7、发那科——放在一个软件里统一管理,配置界面是一套,采集出来的数据在同一个地方看,推送也是统一配置,比以前每种设备搞一套方案、分开维护要省事很多。

现场调试花了两天,大部分时间在对MES的点位清单——甲方MES那边要200多个点位,每个点位的codenamedataType都要跟他们对好,这个过程比采集本身费时间。

对接完之后MES那边的产量统计、MES能耗报表当天就跑起来了,比我预期要顺利。


链接 → windows 数据采集软件 NodeSCADA


冯工聊数采NodeSCADA · 持续更新工控数采实战经验

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐