简介:这份PDF方案面向制造企业信息化人员、MES系统集成工程师及数控机床数据采集二次开发者,系统阐述数据采集系统的整体架构与开发要求。资源共1个PDF文件,压缩包大小1.62MB,内容完整精炼。目前已有653人学习下载。方案详细说明B/S架构下服务器端与客户端的分工,重点解析网卡采集与硬件采集两种方式,明确FANUC0i、SIEMENS840D、HEIDENHAIN Tnc530等系统可走网卡协议,而MITSUBISHI、MAZAK、OKUMA等需加装硬件传感器;同时覆盖开关机状态、报警信息、主轴功率等采集内容,并给出软件协议采购、硬件配置、开发环境及开发周期等落地建议。读者可据此快速建立数控机床数据采集的功能蓝图,为后续软件选型、方案设计或MES对接提供直接参考。
1. 数控机床数据采集系统方案:先想清楚这四件事再动手
车间主任要一份每台机床的利用率报表,以前的流程是操作工下班前手写一张纸,第二天再录进 Excel。晚一天不说,写错、漏写、甚至替人代填都查不出来。后来换了个思路,上一套数控机床数据采集系统方案,直接从控制器和 PLC 里把运行状态实时取出来,报表自动生成。这件事的本质,是把"设备状态"从纸面记录变成结构化数据流。一份能落地的数控机床数据采集系统方案,通常要回答四件事:采哪些数据、从哪一层取;用什么协议和网络连回来;采集服务怎么写、参数怎么设;踩了坑怎么排。本文按这个顺序展开。适合正在做制造信息化选型、MES 项目对接、或者要给自家车间上设备监控的工程师对照着看:新手能照着步骤搭出最小系统,熟手可以直接跳到参数和避坑章节核对边界。
2. 三种数据源怎么选:数控系统、PLC 与外加传感器各管哪一段
方案的第一页不该先画网络拓扑,而该先写清楚数据源清单。数控机床的数据不在一个地方:运行状态类数据在数控系统里,开关量信号在 PLC 里,功率、振动这类物理量得从机床外部加装才能拿到。选错了层,后面的协议、代码、报表全要跟着返工。我见过最典型的返工案例,就是一开始只采了数控系统,后来发现开门的动作、装夹的间隙时间全看不见,又补了一轮 PLC 信号采集,工期多花了三周。
2.1 数控系统数据:运行模式、程序号与主轴负载的读取门道
数控系统是采集方案里优先级最高的数据源,没有之一。它提供的是与加工动作直接相关的核心状态:当前运行模式(自动、手动、MDI、编辑)、正在执行的程序号、主轴转速、主轴负载、进给速度、进给倍率、各伺服轴坐标与负载、报警号、累计运行时间、加工计数等。这些字段组合起来,就能回答车间最关心的三个问题:这台机床现在在干什么、干得顺不顺、停了是因为什么。
读取门道在于:同一个逻辑量,在不同厂商甚至同一厂商不同型号的系统里,节点地址和数据结构都不一样。有的系统把主轴负载做成百分比,有的给出实际电流值;有的程序号节点只在自动模式下有效,手动切换后保留的是上一次的值。所以方案里一定要先做一份点表,把每个字段的逻辑名、实际地址、类型、采样周期、用途列清楚,再动手配节点。我一般会按这个顺序定采集周期:模式、程序号这类状态量 3 到 5 秒一次足够;主轴负载、主轴转速这类趋势量要缩短到 1 秒以内,否则后面做负载预警时曲线是锯齿状的,阈值根本没法定。
2.2 PLC 信号:开关门、夹紧与报警这些"隐形变量"
数控系统读不到的那部分状态,基本都在 PLC 里。典型的有:安全门开合、工装夹紧到位、液压压力、润滑液位、冷却液开关、排屑机运行状态、自动门动作、三色灯信号。这些开关量看起来不起眼,但对停机原因拆分特别关键。举个例子,一台加工中心在自动模式下程序停了,系统侧只能看到"程序结束",到底是操作工去上厕所了、在换料、还是在清理铁屑,全部要靠门信号和夹紧信号反推。
PLC 信号的采集通常有两条路。第一条是看数控系统能否把 PLC 变量映射到通讯接口上,能映射就直接在采系统数据的同时一起读,不增加硬件;第二条是在电气柜里加远程 I/O 模块,把关键开关量的硬接线信号并出来,再走总线送到采集服务。两条路我都在现场用过:第一条省钱,但可读的变量范围受厂商限制;第二条稳定且不依赖厂商,但要动电气柜,施工时要断电作业。方案里需要特别提醒的是,PLC 内部变量动辄几百上千个,别贪多全采,按用途筛出三五十个关键信号就够了。
2.3 外接传感器与智能电表:补工艺过程数据的最后一块
还有一些数据,控制器和 PLC 都拿不到,必须外加硬件。最常见的是机床总进线处的智能电表,能测电压、电流、有功功率、电能,用来做单台设备的能耗核算和能耗拆分;其次是主轴轴承座或刀塔上的振动传感器,用于刀具磨损和主轴健康度的趋势判断;还有一些场景会加装温度传感器,监测主轴温升或切削液温度。
这块的取舍原则是"按需扩展,不要第一版就全上"。加传感器意味着额外的硬件采购、布线和维护工作,而且传感器信号进系统之前还得过一道模拟量采集模块或者专用的振动采集仪,现场施工量比前两类数据源大得多。我通常的建议是:第一版只做数控系统加关键 PLC 信号,把设备状态和时间账先跑通;等 OEE 和利用率报表稳定运行一两个月,确认数据是真的有人在用,再规划电表和振动传感器这类扩展项。
2.4 数据源选型对照:一张表定下采集范围
为了方便在方案评审时跟生产、设备、IT 几方对齐,我习惯把三类数据源整理成一张对照表,直接贴在方案文档的第一章。这张表的用处是让所有人都能指着它说"我们第一期就做这几项",避免项目中途被不断加需求。
| 数据源 | 典型数据 | 采集接口 | 推荐采样周期 | 主要用途 | 实施成本 |
|---|---|---|---|---|---|
| 数控系统 | 运行模式、程序号、主轴转速/负载、进给倍率、报警 | 数控系统对外通讯接口 | 状态量 3~5s,趋势量 ≤1s | 实时状态、OEE、负载预警 | 中,依赖协议授权 |
| PLC 信号 | 安全门、夹紧、液压、润滑、冷却、三色灯 | 远程 I/O、总线或系统映射 | 100ms~1s | 停机原因拆分、辅助时间统计 | 低到中 |
| 外接传感器/电表 | 功率、电流、振动、温度 | Modbus、模拟量、专用采集仪 | 100ms~10s | 能耗核算、趋势预警、质量追溯 | 较高 |
选型结论通常很一致:第一期以数控系统为主,PLC 关键信号为辅,外接传感器留好扩展接口但不上量。这样做的好处是实施周期短、风险小,而且 OEE 和利用率这两张报表第一批就能出数据,项目价值能被车间直观看到。
3. 通信协议与网络组网:OPC UA 为主线的连接设计
数据源确定了,接下来要解决的是"怎么把数据从机床里拿出来"。通信协议的选择直接决定采集服务的开发方式、能拿到哪些数据、以及后期维护的复杂度。这一章只讲我在方案里最常用的三条路线:OPC UA、MTConnect、数控厂商原生接口,以及配套的现场网络怎么搭。
3.1 OPC UA 为什么是跨品牌采集的主流协议
方案里如果没有特别理由,我默认选 OPC UA。原因有三点:跨厂商互通、信息模型标准、自带安全和断线重连机制。OPC UA 是平台无关的二进制通信协议,默认走 TCP 端口 4840,几乎所有主流数控系统近年都提供了服务端支持,不同品牌、不同年代的机床可以统一接入同一个采集服务,这是老式私有协议做不到的。
它还有一个对工程师很友好的特性:节点是带语义的寻址结构,比如一个主轴负载节点可以携带单位、工程范围、质量戳等元数据。采集服务在连接后可以浏览服务器的节点树,像看文件夹一样把设备结构摸清楚,再逐个订阅或轮询需要的节点。OPC UA 的会话管理也比很多老协议健全,服务端会定期校验会话活性,客户端异常断线后服务端能自动回收资源,不会把数控系统的通讯任务拖死。
在实际参数配置上,有三项我会在方案里写死建议值:连接超时设 5 秒、请求超时设 3 秒、会话超时设 10 秒。连接超时太短,现场网络波动时会反复报错;太长,断线后重连要等半天。会话超时则是告诉服务端"这个客户端多久不发消息就可以回收会话",10 秒是多数控制系统能接受的折中值。
3.2 MTConnect 与数控厂商原生接口:适合什么场景
MTConnect 是面向机床行业的轻量级标准协议,数据以 XML 形式组织,定义了设备状态、主轴、进给、报警等标准数据项。它的优点是结构固定、接入简单,适合快速做设备状态可视化;缺点也明显:数据字典偏"标准件",厂家自定义的深层参数往往取不到,而且很多老机床根本没有 MTConnect 服务端。
数控厂商原生接口则是各家系统自带的通讯开发包,数据最全、性能最好,但绑定单一品牌。如果工厂里只有一种品牌的数控系统,用原生接口是合理的,能拿到的信息粒度远超 OPC UA;但如果现场是混线生产,同时存在日系、欧系、国产三四种系统,每家的接口都要单独开发一套适配,维护成本会非常高。
我的选型判断是分层看的:全厂统一接入层用 OPC UA,保证架构一致;对某类需要深层数据的设备,在边缘网关里单独跑一路原生接口适配,出了数据后再转成统一格式上报。这样既照顾了个别设备的深度需求,又不会让整个系统被单一厂商绑架。自研采集还是买网关,本质是同一个选择:自研灵活但开发周期长,网关交付快但深层次数据可能拿不全。
3.3 现场组网:边缘网关、工业交换与网络隔离
数据链路我一般分成三级:机床侧、边缘侧、平台侧。机床的通讯口先接到现场工业交换机,边缘网关(一台工业 PC 或者嵌入式盒子)负责跑采集服务、做协议转换、本地缓存,再通过车间主干网把数据推到 MES 或时序数据库。边缘网关必须独立于机床单独存在,不要企图在一台机床的操作面板电脑上跑采集服务,生产商不会同意,可靠性也没有保障。
网络隔离是方案里最容易省、也最容易出事的环节。数控系统的网口直接暴露到办公网,一旦办公网有人乱发包,或者 MES 服务器做了个广播扫描,机床通讯随时可能闪断。我的习惯做法是:设备网、边缘网、办公网分三个 VLAN,边缘网关是唯一的数据出口;在一级交换机上配置访问控制规则,只允许边缘网关访问机床的 4840 端口,其余方向全部拒绝;边缘网关到 MES 的通道走单独网段,必要时加白名单防火墙。这个架构在方案文档里要画成一张带分区标注的拓扑图,施工时按图接线,验收时逐条检查访问控制规则。
3.4 采集拓扑与关键端口参数表
为了让现场实施的人不靠猜,我把链路参数在方案里列成表格,包含协议、默认端口、超时建议和备注。这张表每次项目评审都会被问到,提前写好能省很多口舌。
| 链路 | 协议 | 默认端口 | 超时建议 | 备注 |
|---|---|---|---|---|
| 采集服务 → 数控系统 | OPC UA Binary | 4840 | 连接 5s,请求 3s,会话 10s | 生产环境开启签名加密 |
| 采集服务 → 智能电表 | Modbus TCP | 502 | 1~2s | 用从站地址区分多块电表 |
| 边缘网关 → MES 接口 | HTTP/REST | 按应用定 | 10s | 批量上报,避免单条请求 |
| 边缘网关 → 时序数据库 | 数据库驱动 | 按库定 | 5s | 批量提交,关闭自动提交 |
这张表的另一个作用是提醒自己:每个链路都要显式配置超时,不留默认值。很多采集服务"跑一段时间就挂"的玄学问题,最后查下来都是某条链路的超时没设,阻塞在了一个永远不返回的请求上。
4. 实现最小可用的采集服务:从节点配置到断点续采
方案写到这一步,已经完成了选型和设计,接下来是真正动手的部分。这一章给出一套最小可用的采集服务实现思路,代码骨架可以直接照着搭,重点是理解参数为什么这么设。采集服务我习惯用 Python 快速开发,工业化部署时再按需换成 C# 或者 Go,逻辑是一样的。
4.1 用 Python 写一个 OPC UA 采集客户端
先展示最核心的采集循环:连接 OPC UA 服务器,定时读取两个节点,打印成 JSON。这段代码解决的是"能不能把数据拿出来"的问题,是后面所有功能的地基。
# 采集服务骨架:从 OPC UA 定时读取主轴负载与当前程序号 import json import time from opcua import Client OPC_ENDPOINT = "opc.tcp://192.168.1.20:4840" NODE_LOAD = "ns=2;s=CNC01.SpindleLoad" # 主轴负载节点,按实际点表替换 NODE_PROG = "ns=2;s=CNC01.ActiveProgram" # 当前运行程序号节点 def connect_with_retry(): """创建客户端并建连,失败时调用方负责退避重试""" client = Client(OPC_ENDPOINT) client.session_timeout = 10000 # 会话超时 10 秒 client.connect() return client def main(): client = connect_with_retry() while True: try: load = client.get_node(NODE_LOAD).get_value() prog = client.get_node(NODE_PROG).get_value() row = { "ts_ms": int(time.time() * 1000), # 统一毫秒时间戳 "machine": "CNC01", "spindle_load": float(load), "program": str(prog), } print(json.dumps(row, ensure_ascii=False)) time.sleep(2) # 采集周期 2 秒,做负载趋势够用 except KeyboardInterrupt: client.disconnect() break except Exception as e: print(f"[采集异常] {e}") time.sleep(3) # 失败后等待 3 秒再继续,避免高频空转 if __name__ == "__main__": main()这段代码的逻辑是典型的"连接—循环读—异常兜底"结构。主循环每 2 秒读一次两个节点,读到就带上毫秒时间戳输出,读不到就打印异常并等 3 秒再试。要注意的是session_timeout这个参数,它告诉服务端这个会话可以空闲多久,10 秒是比较稳的值;设得太短,网络抖动一次会话就被服务端回收,客户端却不知道,后续读取全部失败。time.sleep(2)是采集周期,趋势类数据建议 1 秒以内,状态类数据可以放宽到 3 到 5 秒,不必所有字段都用同一个周期。
4.2 采集频率、超时与重连:三个参数决定稳不稳
采集服务的稳定性,基本由三个参数决定:采集频率、请求超时、重连策略。采集频率这里说的不是"想采多快采多快",而是数控系统的通讯任务能不能扛得住。曾经有人把采集间隔调到 100 毫秒,结果机床操作面板直接卡顿,最后被现场投诉。经验值是单台设备轮询间隔不要低于 1 秒,如果确实需要高频数据,优先用 OPC UA 的订阅机制,让服务端主动推送变化,而不是客户端高频轮询。
请求超时要分开设:连接超时 5 秒,单次读写请求超时 3 秒。有些 OPC UA 库默认不设读超时,节点无响应时请求会一直挂着,积累到几十个就把线程池占满了。重连策略用指数退避:第一次失败等 3 秒,第二次 6 秒,第三次 12 秒,最大到 60 秒封顶。每次失败后先主动断开旧连接,再重新创建客户端对象,不要试图复用已经坏掉的会话。这套参数组合我在多个现场验证过,能扛住交换机重启和临时断网。
4.3 断网缓冲与续采:本地落库再同步
现场网络不可能永远稳定,方案必须有断网不丢数据的兜底,这是采集服务与玩具脚本的本质区别。我的做法是:边缘网关本地跑一个 SQLite 缓冲库,采集到的数据先写本地,再由另一个同步线程批量推到 MES,推成功的记录打上已同步标记。这样网络断开时数据全部留在本地,恢复后按顺序补传。
# 断网缓冲:本地 SQLite 落库,恢复后按批补传 import sqlite3 def open_buffer(db_path="cnc_buffer.db"): """打开本地缓冲库,建表;synced=0 表示未同步""" conn = sqlite3.connect(db_path) conn.execute(""" CREATE TABLE IF NOT EXISTS sample ( id INTEGER PRIMARY KEY AUTOINCREMENT, ts_ms INTEGER NOT NULL, machine TEXT NOT NULL, data_key TEXT NOT NULL, value REAL NOT NULL, synced INTEGER DEFAULT 0 ) """) return conn def append_sample(conn, ts_ms, machine, data_key, value): """写入一条采样记录,时间戳由采集端生成,统一毫秒""" conn.execute( "INSERT INTO sample (ts_ms, machine, data_key, value) VALUES (?, ?, ?, ?)", (ts_ms, machine, data_key, float(value)), ) conn.commit() def sync_batch(conn, batch_size=500): """取一批未同步记录,推送到 MES 成功后置 synced=1""" rows = conn.execute( "SELECT id, ts_ms, machine, data_key, value FROM sample " "WHERE synced = 0 ORDER BY id LIMIT ?", (batch_size,) ).fetchall() if not rows: return 0 payload = [ {"ts_ms": r[1], "machine": r[2], "key": r[3], "value": r[4]} for r in rows ] # 这里调用 MES 的批量上报接口,成功后再更新标记 # resp = requests.post("http://mes-api/realtime/batch", json=payload, timeout=10) ids = [r[0] for r in rows] conn.executemany("UPDATE sample SET synced = 1 WHERE id = ?", [(i,) for i in ids]) conn.commit() return len(rows)这段代码的关键在于synced标记和ORDER BY id LIMIT ?的组合:同步永远按时间顺序取最早的一批,每批 500 条,推一批标记一批,不会出现重复推送,也不会一次把几十万条积压数据全砸向 MES。缓冲表做了按 id 排序的批量更新,性能足够覆盖单机几十台设备的数据量。要加一条保险规则:积压超过 72 小时的数据直接丢弃,因为设备状态数据的时效性很强,补两周前的数据既没有分析价值,还会拖慢同步进度。
4.4 数据质量标记:统一时间戳与单位换算
方案里很容易被忽视的,是数据质量规范。三个坑几乎每个项目都会遇到:时间戳混用、单位不统一、异常值没有标记。时间戳必须在采集端统一生成毫秒值,并且以设备本地时钟为准,不要到平台侧再打时间;边缘网关要配 NTP 校时,否则断网一段时间后,多台设备的时钟会漂移,时间轴对不齐,OEE 计算直接出错。
单位换算要在采集端完成,不要留给报表端。比如主轴负载在不同系统里可能是百分比、安培或者千瓦,方案里应规定统一转成百分比存储;温度统一摄氏度;程序号统一字符串。换算规则写死在采集服务的配置里,每个数据项都带上unit字段,平台侧只认一套单位。
异常值标记也很重要。采集服务读到节点报错或者值超出工程范围时,不能简单丢弃了事,要在数据里打质量标记:正常、估算、无效三档。比如主轴转速为 0 时的负载值应标记为无效,不参与平均值计算;断网补传的数据标记为估算,报表里可以区分。这一套质量规范不复杂,但没有它,后面做负载预警时会发现历史数据里混满了假零点,阈值怎么算都不对。
5. 数控机床采集系统搭建避坑记录:五个高频翻车点
这一章写的是我在多个现场反复踩过的坑,每条都按"现象 → 原因 → 解决"的格式记录。方案写得再漂亮,落不了地都是废纸;而这些坑,恰恰是现场验收时最常翻车的地方。
5.1 采集服务一启动,机床通信就报警
现象:采集服务部署完,一运行,机床操作面板就开始报通讯错误或者网口闪断,现场操作工直接不让碰了。
原因:多半是采集服务做了全量节点浏览,并且在短周期内轮询了大量节点。数控系统的通讯任务是低优先级后台任务,大量高频请求会把它拖垮。另一个可能原因是采集服务没有配置会话超时,把机床通讯模块的会话表占满了。
解决:固定采集节点清单,禁止启动时全量浏览按需遍历;轮询周期不低于 1 秒;开启 OPC UA 会话超时并显式断开空闲会话。如果是多台设备同时接入,把启动改为错峰进行,每台间隔 10 秒,不要在 1 分钟内同时发起几十路连接。
5.2 程序号时对时错,运行模式没一起读
现象:报表里程序号字段一会是当前程序的号码,一会是上一次加工的程序号,甚至出现在手动模式下还有程序号的怪象。
原因:多数数控系统里有两个相关节点:预选程序号和当前运行程序号。自动模式下两者一致,切到手动或 MDI 后,当前运行程序号可能保持不变或者清零,预选程序号又是另一套逻辑。只读一个节点,必然拿到"半真半假"的数据。
解决:把运行模式和两个程序号节点一起采集,在采集端做状态判断:运行模式为自动时取当前程序号,非自动时程序号置空。同时把模式变化的时刻记录成状态切换事件,这样报表端就知道程序号在什么时候是可信的。
5.3 主轴负载读出来全是 0
现象:主轴负载字段一直有值,但全是 0,偶尔出几个正常数字,曲线看起来像心跳图。
原因:两个常见来源。一是读错了节点,读到的是指令负载而不是实际负载,指令值在稳态运行时就是 0;二是主轴没转,很多系统的实际负载在主轴停止时强制归零。如果是单位问题,还会出现数值全在 0 到 1 之间的情况,那是把安培当成了百分比。
解决:先对照点表确认节点语义,再同时采集主轴转速和负载两个量;转速为 0 时把负载值标记为无效,不参与统计。在方案验证阶段,刻意让机床跑一个低转速轻切削的程序,确认负载曲线有台阶变化,才算真正读通了。
5.4 断网恢复后补采把数据库写爆
现象:一次交换机更换导致断网 4 小时,网络恢复后 MES 数据库连接直接打满,入库延迟飙升到分钟级,最后不得不停服清理。
原因:补采逻辑没有限流,断网期间积压的几十万条数据在恢复瞬间全部推送。MES 的入库接口按正常流量设计,扛不住突发写入。更麻烦的是,重推的旧数据还和当天实时数据混在一起,报表里的平均值被污染。
解决:补传必须分页限速,单批 500 条,批次间隔 2 秒,速率上限按正常流量的两倍封顶。同时设置积压过期时间,超过 72 小时的数据直接丢弃。恢复后先观察补传进度,确认 MES 入库曲线平稳了,再慢慢把批次间隔调小。
5.5 OEE 算出来超过 100%:时间戳与状态机的锅
现象:某台机床的 OEE 算出来 108%,还有个班次算出来是负的,生产主管直接说数据是假的。
原因:时间戳混用。采集服务写的是边缘网关本地时间,MES 入库时又打了服务器时间,两边时钟差半小时,状态切换的时间轴对不上,导致"运行"和"待机"重叠,理论加工时间被重复计算。另一个原因是倍率大于 100% 时,实际节拍比理论节拍快,性能系数超过 1,把 OEE 顶上去了。
解决:全链路统一 UTC 毫秒时间戳,边缘网关强制 NTP 校时;OEE 计算里对性能系数做上限封顶,超过 1 按 1 计。状态机加最小驻留时间,比如状态切换必须维持 3 秒以上才生效,滤掉通讯抖动造成的状态反复跳变。最后用一上午的人工记录和系统统计做对比,差异在 5% 以内才算验证通过。
6. 数据接得住还要用得起:用 OEE 验证采集质量,再上趋势预警
6.1 用 OEE 拆解结果反推采集完整度
采集系统上线后,第一件事不是看大屏,而是拿 OEE 验证数据质量。OEE 拆成三个因子,正好对应三段数据链路:稼动率依赖状态判定,性能依赖程序节拍和倍率,良品率依赖产量数据。任何一个因子算不对,都能顺藤摸瓜找到采集端的问题。状态判定的规则在采集端就定好,不要留给报表层猜:
| 状态 | 判定条件 | 用途 |
|---|---|---|
| 运行 | 自动模式且程序正在执行 | 计算实际加工时间 |
| 待机 | 自动模式且程序未执行 | 计算空等时间 |
| 故障 | 报警号非空 | 统计停机时长与原因 |
| 关机 | 通讯断开超过设定阈值 | 不计入可动时间 |
我的习惯是上线第一周每天做一次对比:让班组长按老办法手记半天数据,和系统统计比对,差异超过 5% 就去看是状态误判还是时间戳漂移。验证通过后,这张 OEE 表才敢交给生产部门当考核依据。
6.2 主轴负载趋势预警:采集数据的第一笔回报
采集数据最容易被看到价值的落地,是主轴负载趋势预警。做法不复杂:连续采集一两周主轴负载,按常用程序和刀具分组,算出每组负载的均值和标准差;实时负载超过均值加三倍标准差,且连续出现三次,就判定为异常,推一条预警给设备工程师。这个逻辑用 20 行代码就能实现,但需要前置的采集质量做保证——负载值必须是实际值、转速为 0 时要滤掉、时间戳要对齐。预警准确率高的前提,恰恰是前面几章做的那些枯燥的参数和避坑工作。
这套系统我每回交付时都会跟客户讲一句话:数据采集不是为了一张大屏,是为了让设备异常在变成停机故障之前,就有人看见它。做采集这行,最大的教训就是不要急着上高级算法,先把时间戳、单位、状态判定这些基本功做扎实,后面每一步才走得稳。希望帮到你。
本文还有配套的精品资源,点击获取