TECHNICAL GUIDE

电子秤串口通讯协议解析_ 连续发送稳定应答三种模式与主流秤机协议适配 | 上海耀罡电子

同一台秤,换一种发送模式,数据格式完全不一样。本文用真实数据帧逐字节拆解,帮你避开「读到了但解析不出来」的坑。

更新于 2026-10-26 约 9 分钟读完 上海耀罡电子科技有限公司

基础参数:先把这几项对齐

五项必须两端一致

串口通讯出问题的第一排查项永远是这五项:波特率、数据位、停止位、校验位、流控。

项目 常见配置 说明
波特率 4800 / 9600 / 19200 / 115200 两端必须完全一致
数据位 8 位(兼容 ASCII) 少数设备支持 7 位
停止位 1 位 固定为 1
校验位 无校验(None) 部分型号支持奇/偶校验
流控 无 秤机一般不用硬件流控
帧格式 n, 8, 1 最常见的标准配置

为什么双方都是 9600 仍然不通

一个反直觉但很常见的情况:**波特率一致但数据位或校验位不一致,依然全是乱码。

因为接收端按自己的配置去切分比特流,起始位对上了但每字符的位数切错了,解出来的就是完全无意义的字节。

排查时用 stty -F /dev/ttyS1 -a 读出实际配置,再去查秤机说明书里的出厂默认值,逐项核对而不是只看波特率。POS 类秤机有时会用奇偶校验,这是最容易漏的一项。

三种发送模式的本质差异

为什么不发送 / 连续 / 稳定 / 应答

电子秤的串口输出有四种模式,这个设计直接对应不同的业务场景:

模式 行为 典型用途
不发送 只在收到指令时回复 省电的待机场景
连续发送 不停地把当前重量推出来 实时监控、动态显示
稳定发送 重量变化小于阈值后才发送 避免读数跳动干扰
应答发送 收到查询指令才回一帧 主从通信、精确读取

连续发送:简单但吵

连续模式下,秤机会以固定周期不停推数据。好处是主机随时能拿到最新值,缺点是数据量大且会持续占用串口带宽。

如果主控同时还要跑别的串口设备,一条持续输出的串口会挤占中断处理时间,这是嵌入式设备里很典型的「一个口把整机拖慢」的问题。

应对方式是用子口独立配置的串口扩展芯片,把秤机放在专门的子口上,让主控只在该口有数据时处理,不影响其他通道。

稳定发送:更实用

稳定模式只在重量变化小于预设阈值时才发送一帧。对收银、计价这类「人放上去才要看数字」的场景,这是最合理的模式——读数稳定不跳,总线负载也低。

代价是主控拿不到严格意义上的「实时」值,需要自己加超时判断(比如超过 N 毫秒没收到就认为秤已归零或异常)。

应答发送:最可控

应答模式是主控发一帧查询、秤机回一帧数据。这种方式时序完全由主控掌握,最适合多设备共存的系统。

缺点是主控必须实现超时与重传逻辑,并且要保证帧格式与秤机一致——不同厂商的应答指令差别很大,有的用字符指令,有的用二进制码。

数据帧逐字节拆解

一个真实的大华计价秤帧

以大华计价秤的连续发送模式为例,实际收到的字节流是这样的:

20 31 30 32 30 20 20 39 38 37 36 35 20 20 31 30 30 37 34 30 0A 0D

逐段拆开看:

字节 ASCII 含义
20 31 30 32 30 1 0 2 0 净重 1.020 kg
20 20 (两个空格) 间隔位
39 38 37 36 35 987.65 单价
20 20 (两个空格) 间隔位
31 30 30 37 34 30 1007.40 总价
0A 0D CR LF 协议尾

两个必须注意的设计约定

第一,不亮的位用空格(0x20)填充。这是 ASCII 数字串的常规做法——定长字段靠「固定宽度 + 空格填充」来对齐,而不是靠分隔符。解析器如果直接 trim 掉空格再按位置取字段,在价格字段变短时就会错位。

第二,协议尾固定是 0A 0D(CRLF)。这是帧同步的锚点。解析器应该以 CRLF 作为帧结束标志,而不是按固定长度硬截——不同模式下字段长度不同(连续模式 21 字节,稳定模式只有 7 字节),按长度截断必然在某些模式下出错。

净重位数的特别说明

注意上面的净重是 5 位。在称重模块的实际实现里,净重字段会按秤的量程与分度值来确定宽度,可能是 5 位、6 位或 7 位,并且要处理前导空格与小数点位置不固定的情况。

大华协议在净重前会带一个标志位(G 表示毛重、N 表示净重),应答模式里还会带 KG 单位标识,例如 02 20 20 31 2E 30 32 30 20 4B 47 表示净重 1.020 KG。解析时必须逐字段按位取,不能假设固定偏移。

主流秤机协议特点对照

各家差异在哪

秤机品牌 协议特点 适配要点
大华 定长 ASCII + 空格填充 + CRLF 结尾,有连续/稳定/应答三模式 按位取字段,以 CRLF 定帧
顶尖 ASCII 输出,常带毛重/净重标志与单位 注意标志位与单位位
迪宝 常见格式含状态位与多组固定字段 按状态位判断数据有效性
七华 多种可选格式,含金额与累计字段 需先确认出厂设定的格式编号
耀华等通用仪表 常见单行 ASCII 重量值 相对简单,注意小数点位数

为什么必须做多协议适配

现实情况是:同一款收银秤的软件,要能对接不同品牌的秤机。客户手里可能已有存量秤机,或者不同门店采购了不同批次的秤。

