电子秤利用Websocket做为Client向MES系统推送数据
从整体架构、关键技术、客户端实现、数据触发机制、安全和可靠性等角度,分模块详细介绍“电子秤作为 WebSocket 客户端向 MES 系统推送数据,点击秤上键盘触发发送”的内容与技术方案。
一、系统架构概览
-
电子秤端
-
硬件:内置称重传感器、主控 CPU(或 MCU)、以太网/Wi-Fi 通信模块、按键扫描电路、LCD/LED 显示屏。
-
软件:嵌入式操作系统(如 Linux、RTOS),运行 WebSocket 客户端模块、键盘扫描和业务逻辑程序。
-
-
网络层
-
电子秤通过有线以太网或 Wi-Fi 与 MES 服务器网络交换机互联。
-
使用 TCP/IP 协议栈承载 WebSocket(基于 TCP)。
-
-
MES 系统端
-
提供 WebSocket 服务端接口,接收各电子秤客户端的连接与消息。
-
负责校验数据、持久化、下发后续指令或反馈。
-
-
运维及监控
-
网络监控:设备连通性、带宽、丢包。
-
应用监控:WebSocket 连接状态、心跳、消息异常统计。
-
┌───────────┐ WebSocket ┌───────────┐│ 电子秤A │ ───────────────►│ MES ││ (Client) │◄─────────────── │ (Server) │└───────────┘ 双向通道 └───────────┘ ↑ ↑ │ └──– 键盘触发“发送”按钮 └──– 称重传感器采样
二、关键技术选型
三、WebSocket 客户端实现
-
连接建立
-
在秤启动或网络恢复后,启动 WebSocket 客户端,向 MES 提供的 URI 发起握手:
ws://mes.example.com:8080/scale // 若启用加密: wss://mes.example.com:8443/scale
-
握手成功后,保持长连接。
-
-
心跳维护与重连
-
定期(如每 30s)发送 ping 帧,等待 server 的 pong,若超过超时未收到,则认定连接断开。
-
断开后按照指数退避策略(1s→2s→4s…)重连,直到成功。
-
-
消息发送接口
-
提供一个线程安全的消息队列,将待发消息入队。
-
WebSocket 发送线程从队列取出,调用底层 send API 输出二进制或文本帧。
-
-
接收与处理
-
若 MES 需要下发配置或确认指令,可监听 onmessage 回调,解析并执行。
-
四、数据推送触发机制
-
按键扫描
-
键盘采用矩阵或单按键 GPIO 方式扫描,典型流程:
-
轮询或中断检测到“发送”键按下。
-
消抖处理(10–30ms),确认后触发应用层事件。
-
-
-
称重采样
-
平时不断采集传感器原始数据,做滤波(如卡尔曼或均值滤波),获得稳定重量读数。
-
点击发送时,读取最近一次稳定值作为此次数据。
-
-
数据封装
-
建议使用 JSON,例如:
{ \"scaleId\": \"SCALE-001\", \"timestamp\": \"2025-08-05T14:30:22+09:00\", \"weight\": 12.345, \"unit\": \"kg\", \"operator\": \"OP-1001\"}
-
若带宽或处理性能受限,可改用 Protobuf 或 CBOR 二进制协议。
-
-
发送流程(伪码)
onKeyPress(“SEND”): weight = getLatestWeight() msg = formatMessage(scaleId, timestamp(), weight, unit) wsClient.send(msg)
五、MES 系统接口及验签
-
连接 URI
-
wss://mes.example.com/scale/{scaleId}
,可将 scaleId 放在路径中,便于路由。
-
-
认证与授权
-
在 WebSocket 握手时,通过 HTTP Header 或 query string 传递 token。
-
后端校验 JWT 或 HMAC 签名,确保数据来源可信。
-
-
消息确认
-
MES 在收到数据后,可发送 ACK:
{ \"code\": 200, \"message\": \"OK\", \"receivedId\": \"UUID-xxx\" }
-
客户端可收到 ACK 后,在本地日志标记为“已送达”;若超时未收到,再次入队重发。
-
六、异常处理与日志
-
发送失败
-
当
send()
调用抛出异常或回调返回错误,需将消息重入待发队列,并记录错误原因。
-
-
连接断开
-
清理旧连接,按照心跳机制自动重连。连接过程中临时缓存待发送消息(可设置大小上限,防止内存暴涨)。
-
-
日志管理
-
本地存储:轮询保存关键事件(连接建/断、发送异常、重连次数)到循环日志文件。
-
可选:定时将日志推送到集中日志系统(如 ELK)。
-
七、安全与性能优化
-
TLS 加密
-
使用 WSS,将证书部署到秤设备:
-
可使用 Let’s Encrypt 或企业内部 CA。
-
定期自动更新证书。
-
-
-
带宽与延迟
-
JSON 文本可压缩(gzip),兼容 WebSocket permessage-deflate 扩展。
-
对重量数据做合批:若短时间内多次按键发送,合并 N 条一起发。
-
-
资源占用
-
控制心跳频率与重连次数,防止 CPU/网络抖动。
-
对高并发秤端(数百台)可统一走负载均衡,分布到多台 MES 实例。
-
通过上述方案,电子秤端以 WebSocket 客户端角色,依托“按键触发→重量采样→消息封装→长连接双向通道→数据推送与 ACK→心跳重连”这一闭环,实现对 MES 系统的实时、高可靠数据传输。