SoftControl
📚 使用教程

为什么你的中控指令格式不对:结束符、ASCII 与 HEX、校验和

SoftControl Team2026-08-2512 分钟阅读
RS232checksumASCIIHEXterminatorAV control protocols

线没问题,是格式不对

排除掉接线和串口参数之后,剩下的"设备不响应"几乎都归结为三件事之一:

  • 结束符——设备怎么知道你的命令结束了

  • ASCII 还是二进制——01 到底是两个文本字符还是一个字节

  • 校验和——规则用错了,或者字节序反了

这三件事都不会给你一条能读的错误信息。 设备只是无视你——这正是它们如此消耗时间的原因。 这一页把三者跨品牌并排放在一起,好让你认出自己在哪一种情况里。

物理层问题请先看交叉线与直通线。

第一部分:结束符

这件事没有行业约定。 十个协议的实际做法:

协议结束符备注
爱普生 ESC/VP21CR (0x0D)就绪时设备回一个 :
索尼 ADCPCR + LF部分世代只要 LF
LGCR
奥图码CR
PJLinkCR
明基首尾各一个 CR开头那个也是帧的一部分
Biamp Audia/NexiaLF (0x0A)不是 CR,很坑人
松下STX(0x02) … ETX(0x03)是包裹字节,不是结束符
三星 MDC无——按长度定界加 CR 会把下一个包搞坏
NEC 投影机无——按长度定界println 会追加 CR/LF 毁帧

两种失败模式

少了结束符。 设备把你的命令攥在缓冲区里,等一个永远不会来的结束标记。什么都不会发生,而且你发的下一条命令常常会被拼接到第一条后面,导致两条都失败。

多了结束符。 在三星 MDC、NEC 这类按长度定界的协议上,末尾多一个 0x0D 就是个野字节。它会破坏当前帧,或者更糟——被当成下一帧的第一个字节,产生看起来毫无规律的间歇性故障。

这类问题最常见的一个实例:用了 println 这类"打印行"调用,而不是"写字节"调用。println 会静默追加 CR/LF。在爱普生上这是对的,在 NEC 上它会毁掉整个包。

第二部分:ASCII 数字 vs 二进制字节

这是三者中最隐蔽的,因为同一个值在纸面上看起来一模一样。

手册说 Set ID 是 01 时,它可能是:

ASCII  : 字符 '0' 和 '1'  →  0x30 0x31   (两个字节)
二进制 : 数值 1           →  0x01        (一个字节)

各品牌大致对半分:

协议01 的含义为什么容易混
LG0x30 0x31 —— ASCII 数字整条命令都是文本:ka 01 01
三星 MDC0x01 —— 二进制整个包都是二进制
三星 Ex-Link二进制以 ASCII 发送不会工作
NEC 投影机二进制文本形式永远不成
奥图码ASCII 数字见下面的波浪号陷阱
爱普生 / 索尼 / 明基 / 科视 / 巴可ASCII 文本全程人类可读

从三星 MDC 转到 LG 的人会发二进制,然后得到沉默。从 LG 转到 MDC 的人会发文本 "AA11FE010111"——十二个字符而不是六个字节——同样得到沉默。 这是同一个错误的两个方向。

奥图码的波浪号陷阱

奥图码的表把开机印成十六进制 7E 30 30 30 30 20 31 0D。开头的 7E 看起来像个二进制引导字节,很容易由此推断后面也是二进制。

并不是。 7E 就是 ASCII 字符 ~,它后面全是 ASCII:30 是 0,20 是空格,0D 是 CR。把 7E 00 00 00 00 01 0D 当原始字节发出去会失败。

奥图码的文档还有第二个陷阱:它把命令写作 ~XX00 1,其中 XX 是投影机 ID 的占位符。照字面发出去,你传输的是 7E 58 58 …——字母 XX——寻址一台不存在的投影机。

第三部分:校验和

常见中控设备里出现四种不同规则。每一种都很容易手工验算,而你应该去验——因为指令表在论坛、厂商知识库和 PDF 之间转载很多年,没有人重算过。