如果方案只支持一种协议,客户的设备就被绑死了。所以协议适配层的设计目标应该是「配置化」而不是「硬编码」——把帧长、字段位置、校验方式做成可配置参数,新增一种秤机时只需要增加一份配置,不需要改主流程代码。

我们的称重模块程序(C0.05.04)就是按这个思路做的,兼容顶尖、大华、迪宝、七华等主流秤机通讯格式。

秤机侧的设置入口

很多协议问题不在程序侧,而在秤机没有配成正确的模式。

以大华计价秤为例,需要通过按键组合进入通讯设置(清除键 + 数字键序列),再选择 00 不发送 / 01 连续发送 / 02 稳定发送 / 03 应答发送,最后确认保存。

一个实用的建议是:在产品的说明书或丝印上,直接印上进入通讯设置的操作步骤和当前模式。现场调试时能省下大量扯皮时间。

解析器的设计要点

推荐的接收结构

解析器建议用「状态机 + 环形缓冲」的写法,而不是每次 read 就假定能拿到一整帧:

c
/* 环形缓冲区,接收线程写入,解析线程按 CRLF 切帧 */
typedef struct {
    uint8_t  buf[256];
    uint16_t head, tail;
} ring_buf_t;

/* 解析流程:
   1. 累加接收字节到环形缓冲
   2. 扫描 CRLF,定位完整帧
   3. 提取帧(去掉 CRLF)
   4. 按协议配置解析字段
   5. 校验有效性后更新当前重量
*/

这样做的三个好处:一次 read 可能只收到半帧(重试即可),也可能一次收到多帧(循环取即可);字节级的丢包不会导致整帧错位;解析逻辑与接收逻辑解耦,测试时可以手工喂帧字符串。

别忘了有效性判断

解析出数字不等于数据有效。秤机会输出负值(表示反向)、超量程错误、以及无效字符(如秤机开机自检时的乱码)。

建议在解析层同时输出三个状态:当前重量、有效标志、错误码。上层业务根据有效标志决定是显示还是提示,比直接显示一个可能错误的数字安全得多。

与三键式人机交互的配合

在带显示的收银秤上,称重数据与按键操作是同一个交互流程的一部分。

我们的称重模块方案采用三键式人机交互设计,把去皮、置零、确认等操作与称重数据解析统一在同一个状态机里管理,避免称重读取与按键响应互相打断。这类交互的一致性,直接影响收银员的手感。

常见故障与排查

按现象定位

现象 最可能的原因 排查动作
完全收不到数据 秤机设为「不发送」模式 回秤机改模式设置
收到全是乱码 波特率/校验位不匹配 stty -a 逐项核对
数据能收但字段错乱 协议模式判断错误 确认是连续还是稳定模式
数据长度忽长忽短 解析器按固定长度截断 改为按 CRLF 定帧
价格字段偶尔错位 未处理空格填充 定长取位,不要先 trim
时好时坏 共地不良或屏蔽未单端接地 检查接地,缩短线长
高速时丢帧 串口缓冲区溢出 加流控或降低波特率

一个容易忽略的硬件前提

RS232 必须共地。秤机与主控之间如果只有 TX/RX 两根线而没有 GND,在实验室桌面环境下可能「碰巧能通」,拿到现场换个机箱、换个电源就完全不通。

这是典型的「实验室能跑、现场跑不通」的故障。规范做法是三线制:TX、RX、GND 必须都接。如果距离远或两端电源系统不同,则需要用隔离型 RS232 收发器或直接改用 RS485。

调试的最小闭环

准备一个串口调试助手(PC 端),按秤机出厂配置连上:

1. 用调试助手连上秤机串口,波特率/校验与说明书一致
2. 把秤机设为「连续发送」
3. 看调试助手里有没有数据滚动
4. 有数据 → 记录原始字节,转给主控侧做解析对照
5. 无数据 → 换线、换电脑口、排查秤机设置

第 4 步很关键:先用 PC 确认秤机确实在发、发的是什么格式,再拿这个字节序列去测主控。否则两边同时调,很容易陷入「到底是秤机没发还是我解析错了」的僵局。

常见问题

电子秤串口通讯的默认参数是什么?

最常见的是 9600bps、8 数据位、1 停止位、无校验(n,8,1),但也有 4800、19200、115200 的配置。关键是要逐项核对波特率、数据位、停止位、校验位,不能只看波特率——数据位或校验位不一致同样全是乱码。

连续发送和稳定发送该选哪个?

看业务需求。连续发送适合实时监控,但会持续占用串口带宽并产生大量数据;稳定发送在重量变化小于阈值时才发,适合收银、计价这类场景,读数不跳、负载也低。多设备共存的系统里,应答模式时序最可控,但主控要实现超时重传。

为什么读到的数据长度每次都不一样?

因为不同发送模式的帧格式不同。连续模式可能是 21 字节(净重+单价+总价),稳定模式可能只有 7 字节,应答模式又是另一种结构。解析器如果按固定长度截断必然出错,正确做法是以协议尾 0A 0D(CRLF)作为帧结束标志。

支持哪些秤机的通讯格式?

我们的称重模块程序(C0.05.04)兼容顶尖、大华、迪宝、七华等主流秤机通讯格式,量程覆盖 300g 到 300kg,多档分度值与双量程配置可选。如果你的秤机是其他品牌或特殊格式,可以把协议样本发给我们评估适配。

秤机连不上,先查什么?

第一件事是回秤机确认发送模式——很多「连不上」其实是秤机设成了「不发送」模式。第二件事是确认 RS232 的 GND 是否接了,实验室能通现场不通通常就是这根地线的问题。第三件事才是核对波特率等参数。建议先用 PC 串口调试助手连一次,确认秤机确实在发数据。

相关产品方案