简介:58页演示文稿系统梳理了智慧工厂整体落地方案,面向制造业管理者、工业互联网实施工程师及自动化项目规划人员。内容从设备感知层一直延伸至物联网平台、数据存储、场景联动与规则引擎,重点展开设备全生命周期管理、预测性维护、产线监测、智慧能耗、三维数字孪生、视频监控、能耗应用与工应用等模块,并结合某发动机厂在线监控平台、铝厂数字孪生、研发中心数采等案例,说明设备物模型、协议适配、数据治理和统计分析的实际建设思路。PPT中附有系统架构图、数采能力清单与案例页面,便于直接借鉴页面结构与表达方式。压缩包共1个文件,为PPTX演示文稿,大小约7.91MB,可直接编辑用于方案汇报或项目立项。目前已有42人学习下载,适合作为智慧工厂售前演示、实施规划的框架蓝本。
1. 智慧工厂方案PPT离落地还差四个关键决策:数据、网络、边界、节奏
拿到一份58页的智慧工厂解决方案PPT,很多人会先被蓝图打动:大屏、数字孪生、预测维护。但真到了车间,这些效果换不来一块钢板。PPT可以帮你描绘目标,落地却要回答四个问题:数据从哪来、网络怎么搭、系统边界画在哪、第一批功能做什么。这四个问题决定了一个项目是三个月见效,还是三年打转。这篇笔记适合那些拿着类似方案、正准备做内部汇报或招标的从业者,也适合刚开始负责智能工厂落地的工程师。我会把方案里不肯写出来的细节摊开,尽量给到可以直接照着执行的做法。
2. 把58页PPT拆成实施蓝图:五大模块和一张设备盘点表
2.1 方案里画的架构图,落地时要还原成清单
打开任何一份智慧工厂解决方案,前几页都是“现状痛点”,中间一张四层架构图,最后是“预期收益”。真正能指导实施的只有三个信息:硬件清单、数据接口、业务流程。项目开始时,我一般会花一整天把PPT翻完,把每一页的关键词转录进一张梳理表。常见转法如下:
| PPT关键页 | 方案里的常见表述 | 落地需要补充的信息 |
|---|---|---|
| 现状分析 | 设备孤岛、数据断点 | 设备型号、PLC品牌、联网状态、通讯协议 |
| 整体架构 | 设备层、网络层、平台层、应用层 | 每层的负责部门和系统边界 |
| 设备联网 | 通过网关统一采集 | 每台设备的控制器点表、点位类型、读写权限 |
| MES功能 | 生产排产、质量追溯、设备管理 | 现状单据、关键角色、流程卡点 |
| 智能应用 | 数字孪生、预测维护 | 需要哪些历史数据、数据质量是否够用 |
做完这张表你会意识到,方案里真正需要拍板的其实只有五个模块:设备层、网络层、数据层、业务层、展示层。下面一层层拆开说。
2.2 设备层:先回答“能连什么”,再决定“连什么”
设备层是智慧工厂的最后一公里。不要看到别人的AGV和机械臂就眼热,先看自己车间设备上的控制器能不能联网。常见情况分三类:有PLC且带以太网口(西门子S7-200 SMART、S7-1200/1500、三菱FX5U等),可以直接走Modbus TCP或OPC UA,这是成本最低的一类;有PLC但只有串口(RS485/RS232),需要通过串口服务器或协议转换网关,接线时要确认波特率、奇偶校验、停止位,一个参数错一个字节都读不对;老设备没有任何控制器,只能靠加装电流、振动、计数传感器,这种“状态感知”的投入最高,通常只建议在瓶颈工位加装。
你需要做一张设备台账,至少包含:设备编号、设备名称、所在产线、控制器品牌/型号、通讯协议、IP地址(规划)、点位数量、是否允许程序改动。我建议让设备部主管、电气主管和外部集成商一起填,否则会有很多“这个设备谁也别碰”的潜在冲突。表单里最好再加一列“当前可用接口”,因为有些PLC虽然支持Modbus,但程序里根本没开放通讯块,需要电气工程师改PLC程序才能把数据导出来,这一条在方案里经常被忽略。
2.3 网络层:IP、VLAN和安全隔离一次规划到位
网络层被很多人当成交换机堆叠,实际上它决定采集链路是否稳定。我一般按“生产网”和“办公网”两个网段来设计。生产网里只放PLC、IO模块、采集服务器;办公网里放MES客户端、报表服务器、大屏。两者之间用防火墙放通指定端口,避免办公区的视频流量污染生产控制网。如果车间已有网络不堪重负,物理隔离是更稳妥的方案,即两台交换机,中间只通过采集服务器的双网卡交换数据。
IP地址建议用10.10.X.Y段,按产线和设备类型分段。例如10.10.1.X是A线PLC,10.10.2.X是B线PLC,10.10.100.X是采集服务器和数据库,10.10.200.X是可视化大屏。子网掩码统一255.255.255.0,网关指向车间核心交换机。不要随随便便用192.168或172.16,尤其当集团已经有大网规划,网段冲突后排查起来要命。
| 角色 | IP段建议 | 说明 |
|---|---|---|
| A线PLC | 10.10.1.10~1.50 | 每台PLC固定IP,打印标签贴在电控柜 |
| B线PLC | 10.10.2.10~2.50 | 同上 |
| 采集服务器 | 10.10.100.10 | 部署采集程序、时序数据库 |
| MES数据库 | 10.10.100.20 | 关系型数据库 |
| 可视化大屏 | 10.10.200.10 | 只读访问,不开远程桌面 |
这张表最好做成Excel贴在车间弱电间,否则设备换电工后,没人找得到哪台设备哪个IP。
2.4 数据层:实时数据和业务数据要分库存储
数据层最常见的错误是把所有数据塞进一个关系型数据库。一台PLC每2秒采集10个点,一天就有43万条记录,几十台设备就是千万级。MySQL被写入和查询拖垮是很现实的事。我一般这样拆:实时/时序数据写进InfluxDB、TDengine这类时序数据库,按点位和标签存储,保留3~6个月,用于曲线回放和OEE计算;业务数据(工单、报工、质量记录)写进PostgreSQL/MySQL,保持事务一致性,用于追溯和报表;计算后的指标(OEE、能耗日汇总)再每天聚合进业务库,给报表系统查。
在数据层还要定义点位编码规则,不要直接用寄存器地址当点位名。用“设备+部件+语义”的结构,比如PLC01_LineSpeed、PLC01_MoldTemp。这样后期做报表或回溯时,不用对着地址猜含义。如果一开始就图省事,等点位超过500个,数据治理的坑会一个接一个。
2.5 业务层:MES只做流程闭环,不做实时监控
业务层要回答“数据怎么变成管理动作”。很多方案把MES描绘成全知全能,实际上MES最适合解决的只是三件事:工单下发与执行、质量数据采集与追溯、设备维修工单闭环。落地时要先把每个流程写成“谁、什么时间、在哪个设备、做了什么、结果如何”这样的单据。这一步必须跟生产主管确认现有的纸质单据,并理解他们为什么不想用电子化——通常是因为录入不够方便。所以现场要配扫码枪和工业平板,不能要求操作工回办公室敲键盘。
业务层的实施节奏也很关键。第一批先做设备状态透明化和班次产量统计,让车间主任每天一上班能看到昨夜的产出,这个最有价值。第二批再做工单绑定和质检单,让追溯闭环。第三批才考虑排产优化、预测维护这些锦上添花的功能。按这个步骤走,每个阶段都能给出现实收益,项目不至于烂尾。
3. 从一条Modbus TCP命令开始的设备数据采集:参数、代码与选型
3.1 为什么优先选择Modbus TCP而不是OPC UA
大部分车间的中老设备都支持Modbus TCP,很多新PLC也自带这个服务。相比之下,OPC UA安全性和语义模型更好,但配置门槛高:需要安装证书、浏览节点树、处理会话管理。如果只是要拿到寄存器里的温度、转速、计数,Modbus TCP是性价比最高的起步方式。等设备接入数量超过50台,需要做数据安全或标准化建模时,再逐步迁移到OPC UA也不迟。
还有一种常见做法是把Modbus TCP作为默认接入方式,OPC UA只留给S7-1500这类现代PLC。需要提醒的是,所有数据都要按Modbus协议解释,不要按PLC厂家的格式解释。因为同一个寄存器地址,三菱和西门子的映射方式可能不同,后面会专门讲这个坑。
3.2 最小可用的采集脚本:用Python读PLC寄存器并推给MQTT
下面这段代码是我在试点项目里最常用的“先跑通”脚本。它从PLC读取10个保持寄存器,每隔2秒发布到本地MQTT Broker,数据可以被可视化服务订阅。不用一开始就接数据库,先把链路打通。
from pymodbus.client import ModbusTcpClient # pymodbus 3.x 同步客户端 import paho.mqtt.client as mqtt import time import json PLC_HOST = "10.10.1.10" # PLC 的 IP,必须和采集电脑在同一网段 PLC_PORT = 502 # Modbus TCP 默认端口 UNIT = 1 # 从站地址,多机情况下为 1~247 REG_ADDR = 0 # 保持寄存器起始地址(协议地址) REG_COUNT = 10 # 连续读取的寄存器个数 MQTT_BROKER = "10.10.100.10" MQTT_TOPIC = "factory/plc01/raw" mqtt_c = mqtt.Client() mqtt_c.connect(MQTT_BROKER, 1883, 60) def read_registers(): client = ModbusTcpClient(PLC_HOST, port=PLC_PORT, timeout=3) try: result = client.read_holding_registers(REG_ADDR, REG_COUNT, unit=UNIT) if result.isError(): print("Modbus read error, check device/unit/address") return None return result.registers # list[int] finally: client.close() while True: values = read_registers() if values is not None: payload = { "device": "PLC01", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "regs": values, } mqtt_c.publish(MQTT_TOPIC, json.dumps(payload), qos=0) print(payload) time.sleep(2)说明一下核心参数:REG_ADDR是协议地址,不是触摸屏上看到的“40001”这种编号。比如面板显示40001对应协议地址0,40011对应协议地址10,很多新手翻车就在这里。UNIT参数一般设为1,但如果用网关对接多台串口设备,需要按从站号走。timeout要根据网络情况调整,普通车间3秒够用,跨层交换或无线桥接时要放大到5~10秒。MQTT qos选择0即可,实时数据丢一个包后面能补上,不要为了可靠而拖慢链路。
3.3 点位映射与数据类型:读出来的数字为什么是乱的
读回的值在程序里是整数,但现场的数据往往需要参与运算。常见坑有三类。
第一,地址偏移。西门子等部分PLC把地址从1开始编号,而Modbus协议地址从0开始,所以你要确认PLC程序里的MW0是不是协议寄存器0。第二,数据类型。温度可能是Int(16位有符号),也可能是Real(32位浮点,占两个寄存器)。如果只按单个寄存器读出来,浮点数的表现就是一堆莫名其妙的巨大整数。第三,大小端顺序。不同PLC对浮点数的字节排列不一样,西门子一般大端,罗克韦尔有时小端。
用Python处理浮点寄存器时,需要把两个相邻寄存器拼成32位再解释。常见写法:
import struct # 假设原始值在 values[2] 和 values[3] 两个寄存器里 low = values[2] high = values[3] # 大端写法:高字在前 raw_bytes = struct.pack('>HH', high, low) temperature = struct.unpack('>f', raw_bytes)[0] print("温度:", round(temperature, 2))如果温度算出来是10的-45次方这种离谱数字,先尝试交换high和low,再尝试换成小端符号。这个环节完全依赖现场验证,不要相信PPT里写的“标准协议”。我的习惯是先手动读一个已知量的寄存器,例如设备触摸屏上显示温度,这里读回来换算后必须一致,否则就是地址或字节序不对。
3.4 采集频率和分组策略:别让高频请求把PLC拖成“半死”
很多采集项目在设备数量超过20台后开始出现通信异常,原因之一是轮询频率太激进。一个约定俗成的经验:普通温度、压力、流量等慢变量,采集周期5~15秒就够;速度、电流、扭矩等快变量,1~3秒;状态变化和报警信号可以做到0.5秒甚至事件驱动。但要注意,读取的寄存器越多,报文越长,PLC处理时间越久。尽量把一个PLC的点位分批读取,每批不超过64个寄存器,多批之间间隔0.5秒。分组可以这样设计:
| 数据类别 | 示例点位 | 采集周期 | 批次 |
|---|---|---|---|
| 设备状态 | 运行/停止/待料 | 1s | 批次A |
| 工艺参数 | 温度、压力、速度 | 3s | 批次B |
| 生产计数 | 产量、合格数 | 5s | 批次C |
| 能耗参数 | 电流、功率 | 10s | 批次D |
使用多线程轮询时要小心共享变量和PLC拒绝服务。我一般用队列分发,把不同批次分给独立的客户端连接,不要在一个连接里同时发多个串行请求。如果PLC的CPU扫描周期明显变长,优先降低频率,而不是加大超时时间。
3.5 备选路线:OPC UA、Profinet和网关接入
如果产线PLC是S7-1500或带UA Server的新型设备,我建议直接用OPC UA。优势是不用翻地址表,点位的语义直接在服务器里定义。缺点是初始配置复杂:需要导入证书、配置安全策略,单点浏览可能花一天时间。实施时可以让设备厂商提供UA配置文件,或者用UA Expert工具导出变量列表。
对于老设备只有RS485的情况,需要先测串口参数(波特率、数据位、校验位、停止位),然后用串口服务器转以太网,再在采集程序里挂一个串口通讯线程。串口比较脆弱,最好加屏蔽双绞线,线长不要超过50米,否则丢包会很严重。常见网关类型包括协议网关(Modbus RTU转Modbus TCP)和数据网关(直接采集上传云)。网关会多一层黑盒子,排查问题的时候你很难知道是网关转发错,还是PLC地址错。因此所有用过网关的人都会告诉你:先把网关的透明转发模式测一遍,再做地址转换,省得后面怀疑人生。
4. 把设备数据变成管理闭环:MES核心表、查询与边界划分
4.1 MES不是监控大屏,它是工单和质量的数据账本
很多方案PPT把大屏放在首页,导致老板以为买了MES就能看到炫酷动画。实际上MES的价值在于把生产现场的人、机、料、法、测变成可查询的记录。你要处理的不只是设备实时值,而是“某张工单、某台设备、某位操作员、在什么班次、用了哪批物料、产出多少合格品”。所以业务层的核心是建模,而不是画图。
实施时,我先从两个流程切入:工单执行流程和质量追溯流程。工单执行要求操作员在平板或扫码枪上启动工单、报工、跳工序;质量追溯要求记录每个批次的关键参数和检测结果。这两张网一铺开,生产数据才真正有业务含义。否则你采上来的数据只是一堆数字,老板问“今天这个单子完成了多少”依然没人能答上来。
4.2 建好三张基础表:工单表、设备表、工单设备绑定表
用SQL建表是最直接的。先看三张核心表的示例:
CREATE TABLE work_order ( order_no VARCHAR(32) PRIMARY KEY, product_code VARCHAR(32) NOT NULL, qty_plan INT NOT NULL, state VARCHAR(16) DEFAULT 'created', planned_start TIMESTAMP, planned_end TIMESTAMP );state字段建议用created/running/paused/closed这样的英文枚举,不要直接在业务代码里写“已完成”三个字,因为不同角色对“完成”的理解不同。接着是设备表:
CREATE TABLE machine ( machine_id VARCHAR(16) PRIMARY KEY, name VARCHAR(64) NOT NULL, location VARCHAR(64), ip_address VARCHAR(32), protocol VARCHAR(16) DEFAULT 'MODBUS' );ip_address不要用INET类型,因为现场IP规划经常调整,字符串更省心。协议字段用来标记接入方式,以后扩展会方便。再建绑定表:
CREATE TABLE order_machine_bind ( bind_id SERIAL PRIMARY KEY, order_no VARCHAR(32) NOT NULL REFERENCES work_order(order_no), machine_id VARCHAR(16) NOT NULL REFERENCES machine(machine_id), start_time TIMESTAMP NOT NULL, end_time TIMESTAMP, shift_id VARCHAR(8) );为什么需要绑定表?因为一张工单可能跨多台设备,一台设备也可能按时间段切换不同工单。只有记录开始结束时间,才能精确到“这台设备上午在做A单,下午做B单”。没有这张表,产量统计永远说不清。
4.3 生产记录表:把采集数据与业务单据挂钩
设备采集的数据不能只进时序库,还要在业务库留一份压缩过的证据。生产记录表可以这样设计:
CREATE TABLE production_event ( event_id BIGSERIAL PRIMARY KEY, order_no VARCHAR(32) REFERENCES work_order(order_no), machine_id VARCHAR(16), event_time TIMESTAMP NOT NULL, event_type VARCHAR(16), -- start / ok / ng / energy value NUMERIC(10,2), unit VARCHAR(8) );采集服务在设备每次完成一个加工循环时,通过PLC的计数信号往这张表插入一条event_type='ok'的事件。注意,不要每2秒插一行,那是时序库的活儿。这里只保存“有意义”的业务事件。随后,查询某班次某台设备的产出和合格率:
SELECT we.order_no, we.machine_id, COUNT(*) FILTER (WHERE we.event_type = 'ok') AS ok_pcs, COUNT(*) FILTER (WHERE we.event_type = 'ng') AS ng_pcs FROM production_event we WHERE we.machine_id = 'M01' AND we.event_time >= '2025-03-10 08:00:00' AND we.event_time < '2025-03-10 16:00:00' GROUP BY we.order_no, we.machine_id;这里的event_time来自采集程序的时间戳,而不是操作员手工上报,因此必须对时间同步做要求。PLC和采集服务器都要用NTP对时,否则跨班次边界时会漏掉或重复计数。很多工厂忽略这一步,等到报表对不上才发现凌晨的点位漂了几分钟。
4.4 与ERP、WMS的边界:谁管计划,谁管库存
MES和ERP经常在“生产计划”和“物料批次”上打架。通常的边界是:ERP负责主生产计划和物料需求计划,MES负责车间作业计划与执行;WMS负责库房实物管理,MES只关心产线上在制品的流转和批次。不要把ERP的排产功能强行搬到MES,也不要要求MES去维护仓库库存。集成时,MES从ERP接收生产订单,但需要根据设备实时状态做工序调度。物料批次信息可以通过接口从WMS推送,MES记录消耗和产出即可。
如果你们公司没有ERP和WMS,胆子小一点:先做MES的工单和报工,物料批次暂时手工录入,不要设计太重的物料追溯。否则项目会死在实施范围里。边界问题要在方案评审时写清楚,否则供应商会无限扩展功能,延长周期,最后哪块都做不透。
4.5 一个容易被低估的配置:班次模型
MES报表里经常出现“夜班产量特别低”或“早班产量算到别人头上”的问题,根源是班次模型定义错了。每个车间有自己的换班时间,可能是早8晚8,也可能是早7晚3晚11。你需要把班次做成可配置的表,而不是在SQL里写死8:00。建一张班次表:
CREATE TABLE shift_calendar ( shift_id VARCHAR(8) PRIMARY KEY, shift_name VARCHAR(16), start_time TIME NOT NULL, end_time TIME NOT NULL, work_day BOOLEAN DEFAULT FALSE );在统计报表里,不要把自然日当生产日。很多工厂凌晨2点的产量要归到前一天,所以需要根据班次定义做视图或函数。这里给一个思路:用事件时间加上偏移量,把跨凌晨的班次划到前一天。具体做法:
SELECT DATE(event_time - INTERVAL '8 hours') AS prod_date ...当早班从8点开始时,减去8小时,凌晨的数据就归到前一天了。但如果你班次是7点,则减7。这个偏移量要跟随班次配置,不要写死。很多人在这里翻车,报表被折腾数周,原因都是“昨天到底算哪一天”。
5. 智慧工厂落地避坑指南:五个现场翻车点与排查思路
5.1 设备地址映射错误,采集页面出现“鬼值”
现象:温度显示30度,读到却是32769;产量自动跳变,甚至出现负数;对比寄存器值时发现完全对不上。
原因:没有区分PLC地址和Modbus协议地址。很多工程师直接从触摸屏抄地址,没做偏移换算。另外,寄存器可能是32位浮点或32位无符号数,而采集程序按16位整数解析。
解决:先做坐标换算。如果对方文档给的是“40001”,那么Modbus协议地址等于面板地址减1,40001对应0,40002对应1。然后用一个已知值做验证:写一个测试程序逐寄存器读取,对照设备触摸屏显示,确认后再批量读取。确认类型后,再写解析函数。不要一次性接入几百个点位,先挑三个典型点验出规律。
5.2 采集频率太高,PLC直接“呆滞”
现象:采集程序上线后,PLC偶尔失去响应;触摸屏变慢;设备动作出现停顿;重启后又正常。
原因:采集周期设到200ms,每次读120个寄存器,多个线程同时轮询,PLC的通讯荷载超过CPU处理能力,尤其是一些老PLC,Modbus请求会挤占扫描周期。
解决:把采集点分组,慢变量用5秒以上周期,快变量控制在1秒;一个连接内不要并发多请求;如果有条件,在PLC侧加一个数据块,把需要共享的数据拷贝到独立寄存器区,采集程序只读那块区域。升级优化后,可以用PLC诊断观察CPU扫描周期是否恢复。如果扫描周期依然很高,就得检查是不是PLC程序本身存在扫描瓶颈。
5.3 OPC UA证书失效后断线不自动恢复
现象:系统运行一周后采集数据中断,采集服务日志里出现“BadSessionId”或“AccessDenied”字样,重启服务才能恢复。
原因:OPC UA的安全会话有过期时间,短期内没问题,但证书轮换、服务器升级、系统时间漂移都可能导致会话失效。同时,采集程序没有写断线重连的退避逻辑,一遇到会话错误就退出主循环。
解决:在采集程序里加重连机制,检测到异常时sleep 5秒再重新连接;维护好UA客户端和应用证书的信任关系;如果使用无安全模式的连接,要评估风险并做好系统时间同步。代码里可以这样写:
while True: try: client = UAConnection() client.connect() client.run() except Exception as e: print(f"OPC UA disconnected: {e}") time.sleep(5)重连时最好加上指数退避,避免多台设备同时重连导致服务器过载。放个简单的计数器,连续失败3次就等30秒,成功后再重置。
5.4 网络广播风暴,交换机一挂全车间掉线
现象:一个工人插错网线,或者某台设备送修后恢复,结果整个车间的PLC全部连不上;交换机指示灯狂闪;Ping网关超时。
原因:办公网和生产网没有隔离,ARP广播、普通视频流量进入生产网;或者使用了非网管的家用交换机,环路没有保护,一旦有人把两根网线同时插到一台交换机上形成环路,广播包立即打满网络。
解决:用工业网管交换机,划分VLAN,生产网、办公网各一个广播域;开启环路检测和风暴抑制;把PLC和采集服务器放在同一个VLAN里;如果一定要跨VLAN,通过防火墙或三层交换机放通。最省事的物理隔离就是两台交换机,中间只连采集服务器双网卡,把业务网和控制网分开。做完网络改造后,最好做一次断电重启测试,看看设备能否自动恢复连接。
5.5 系统报工数量与设备真实产量对不上
现象:操作员说今天做了200件,系统显示180件;或者某次设备断电后,计数突然跳增。
原因:采集程序只数了设备“运行”信号,但运行不等于加工。设备可能在待料空转,传感器由于振动重复计数,或者PLC的计数器在重启时清零但没有同步。
解决:把“一个加工循环完成”的信号作为报工触发点,比如冲床下死点、注塑机合模终点、CNC主轴结束复归;引入去重窗口,比如同一来源的计数信号1秒内只记录一次;断电恢复后重新读PLC计数器并与库中最大值做差值。另外安排一个“人工抽检对比”:每天随机选2台设备,由班组长上报实际数量与系统对比,差超过1%就要查信号。这个动作坚持一个月,基本能把计数可靠性做到99%以上。
6. 进阶技巧:上线前先做一次2小时的数据链路验证
真正的智慧工厂不是一次切换完成的。我每做一个项目,都会坚持先做“最小可复现链路”验证:一台PLC、一台笔记本、一个MQTT服务,两个小时内把数据从设备搬到屏幕上。如果这一步跑不通,后续所有PPT里的功能都是空中楼阁。
第一步,把设备IP固定,把笔记本配置到同一网段,用脚本读取5个寄存器。第二步,把寄存器映射成业务状态,写一个循环打印状态变化。第三步,订阅MQTT消息,变成看板统计。这里给一个简单脚本片段,把寄存器映射成状态并记录变化:
import time from pymodbus.client import ModbusTcpClient PLC_ADDR = "10.10.1.10" c = ModbusTcpClient(PLC_ADDR, port=502, timeout=2) last = None while True: rr = c.read_holding_registers(0, 1, unit=1) if not rr.isError(): state = {0: "停机", 1: "运行", 2: "待料", 3: "故障"}.get( rr.registers[0], "未知" ) now = time.strftime("%H:%M:%S") if state != last: print(f"{now} 设备状态: {state}") last = state time.sleep(1)这段代码能测出:你的Modbus连接通不通、寄存器地址对不对、PLC同一个点位的状态变化能不能被稳定读取。如果状态始终不变,可能有三个原因:地址错误、值没变化、轮询间隔太短。你可以在触摸屏上手动切换“运行/停机”,观察打印是否跟随变化。如果变化正常,说明数据链路已经打通。
在这个基础上,再接入InfluxDB、ECharts或任意一个可视化工具,不到半天就能看到实时OEE曲线。这比先做完整平台再验收要可靠得多。我习惯把这一步叫做“上线后悔药”:所有项目最怕的不是软件Bug,而是业务和现场数据对不上。提前用2小时验证,就能把风险暴露在投入计划之前。希望这个思路能帮到你,也希望能省掉你的一大堆踩坑时间。
本文还有配套的精品资源,点击获取