3. 串口通信参数配置与调制解调器匹配

水下调制解调器虽然通过水声信道传输数据,但它与上位机、控制器之间的接口通常仍是标准的异步串口(UART/RS-232/RS-485)。这意味着开发者面对的第一道门槛并不是声学问题,而是串口参数能否与调制解调器"对上"。参数不匹配时,最常见的现象是:能收到零星乱码、完全收不到数据、或者发送看似成功但设备毫无响应。本节围绕波特率、数据位、停止位、校验位、流控这五个参数,说明它们各自约束什么、如何从手册中读出正确取值,以及如何验证配置是否真正匹配。

五个参数各自约束什么

异步串口没有共享时钟线,收发双方依靠约定的波特率对每一位进行采样。因此波特率是首要参数,它决定位宽,一旦偏差超过约 2%~3%,采样点就会漂移到错误位,表现为成片乱码。水下调制解调器常见的串口速率有 9600、19200、38400、57600、115200 bps,部分设备还提供 230400 或 460800。需要注意:这里的串口波特率与设备在水声信道上的"空中速率"是两个完全不同的概念,前者是电缆侧接口速率,后者是声学链路速率,手册中往往分别标注,切勿混用。

数据位通常为 8 位,少数老设备用 7 位;停止位常见 1 位,个别设备用 2 位;校验位可选无校验(None)、奇校验(Odd)、偶校验(Even)。这三者共同构成"帧格式",一般记作 8-N-1 这样的简写。水下调制解调器多采用 8-N-1,因为其上层协议(如自定义帧、Modbus、NMEA 风格语句)自身已带校验字段,串口层再加校验意义不大。

流控是最容易被忽略的一项。硬件流控使用 RTS/CTS 两根信号线,当调制解调器内部缓冲区将满时拉高 CTS 阻止上位机继续发送;软件流控使用 XON/XOFF 控制字符。水下设备在发射声波期间往往无法及时接收串口数据,若关闭流控又高速灌数据,就会丢字节。因此手册若标注支持 RTS/CTS,应优先启用硬件流控,并确认所用线缆确实连接了这两根线——很多现场故障恰恰是"配置开了流控,但线缆只接了三根线"。

串口参数匹配:从手册取值到链路验证 上位机 / 控制器 UART 配置端 波特率 115200 数据位 8 停止位 1 校验位 None 流控 RTS/CTS 帧格式简写:8-N-1 + 硬件流控 TXD → ← RXD RTS → ← CTS GND 共地 水下调制解调器 串口侧(电缆接口) 115200 bps 8 数据位 1 停止位 无校验 RTS/CTS 使能 内部缓冲 4 KB 发射期间暂停接收 水声信道侧 与串口参数无关 空中速率 2400 bps 调制方式 FH-MFSK 工作频段 20~30 kHz 帧头 + 校验字段 串口速率 ≠ 空中速率 两者分别配置、分别核对 匹配判据 ① 回显/查询命令返回完整可读字符串 ② 连续发送 1 KB 数据无丢字节 ③ CTS 在缓冲将满时正确翻转 ④ 长时间通信无累积乱码

从手册中读出正确参数

拿到一台新调制解调器,不要凭经验猜参数,而应按手册的固定位置逐项确认。通常需要查阅三处:一是"串口接口"或"电气特性"章节,给出默认波特率、帧格式与是否支持流控;二是"命令集"章节,说明进入配置态的方式(例如上电后若干秒内发送特定转义序列,或拨动某个配置引脚);三是"出厂默认值"表,列出波特率、地址、唤醒方式等。若手册给出的是可配置项,还要确认修改后是否立即生效、是否需要断电重启、是否写入非易失存储。

一个常见的实操细节是:设备出厂波特率可能是 9600,而用户程序按 115200 打开,结果一个字节都收不到。此时应先用 9600 连接,发送查询命令(如 AT 或厂商自定义的 VER?),确认通信正常后再用配置命令把波特率改为目标值,最后把上位机同步改为新速率并重新连接。顺序不能颠倒,否则会"改完就失联"。

# 示例:使用 pyserial 按手册默认值连接并查询
import serial

ser = serial.Serial(
    port="COM5",
    baudrate=9600,        # 手册默认值
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    timeout=1.0,
    rtscts=False          # 先关闭,确认线缆后再开
)
ser.write(b"VER?\r\n")
print(ser.readline())     # 期望返回型号与固件版本
ser.close()

上面这段代码的价值在于"先建立最小可信连接"。只有查询命令能稳定返回可读字符串,才说明波特率、数据位、停止位、校验位四项已经对齐;若返回的是乱码,优先怀疑波特率;若能收到完整字符但偶发错位,怀疑停止位或校验位设置;若完全无响应,则检查端口号、线序(TX/RX 是否交叉)与共地。

流控的启用与验证

确认基本帧格式后,再处理流控。若手册声明支持 RTS/CTS,应把上位机与设备两端都设为硬件流控,并确认线缆中 RTS、CTS 两根信号线真实连通。验证方法是:以较高波特率连续发送一段较长数据(例如 4 KB),同时观察是否出现丢字节。若关闭流控时丢字节、开启后不丢,说明流控确实在起作用。反之,如果开启流控后完全发不出数据,多半是 CTS 线未接或被拉死,此时应回到"仅 TX/RX/GND"的三线接法排查。

不要同时启用硬件流控和软件流控。部分设备在 RTS/CTS 使能时会忽略 XON/XOFF 字符,若上位机仍按软件流控发送 0x11/0x13,这些字节会被当作普通数据送入协议解析,造成难以定位的异常。

参数匹配检查表

下表可作为现场配置时的对照清单,字段均取自设备手册与上位机实际设置,逐项打勾后再进入联调。

参数手册取值(示例)上位机设置核对要点
波特率115200 bps115200与空中速率区分,勿混填
数据位887 位设备需确认协议字符集
停止位112 停止位会导致帧边界错判
校验位NoneNone协议层已有校验时通常关闭
流控RTS/CTSrtscts=True确认线缆含 RTS/CTS 且共地
配置态进入上电 3 s 内发转义序列按手册时序发送超时则进入数据透传态

最后要强调的是,串口参数匹配只是"电缆侧"的正确性,它保证上位机与调制解调器之间的字节流不丢失、不错位,但并不能保证水声链路本身可用。实际排障时应分层判断:先确认串口层能稳定收发查询命令,再确认设备能成功发射与接收声学帧,最后才检查上层协议的地址、唤醒与重传机制。把串口参数这一层做扎实,后续的声学与协议问题才不会互相混淆。