规则 1 —— 模 256 求和(三星 MDC)

把除包头外的每个字节相加,保留低字节。

广播开机:
  0x11 + 0xFE + 0x01 + 0x01 = 0x111
  0x111 & 0xFF              = 0x11
  数据包: AA 11 FE 01 01 11

三星的表述是"超过两位时丢弃第一位数字"——是同一件事。

规则 2 —— 前序字节求和(NEC 投影机)

把校验和之前的全部相加,保留低 8 位。

开机: 02 + 00 + 00 + 00 + 00 = 0x02  →  02 00 00 00 00 02
关机: 02 + 01 + 00 + 00 + 00 = 0x03  →  02 01 00 00 00 03

开机那一帧是个值得注意的巧合:校验和恰好等于第一个字节,会让人以为是重复。关机那一帧证明了规则。

规则 3 —— 二补数(三星 Ex-Link)

校验和是那个"让整帧加起来归零"的值。

校验和 = (0x100 - 前六字节之和) & 0xFF

关机    : sum(08 22 00 00 00 01) = 0x2B  →  0xD5   ✓
HDMI 1  : sum(08 22 0A 00 05 00) = 0x39  →  0xC7   ✓
电视信号源: sum(08 22 0A 00 00 00) = 0x34  →  0xCC   ✓

正是靠这条规则,我们才能告诉你:被到处转载的 Ex-Link 开机码 08 22 00 00 00 02 D6 是错的——按规则应该是 D4。另外三条代码验证正确,所以错的是那一帧,不是规则。 见三星 Ex-Link 指令。

规则 4 —— CRC-16(Modbus RTU)

多项式 0xA001,初值 0xFFFF,而且——这是坑住所有人的地方——低字节在前追加,与 Modbus 里其他所有多字节字段相反。

从从站 1 读 1 个保持寄存器:
  帧体: 01 03 00 00 00 01
  CRC : 0x0A84
  完整帧: 01 03 00 00 00 01 84 0A
                            ^^ ^^ 先低字节, 后高字节

如果你的例程算出 0A 84,说明字节序反了,任何设备都不会应答。 见 Modbus RTU 与 TCP。

另外,巴可老款的 33 字节包要求按每台投影机的地址重算校验和——这就是为什么老巴可的通用指令表几乎从来不能直接用。

怎么判断自己撞上了哪一个

按顺序走:

1. 设备到底有没有回任何东西?

有回复——哪怕是报错——就证明线、波特率、校验位和帧格式都到达了解析器。 此刻你在调的是内容,不是连接。会告诉你原因的品牌:

品牌拒绝时的回复
索尼err_cmd
LGNG
明基Illegal format / Unsupported item / Block item
爱普生ERR

明基这个三分法是业内最有用的——Block item 意味着你的命令没错,是时机不对。

2. 完全沉默? 那就是帧从未被解析。按这个顺序查:结束符 → ASCII/二进制 → 校验和。

3. 时好时坏? 怀疑多余的结束符渗进了下一帧,或者按长度定界的协议收到了野字节。

4. 桌上好使、现场失败? 那通常不是格式问题——线长和终端电阻见交叉线与直通线。

值得养成的一个习惯

当一条公开的控制代码通不过它自己协议的校验规则时,信规则,别信表。

上面每一条校验规则,用计算器一分钟内就能验完。指令表在论坛、厂商知识库和 PDF 之间流传很多年,没有人重算过。 我们在写这些页面时,正是用这个检查抓到了一条错误代码。

用 SoftControl 控制

SoftControl 每条指令都支持文本和十六进制两种载荷,Modbus CRC 由它代算,指令测试页会把请求同时以文本、字节和十六进制三种形式显示,外加原始回复。这个三重视图正是用来区分"结束符错了"、"校验和错了"和"根本没人在听"的——这三个问题症状完全相同,解法完全不同。

协议全景见 AV 控制协议详解;在怀疑中控系统之前先用终端验证,见中控调试用的串口终端软件。

立即体验 SoftControl

免费下载,无需注册即可开始 30 天试用

免费下载查看功能

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法