
1. 先说清楚这篇文章解决什么问题车间里几十台海天注塑机天天在生产但你要问今天的良品率、正在生产的模次、料筒实际温度曲线没人能立刻答上来。老师傅看一眼操作屏能报个大概但你要把这些数据汇到 MES、ERP 或者自己的统计报表里就傻眼了——每台机器的数据都在弘讯控制器的触摸屏里你自己进不去厂家上门又要收费想自己动手又不知道从哪里下手。我在这行干了不少年从模具厂、汽车配件厂到日用塑料品厂几乎每次都会被问到同样的问题“海天机能不能把数据弄出来”、“弘讯的屏能不能直接读数据”、“我们想统计每台机器的稼动率怎么弄最省事”这篇就把我实际干活的全流程摊开来写一遍包括硬件怎么接线、网络怎么规划、地址表怎么找、程序怎么写、数据怎么校验以及这些年在现场踩过的大大小小的坑。你看完之后至少能对接下来的事情心里有底哪些能自己干哪些必须找厂家卡点卡在哪里。要说明的是不同年份出厂的海天注塑机搭配的弘讯控制器版本不完全一样固件和通信板卡配置也可能有差异。我会按最常见的配置来讲同时把排查思路一并给你这样你遇到“不一样”的时候也能自己顺着线索查下去。2. 先摸清底细弘讯控制器给了我们什么通信接口2.1 弘讯控制器在海天机上的角色海天注塑机的控制系统历来多品牌混用常见的有弘讯、科腾、欧姆龙甚至部分老机器是海天的自研系统。其中弘讯又称“弘讯科技”英文标识常见为 Hungta、Hitech 或“弘讯塑机控制器”在海天的机型上占有量很大尤其是中低吨位机型例如 MA 系列、SA 系列、JU 系列里面都能见到它的身影。弘讯控制器在整套系统里做的事情非常多采集各个温度区的热电偶信号控制料筒加热接收压力传感器、位移传感器、编码器的信号控制射胶、保压、冷却、顶出整个循环动作还要处理开合模的行程开关信号。所以它本身就是一台专用的工业控制计算机里面已经攒了一大堆生产过程数据我们要做的只是把这些数据从它的通信口“掏”出来。2.2 控制器上找通信硬件的几个位置你要采集数据第一步不是写程序而是先弄清楚手头这台机器上有没有通信硬件。弘讯控制器的通信能力通常由以下几部分承载控制器主板上的通信接口常见的有 RS232、RS485部分机型配了以太网口。如果主板上已经直接集成了以太网口那就省事很多直接用网线接交换机即可。扩展通信板卡很多海天机出厂时只带了串口以太网口是选配的。弘讯的扩展板卡常见型号有以太网卡、Profibus 卡、CAN 卡等。订货时只要告诉厂家“海天注塑机、要配弘讯的以太网通信板卡”他们就能给对应型号。操作员面板背后的接口弘讯的操作屏和控制器主机之间也有通信线路有些数据直接从屏后面的串口或网口引出也是一种办法但不建议优先考虑这条路因为搞不好会影响人机界面的正常运行。判断这台机器到底带不带以太网口最直接的办法是看机器控制柜侧面或者操作台后面有没有一个网口插座检查控制器型号标签上的料号也很有帮助。我遇到过不少工厂机器买了五年一直以为没有网口结果后来发现网口被一个塑料堵头盖住了。2.3 以太网和串口怎么选弘讯控制器支持的数据采集通道通常有两条路可走串口RS232/RS485优点是老机器也有、简单可靠缺点是通信速率低、布线距离受限而且串口可能被调试终端占用你需要和现场调试人员协商。以太网口Modbus TCP优点不用说速率高、可组网、能接入车间局域网或工厂数据专网是目前的主流选择。只要机器能加装以太网口我建议优先选以太网。原因很简单现在哪怕是一个小车间也基本有交换机网络走 Modbus TCP 协议可以一台电脑采集几十台机器后续扩展也容易。串口方案往往只能一点对一点或者一条总线挂几台维护麻烦排查故障也更费劲。提示如果你们车间网络环境很复杂、IT 管控严格建议给注塑机数据采集单独划一个 VLAN或者使用工业交换机做物理隔离避免控制器的广播包影响办公网络也防止办公网络的病毒风暴冲击生产设备。3. 通信协议与地址映射找到数据的那把钥匙3.1 弘讯控制器遵循的 Modbus 协议基线弘讯控制器的数据通信以 Modbus 协议为主绝大多数以太网口支持 Modbus TCP串口则支持 Modbus RTU。Modbus 协议本身并不复杂核心就是“读寄存器”和“写寄存器”这么几件事。对一个不熟悉工业通信的读者我打个比方Modbus 协议相当于一栋大楼的邮政系统。每个寄存器就是大楼里的一个信箱每个信箱有固定编号。电脑想了解机器状态就写信读请求到某个信箱控制器看到后把信箱里的内容抄一份寄回来响应报文。如果想让机器执行动作比如开模、顶出就写一张纸条塞进对应的信箱写请求控制器执行完再给你回执。Modbus 里常用的对象有四种线圈Coil、离散输入Discrete Input、输入寄存器Input Register、保持寄存器Holding Register。弘讯控制器对外提供的数据绝大多数放在保持寄存器和输入寄存器里。对于数据采集来说你只需要掌握读保持寄存器功能码 03和读输入寄存器功能码 04这两个动作就够了。写寄存器一般用于解锁、启动、停止、切换画面等操作功能码是 06写单个寄存器或 16写多个寄存器后面我会专门讲写好处的注意事项。3.2 寄存器地址的辨识方法拿到弘讯控制器的通信协议文档后你会发现它通常给你一张地址分配表类似这样数据内容寄存器类型地址数据类型备注当前模次/周期计数保持寄存器4000116 位无符号每完成一模加 1料筒1段温度实际值输入寄存器3000116 位有符号单位 0.1℃射胶压力输入寄存器3001032 位浮点需连续读两个寄存器射胶速度设定值保持寄存器4002032 位浮点需连续读两个寄存器注意这里有个经典“坑”表格里写 40001编程的时候你填的地址是 0x0000不是 40001。因为 Modbus 协议栈会自动把 40001 映射为内部地址 030001 映射为 0x0000 也是类似道理。每个厂家写法不完全一致有的给的是“PLC 地址”有的是“协议地址”。务必确认你手里的文档表述方式否则程序里所有地址都会错位读回来的数据自然是一堆乱码。3.3 32 位数据的高低位顺序为什么经常对不上注塑机很多关键参数是 32 位浮点数射胶压力、射胶速度、开模位置、料温设定值等。Modbus 读回来的数据是两个 16 位寄存器拼出来的这里就出现 A-B-C 三种常见排序A 在前 B 在后大端、B 在前 A 在后小端、以及“B-A-D-C”这种更绕的按字交换。弘讯的文档里通常会写明“Float32 Flood Motorola 或 Intel”。如果文档没写清楚你就得自己试程序里先按普通大端解析发现数值完全离谱再看是不是要交换高低字。我这里给一个实际经验我自己遇到过的弘讯版本多数是高低字交换也就是“字交换”数据格式更像“低字在前、高字在后”。你可以在控制器上同时看到“料筒1段温度”的实际显示值再对比程序里解析出来的值做几次互换试验就能确认。注意千万别把 32 位浮点按 16 位有符号来读否则你读到的温度可能直接是几千甚至几万看着像传感器坏了其实是数据类型不对。先确认类型再谈量程这是我反复强调的一点。4. 数据模型设计思路采集什么、怎么存、给谁用4.1 先问需求再定采集点很多第一次搞数据采集的同行上来就问“能不能把弘讯控制器里所有数据都采出来”理论上可以但完全没必要。数据采回来用不上只会浪费存储、增加排查难度。我每次做项目第一步都是跟车间领导、工艺工程师、质量工程师开个小会问清楚他们要什么。以一台海天注塑机为核心通常大家关心的数据可以归成四大类生产计数类总模次数、合格品数、次品数、当前周期时间、上次周期时间等用来算稼动率、OEE 和产能。工艺参数类各段料筒温度、射胶压力、射胶速度、保压压力、开合模位置、锁模力等用来做工艺追溯一旦发生质量事故能还原当时的状态。报警与状态类当前报警代码、最近报警时间、报警历史用来做设备故障分析和保养提醒。能耗类部分机型有电表信号输入能读到电流、电压、功率等用来做单件能耗分析。把这些需求理清楚之后再做一张《采集点位清单》每一行记录点位名称、寄存器地址、数据类型、量程、采样周期、存储策略。有了这张单子后续编程、调试、验收都有依据不会变成“采了一堆数据但谁的报表都做不出来”。4.2 工程量的换算最容易出错的一步弘讯控制器存储的数据大多是原始数值不一定直接是工程单位。例如温度寄存器数值单位可能是 0.1℃读出来 320 表示 32.0℃压力寄存器数值可能是 0.1 bar 或 0.1 MPa需要按比例换算位置寄存器数值可能是 0.1 mm也可能是 0.01 mm速度值可能是百分比0-100%也可能是 mm/s。我的做法是在采集程序里统一换算成标准工程单位后再存入数据库不在报表层再做一遍换算。否则报表开发人员每用一次就要处理一次原始值很容易算错。比如温度统一存成摄氏度压力统一存成 MPa位置统一存成 mm。还有一个细节模拟量通道的量程设置。有些信号是通过硬接线接到控制器 AI 模块上的比如压力传感器的 0-10V 对应 0-175 bar这个对应关系需要与电气原理图、传感器铭牌、弘讯系统参数里的“量程设置”三处对照不能只看一处。我碰到过一台机器换过压力传感器之后量程变了但控制器参数没改结果所有压力数据偏高了 20%整个月的工艺追溯数据都是错的。4.3 状态量采集与位映射除了数值型数据弘讯控制器里还会有一批“状态字”比如当前处于什么动作阶段合模、射胶、保压、冷却、顶出、有没有报警、处于自动还是手动模式。这些状态通常是以 16 位二进制位的形式存在一个寄存器里每一位代表一个状态。比如寄存器地址 0x0300 的 bit0 是“合模到位”bit1 是“射胶中”bit2 是“报警中”等等。在编程时可以用位运算把这 16 个状态一次性读出来再按位拆解。这在 C#、Python、Node-RED 里都很容易实现。需要留意的是状态位和动作阶段并不是互斥的某些时刻可能多个 bit 同时为 1比如“射胶中”和“压力到达”同时成立。处理时不要用 if-else 链而是用独立判断每个 bit 的方式。5. 采集程序开发从上位机读到数据库的完整链路5.1 开发语言与库的选择数据采集程序的技术栈很灵活我常用的是 Python 和 C# 两种Python适合快速开发、调试灵活第三方库多跑在 Windows 或者 Linux 工控机上都可以缺点是部署时需要在目标机器上装 Python 环境有人嫌麻烦。C#.NET适合 Windows 环境可以编译成独立 exe部署相对方便Modbus 库可用 HslCommunication 或 NModbus。Node-RED如果现场已经有物联网网关或者边缘计算盒子用它做数据采集很省事天然带 MQTT 和数据库节点。我这里以 Python 为例因为代码直观、容易理解你自己换成其他语言思路也一样。使用 pymodbus 库进行 Modbus TCP 通信是比较主流的选择。5.2 最小可运行的读取示例下面的代码实现了一台机器的 4 个寄存器读取并打印出解析后的数据。你可以把它当成一个“冒烟测试”先验证网络通了、地址对了再扩展成完整的采集服务。from pymodbus.client import ModbusTcpClient client ModbusTcpClient(192.168.1.10, port502, timeout5) if not client.connect(): print(连接失败请检查 IP、端口、网线) exit() # 读保持寄存器从地址 0 开始连续读 10 个 rr client.read_holding_registers(address0, count10, slave1) if rr.isError(): print(读取失败:, rr) exit() registers rr.registers print(原始寄存器值:, registers) # 示例假设地址 0 是料筒1段温度单位 0.1℃ temp registers[0] / 10.0 print(f料筒1段温度: {temp} ℃) # 示例地址 1-2 是射胶压力32位浮点低字在前 import struct pressure_raw struct.pack(HH, registers[1], registers[2]) pressure struct.unpack(f, pressure_raw)[0] print(f射胶压力: {pressure} MPa) client.close()注意slave1这个参数在 Modbus TCP 中一般认为设备地址默认为 1但弘讯有些以太网网关里也可能需要配置站号。如果读取报错或者数据不对检查一下控制器通信参数设置里的“站号”是不是 1。5.3 轮询策略与扫描周期注塑机一个生产周期短则十几秒长则几分钟。数据采集没必要毫秒级扫描那只会增加控制器通信负担还可能被工业交换机或防火墙当成异常流量。常规建议核心工艺参数温度、压力、位置每 1-2 秒采集一次计数数据和状态位每 2-3 秒采集一次报警信息可以做即时查询控制器报警发生时主动推送给上位机或者程序检测到报警位变化后主动读取报警内容。如果一台采集终端要同时采集多台机器不要把所有机器的请求集中在同一时刻发出否则交换机会瞬间拥塞控制器响应也会抖动。正确做法是把每台机器的采集时刻错开例如 30 台机器每台间隔 200ms 轮询这样整个周期也就 6 秒互不冲突。轮询命令本身也要控制单次长度。Modbus 协议规定一次最多读 125 个保持寄存器但实际过程中读得太多控制器处理时间变长反而容易超时。我通常单次不超过 50 个寄存器把一个设备的数据拆成 3-4 个报文分时读取可靠性明显提升。5.4 写操作的权限管理与风险控制数据采集不只是读很多场景下还需要写。比如 MES 下发生产任务时要把机台设定参数写进控制器或者远程控制开模、顶出。写操作一定要慎之又慎这是我在项目里一而再、再而三强调的。这里给出几条铁律写操作前必须在程序里做权限校验区分“只读采集账号”和“操作员账号”不能用同一个账号跑读写逻辑写操作必须记录日志谁在什么时间、从哪台电脑、写了哪个地址、写了什么值对关键动作如锁模、射胶、顶出要加硬件确认信号或二次确认按钮不可直接通过 MES 单条指令触发写参数前先读回校验确认写入成功之后再更新数据库里的状态。另外弘讯控制器一般有“远程/自动”运行模式的开关有些动作只有在特定模式才允许下发。写之前要检查模式状态避免在手动调试状态下误触发动作造成安全事故。6. 数据质量与异常处理采得回来更要采得准6.1 坏值判断与数据清洗Modbus 通信偶尔会出现丢包、抖动或者控制器主动拒绝访问的情况这在工业现场很常见。如果程序不做异常处理数据库里就会出现一堆“0”、“65535”或者跳变离谱的值报表根本无法使用。建议在采集端做下面三类判断通信异常连续 N 次读取超时或返回错误程序自动记录“断线日志”并重新连接。如果持续断线发送告警到短信或企业微信。量程越限读到温度 500℃压力 300 MPa 这种明显超物理上限的值直接丢弃或者标记为“坏值”不影响统计均值。变化率异常温度不可能在 1 秒内从 30℃ 跳到 500℃如果在程序里检测到这种变化说明数据源可能有问题先把变化率异常标记出来再让工艺人员排查传感器或控制器。6.2 断线续传与本地缓存车间网络不可能永远稳定尤其是老厂房改造项目交换机不稳定、网线老化、控制器长时间运行死机等情况都可能出现。如果采集中断 10 分钟生产数据就少 10 分钟OEE 算出来就偏了。我常用的方案是在采集终端本地放一个轻量级数据库SQLite或者直接写 CSV 文件采集程序实时写本地定时或实时转发到中心服务器。网络断了就继续写本地恢复后自动补传。这个思路叫“断点续传”实现起来不复杂但能救很多项目。数据库选型上单体工厂数据量不大用 PostgreSQL 或 MySQL 就足够。如果后续要做大数据分析再加一步把历史数据同步到列式存储或数据湖即可不需要一开始就把架构搞得很重。6.3 设备重启后的自动恢复与上电辨识注塑机不可能全年无休地转保养要停机换模具要停机有时候半夜设备重启。采集程序必须做到控制器重启后能自动重新连上而不需要人工干预。另外还有一个容易忽视的问题如果多台机器 IP 是 DHCP 自动获取的重启后 IP 可能变了。注塑机控制器默认用固定 IP 还是自动获取不同厂家配置差别很大。我建议在网络规划阶段就固定每台机器的 IP 和 MAC 地址做好台账。如果现场有 DHCP 地址漂移隐患还有一种更保险的办法是采集终端通过“设备标识”来辨识设备——弘讯控制器一般有一个设备号或设备标识寄存器采集程序连上后先读设备号跟台账比对确认“这确实是 3 号机”再开始采集。这一步能避免因为 IP 冲突导致数据错乱到别的机器上。7. 网络架构与现场施工的避坑经验7.1 一台终端采多台的组网方式小车间 10 台以下机器用一台普通工业交换机就够。如果是 30 台以上的规模建议按区域划分多台交换机再汇聚到一台核心交换机必要时上环网。弘讯控制器支持 Modbus TCP理论上同一时刻允许有多个上位机并发访问但实际测试中发现访问并发数过大时控制器的响应速度会下降。因此同一台控制器只允许一台“主采终端”长期轮询其他应用需要数据时向主采终端要或者通过数据库中间表拿数据不要让 MES、Andon 系统、报表系统全部直连控制器。7.2 网线和接地项目 80% 的问题都出在这里工业现场的电磁环境比办公室恶劣得多。注塑机的伺服驱动器、变频器、加热圈都是干扰源。网线必须使用工业级屏蔽双绞线至少 Cat5e推荐 Cat6接头要做好屏蔽层接地。如果控制器侧只是普通网口不具备接地条件那至少在交换机这端做好接地并用金属外壳工业交换机。串口方案如果采用 RS485记得 A/B 线要双绞屏蔽层单端接地末端要接 120Ω 终端电阻。弘讯的串口默认接线方式不是统一的需要看控制器侧接线端子上的丝印标注。7.3 数据采集中遇到的三个高频故障我整理一下现场最常见的三个问题你可以当成排查清单用故障现象可能原因排查步骤网线插上但 Ping 不通控制器 IP 与电脑不在同一网段以太网卡没启用网口被禁用检查控制器通信设置里的 IP/掩码用 IPConfig 对比换一根确认好的网线再试能 Ping 通但 Modbus 读取超时站号不对端口号不是 502控制器通信负载过高有人正在对同一台机器做数据监控试试不同站号确认端口降低轮询频率用 Modbus 调试工具单条读取对比数据读出来但数值抖动大通信受到干扰电源不稳24V 开关电源需要滤波模拟量信号线没有屏蔽检查布线是否贴近动力线加磁环确认控制器接地是否正常在程序里增加滤波/防抖处理7.4 施工时和现场人员打交道的几条建议搞数据采集的人经常忽略这一点你动的是生产设备不是 IT 服务器。现场车间主任不会因为你程序写得漂亮就高兴他只关心你“别给我把机器搞停了”。有几条不成文的规矩我这些年一直守着改动控制器通信参数前一定先拍下原来的参数照片万一有问题能恢复不要在白天生产高峰时间做需要重启控制器的变更安排在换模或保养时间段网线走线尽量远离动力电缆至少保持 30cm 以上间距交叉处要垂直穿过不要平行敷设每一台机器贴上“数据采集”标签上面写明 IP 地址和采集终端编号后续运维能省很多事。8. 从数据到报表采集完之后的最后一公里8.1 数据入库与历史存储策略采集程序把数据解析、清洗完之后要写入数据库。以 MySQL 为例最简单的表结构可以这样设计CREATE TABLE molding_data ( id BIGINT AUTO_INCREMENT PRIMARY KEY, machine_id VARCHAR(16) NOT NULL, collect_time DATETIME NOT NULL, mold_count INT, cycle_time DECIMAL(8,2), temp_barrel_1 DECIMAL(6,1), temp_barrel_2 DECIMAL(6,1), injection_pressure DECIMAL(8,2), injection_speed DECIMAL(8,2), alarm_code VARCHAR(8), is_alarm TINYINT DEFAULT 0, INDEX idx_machine_time (machine_id, collect_time) );数据不是存得越全越好。原始高频数据存 30-60 天就够了超过这个时限可以聚合统计成 1 分钟均值、5 分钟均值再长期保存。例如温度你要看趋势5 分钟均值完全足够模次数你要算产能按班次汇总就行。这样数据库不会无限膨胀查询速度也有保障。8.2 报表页面的几个实用指标数据采集最终落点是给车间用。很多工厂花了大价钱做数据采集结果报表没人看原因是报表做成了“技术人员的玩具”不是“车间管理者的工具”。我在设计报表时通常优先放这几张车间总览一屏看到每台机器当前状态运行/待机/故障/换模、今日模次、今日合格率、当前正在生产的模具编号机台详情点击任意机器看到最近 24 小时的温度曲线、压力曲线、周期时间趋势、报警时间轴OEE 与稼动率按班次、按日、按周汇总用来发现瓶颈机台工艺参数追溯输入产品批次或模具编号调出这批产品生产时段的所有关键参数。报表技术栈我推荐直接用可视化套件比如 Grafana、Superset或者国内的一些低代码 BI 工具省得自己从零写图表。重点是把“当前设备到底怎么样了”展示清楚而不是炫技术。8.3 MES 对接的两种方式如果你的工厂已经上了 MES数据采集系统需要把数据喂给 MES。常见的对接方式有两种数据库直连MES 直接读采集系统写入的数据库表。这种方式简单直接但要注意生产库的负载。API 对接采集系统提供 RESTful API 或 MQTT 接口MES 按需请求数据。这种方式解耦好、扩展性强适合中大型工厂。无论哪种方式数据字典一定要统一。比如“模次”这个字段在采集系统里叫 mold_count在 MES 里叫 production_count如果不做映射两边对账时就会很痛苦。我的习惯是建一份《数据字典》将字段名、含义、单位、枚举值定义清楚归档在项目文档里。9. 一些藏在细节里的实操心得最后再分享几个我在实际项目中慢慢总结出来的细节不一定都写在说明书里但确实能帮你少走弯路。第一弘讯控制器读取数据时建议先做一次“全量读 按点位再读”的地址验证。也就是说先用工具把 0-1000 的寄存器全扫一遍记录哪些地址有变化、哪些恒定不变。再结合控制屏上的实际显示值确认关键地址含义。这个方法在没有通信协议文档时特别管用我自己靠它逆向验证过好几台机。第二写操作切记做“回读校验”。有些控制器写寄存器时表面返回成功实际写入失败。你从数据库里看到状态是“已下发”但设备根本没动作这时候现场操作人员就会发飙。所以写操作一定要在下一个周期把对应寄存器读回来确认值确实变更了再更新状态字段。第三一定要考虑多班倒的节假日和交接班场景。注塑车间很多是 24 小时三班倒午夜 0 点的数据归属哪一班采集系统如果在凌晨没有做跨天切班处理OEE 统计就会错位一天。我处理过最头疼的一个 bug 是凌晨 0 点整的模次数据被记到前一天导致前一天产能虚高、当天产能虚低查了整整两天才发现是时区切班时间写的“24 小时内自然日”导致。第四控制器的时钟同步。弘讯控制器的系统时钟如果和上位机不一致报警时间和工艺参数时间线就对不上。每天凌晨程序自动做一次时间校准把上位机时间写入控制器或者定期手动校准一次。别小看这个细节真到追溯质量问题的时候时间对不对得上非常关键。第五项目验收时一定让使用者亲自操作。数据采集系统不是“能连通就行”而是要“用得起来”。验收时让车间主任、工艺员自己打开报表找到他们关心的数据看看能不能回答“昨天这台机为什么停了 2 个小时”这类问题。如果使用者说“找不到想看的数”说明采集点位和报表设计还没做到位你得继续优化而不是急着签字收尾。做注塑机数据采集这件事说难不算特别难说简单也绝对不简单。技术本身只是 Modbus 读写真正考验人的是对设备现场的理解、对车间生产逻辑的理解以及处理各种“意外”的经验。希望这篇从实际项目里攒出来的流程说明能让你在自己动手的时候少踩几个坑一次就把数据采上来、用起来。如果你在实施中碰到与这篇描述不一致的地方很正常设备版本千差万别重点是把握住“确认通信参数、验证地址格式、做好异常处理”这三个基本原则顺着排查思路走总能找到答案。