4、通信模块测试:RS485、红外、载波(HPLC/RF)通信接口的自动化测试方案
通信模块测试,说白了就是验证电表能不能跟外界“说上话”。
我做了这么多年嵌入式测试,发现通信问题占了现场故障的六成以上。不是丢包,就是波特率对不上,再不然就是载波信号被干扰。嗯,今天咱们就把RS485、红外、还有载波(HPLC和RF)这三个接口的自动化测试方案捋清楚。
4.1 RS485接口测试:最基础也最容易翻车
RS485是电表最常用的有线通信接口。我个人习惯把它叫做“工业界的串口老兵”——稳定、抗干扰、距离远。但老兵也有老兵的脾气。
注意:RS485是半双工通信,收发不能同时进行。很多新手写测试脚本时忘了切换方向,结果数据全堵在缓冲区里。
4.1.1 自动化测试要点
- 波特率兼容性测试:电表通常支持1200、2400、4800、9600、19200bps。我建议每个波特率都跑一遍“写-读-校验”闭环。
- 帧格式验证:数据位、停止位、校验位(偶校验/无校验)必须跟协议一致。我曾经遇到一个项目,现场电表配的是偶校验,但测试脚本写的是无校验,结果通信成功率只有30%。
- 多节点冲突测试:RS485支持多机通信。挂上3-5个从机,同时发数据,看主站能不能正确解析。
4.1.2 自动化测试脚本示例(Python + pyserial)
import serial
import time
def test_rs485_baudrate(port, baudrate):
ser = serial.Serial(port, baudrate, bytesize=8, parity='N', stopbits=1, timeout=2)
# 发送读取电表地址的指令(假设协议为DL/T645)
cmd = bytes.fromhex('68 AA AA AA AA AA AA 68 11 04 33 33 34 33 16')
ser.write(cmd)
time.sleep(0.1)
resp = ser.read(20)
if len(resp) > 0:
print(f"[OK] 波特率 {baudrate} 通信成功")
else:
print(f"[FAIL] 波特率 {baudrate} 无响应")
ser.close()
# 遍历常用波特率
for baud in [1200, 2400, 4800, 9600, 19200]:
test_rs485_baudrate('COM3', baud)
小技巧:测试RS485时,最好在总线上加一个120Ω终端电阻。不然信号反射会导致误码率飙升。我吃过这个亏,排查了整整两天。
4.2 红外通信测试:光信号的“对焦”难题
红外通信,说白了就是用光波传数据。电表上的红外口通常遵循IEC 62056-21标准(也就是咱们常说的“光学接口”)。
你想想看,红外通信最大的坑是什么?是“对不准”。发射管和接收管必须对准,角度偏一点就收不到。自动化测试里,这个“对准”动作必须用机械臂或固定夹具来保证。
4.2.1 自动化测试方案
- 物理对准验证:用步进电机控制红外探头,在±15°范围内扫描,记录通信成功率最高的角度。
- 距离测试:标准要求红外通信距离≥2米(有些厂家标称5米)。我建议在0.5m、1m、2m、3m四个距离点各测100次,统计丢包率。
- 环境光干扰测试:在红外探头旁边放一盏白炽灯或LED灯,看通信是否被干扰。嗯,这个测试经常被忽略,但现场出问题最多的就是它。
4.2.2 测试数据记录表示例
| 距离(m) | 发送次数 | 成功次数 | 丢包率 | 结论 |
|---|---|---|---|---|
| 0.5 | 100 | 100 | 0% | 通过 |
| 1.0 | 100 | 99 | 1% | 通过 |
| 2.0 | 100 | 95 | 5% | 通过 |
| 3.0 | 100 | 72 | 28% | 不通过 |
关键指标:红外通信的丢包率在2米内应低于5%。超过这个值,现场运维人员会骂娘的。
4.3 载波通信测试:HPLC和RF的“信号江湖”
载波通信分两种:HPLC(高速电力线载波)和RF(微功率无线)。
HPLC走的是电线,RF走的是空气。两者各有各的脾气。我个人觉得,HPLC的测试难点在于“电力线噪声”,而RF的难点在于“多径衰落”。
4.3.1 HPLC测试方案
- 信道衰减测试:在电力线上串联不同阻值的衰减器(10dB、20dB、30dB),看HPLC模块能否正常组网。
- 噪声注入测试:用信号发生器往电力线上注入白噪声、脉冲噪声(比如模拟电钻启动时的干扰)。我遇到过最离谱的情况是,HPLC模块在50kHz附近有一个固有谐振点,一遇到这个频率的噪声就掉线。
- 跨相区测试:三相电表,A相和B相之间的HPLC信号衰减很大。必须验证模块能否跨相区通信。
4.3.2 RF测试方案
- 灵敏度测试:用射频信号源输出-100dBm到-80dBm的微弱信号,看RF模块能否正确解调。
- 多径干扰测试:在屏蔽室里放金属反射板,模拟城市环境中的多径效应。RF信号会叠加出“死点”,这个必须测。
- 同频干扰测试:在旁边放一个同频段的干扰源(比如另一个RF模块在发数据),看目标模块的误码率。
避坑指南:我曾经在RF测试中犯过一个低级错误——没关掉实验室的Wi-Fi。结果RF模块一直在跟Wi-Fi抢信道,测试数据惨不忍睹。后来才想起来,RF模块的工作频段(比如470MHz~510MHz)跟Wi-Fi的2.4GHz虽然不重叠,但谐波干扰是存在的。所以测试前,一定要清场。
4.4 自动化测试框架设计思路
说了这么多单项测试,咱们得把它们串起来。我建议用以下架构:
- 测试调度层:用Python的unittest或pytest做框架,按测试用例优先级排序。
- 硬件抽象层:把RS485、红外、HPLC、RF的驱动封装成统一的接口。比如都叫
send()和receive(),底层实现不同。 - 数据采集层:用数据库(SQLite或InfluxDB)记录每次测试的丢包率、误码率、响应时间。
- 报告生成层:自动生成HTML报告,带图表和通过/失败标记。
我的习惯:每个通信接口的测试用例,我都会加一个“边界条件测试”。比如RS485的线长超过1000米时,信号会衰减到多少?红外在强光下会不会误码?这些边界条件,往往是现场故障的根源。
4.5 总结
通信模块测试,说白了就是“发出去,收回来,看对不对”。
RS485测的是电气特性和协议兼容性,红外测的是光学对准和环境干扰,载波测的是信道质量和抗干扰能力。这三块都测透了,电表在现场才能稳如老狗。
嗯,下一章咱们聊聊“费控模块测试”,那又是另一番天地了。