自动化脚本语言选择:Python 的优势
做车载 PHY 量产测试,选对脚本语言,比选测试设备还重要。设备买错了能退,语言选错了……整个自动化框架得重写。我在这行干了快十年,见过用 Tcl 写到吐的,也见过用 Shell 堆出三千行的“面条脚本”。
说实话,最后大家都回到了 Python 上。不是跟风,是真的好用。今天我就把 Python 在 PHY 量产测试里的几个核心优势掰开聊聊。
为什么不是 Tcl、Shell 或 Perl?
先看一张对比表,你心里就有数了。
| 语言 | 学习曲线 | 仪器控制能力 | 数据处理 | 跨平台 | 社区生态 |
|---|---|---|---|---|---|
| Python | 平缓 | pyvisa/pyserial/GPIB | numpy/pandas/统计 | 原生支持 | 最活跃 |
| Tcl | 中(语法怪) | 需要额外扩展 | 弱(靠外部命令) | 还行 | 小众 |
| Shell | 简单 | 基本没有 | 极弱(awk/sed) | Unix 系 | 大但分散 |
| Perl | 陡峭 | CPAN 模块 | 正则强但数值弱 | 一般 | 萎缩中 |
Tcl 在十年前确实流行,尤其是泰克、是德科技的仪器都自带 Tcl 示例。但我记得有一次项目,客户要求用 Tcl 写一套 10GBase-T1 的误码率测试,光处理那个字符串拼接就把我整崩溃了。换 Python 后,同样的逻辑代码量直接减半。
Python 的核心优势拆解
下面这张图概括了 Python 在 PHY 量产测试中的五大优势。你可以把它当成选型时的“决策地图”。
说白了,每个优势都不是空话。我下面结合实战例子给你讲透。
优势一:语法简洁,代码即文档
量产测试脚本最怕什么?怕别人接不住。项目换人、产线交接,脚本如果写得像天书,后面的人直接摆烂。
Python 的缩进规则和接近自然语言的语法,让你可以用很少的代码完成很复杂的事情。举个例子,读取一条 I²C 总线上 PHY 芯片的寄存器值:
# Python: 用 smbus2 库读取 PHY 寄存器 0x10
import smbus2
bus = smbus2.SMBus(1)
addr = 0x48 # PHY 设备地址
reg = 0x10 # 状态寄存器
value = bus.read_byte_data(addr, reg)
print(f"Register 0x{reg:02X} = 0x{value:02X}")
同样的功能用 C 写,你得先学 Linux I²C 驱动、ioctl、打开设备节点……产线测试员看一眼就想关电脑。
优势二:仪器控制库生态——pyvisa 是王牌
车载 PHY 测试绕不开频谱仪、示波器、信号发生器。Python 的 pyvisa 库可以直接通过 USB/GPIB/LAN 控制这些仪器。我建议你安装 NI-VISA 后再装 pyvisa,连 Agilent 的 E5071C 网分都能完美控制。
曾经有个项目,客户要求用罗德与施瓦茨的 FSW 频谱仪测 PHY 的发射模板。Tcl 示例只有几个孤立的 SCPI 命令,连错误处理都没有。我用 Python 封装了一套,加了超时重试和 Log,产线跑了两年没出过问题。
# 用 pyvisa 控制频谱仪
import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('TCPIP0::192.168.1.100::inst0::INSTR')
inst.write('FREQ:CENT 100 MHz')
inst.write('BAND 1 MHz')
trace = inst.query_ascii_values('TRAC:DATA? TRACE1')
print(f"Trace points: {len(trace)}")
优势三:跨平台——Windows + Linux 无缝切换
产线工控机大多是 Windows,但研发环境常常是 Ubuntu。Python 的跨平台特性让你一份脚本两端跑。我以前遇到过一个坑:Tcl 在 Windows 上对中文路径的支持一塌糊涂,换到 Python 后 pathlib 完美解决。
你想想看,如果脚本只能在 Windows 上跑,研发验证时得开虚拟机,多痛苦。Python 的 os、shutil、pathlib 全部跨平台,连串口通信的 pyserial 也一样。
requirements.txt,里面写上 pyvisa、pyserial、numpy、openpyxl。这样不管谁接手,pip install -r requirements.txt 就能开干。
优势四:调试便利——交互式环境 + 丰富工具
量产脚本调试最烦人的是“跑一次几分钟,调个小参数又等几分钟”。Python 的 IPython 或者 Jupyter Notebook 可以直接交互式验证 SCPI 指令,等你把每条指令都调对了,再往正式脚本里迁移。
我记得有一次调 Marvell 的 88Q2112 PHY 芯片,需要反复读 MDIO 寄存器验证链路状态。用 Jupyter 跑几个 cell,边写边看结果,十分钟搞定。如果用 C++,编译一次都够我喝杯咖啡了。
优势五:集成能力——与 MES / 数据库 / 报表无缝对接
量产测试不只是测片子,还要把结果写入 MES 系统、生成 Excel 报表、甚至发邮件通知。Python 的 openpyxl 写 Excel、pymysql 连数据库、smtplib 发邮件,全都是标准库或最流行的第三方库。
我曾经帮一家 Tier 1 改造产线,原来用 Shell 脚本把测试结果输出成 txt,再由另一个 VB 程序转成 Excel,中间还经常乱码。我全部改成了 Python,一个脚本搞定:测 PHY → 判 PASS/FAIL → 往 Excel 追加一行 → 上传 MES。代码量不超过 200 行。
一个需要注意的坑——Python 版本
print 语法错误。从那以后,我所有量产脚本第一行都写 #!/usr/bin/env python3,并在 README 里注明“仅支持 Python 3.6+”。建议你统一用 Python 3.8 或 3.10,库兼容性最好。
最后再啰嗦一句:语言只是工具,但选错了工具会让产线变成地狱。Python 不是完美的(比如 GIL 对多线程有一定限制),但在 PHY 量产测试这个场景下,它的优点完全压过了缺点。动手搭个虚拟环境试试 pyvisa 操作,你会回来点赞的。