自动化脚本语言选择:Python 的优势

做车载 PHY 量产测试,选对脚本语言,比选测试设备还重要。设备买错了能退,语言选错了……整个自动化框架得重写。我在这行干了快十年,见过用 Tcl 写到吐的,也见过用 Shell 堆出三千行的“面条脚本”。

说实话,最后大家都回到了 Python 上。不是跟风,是真的好用。今天我就把 Python 在 PHY 量产测试里的几个核心优势掰开聊聊。

为什么不是 Tcl、Shell 或 Perl?

先看一张对比表,你心里就有数了。

语言学习曲线仪器控制能力数据处理跨平台社区生态
Python平缓pyvisa/pyserial/GPIBnumpy/pandas/统计原生支持最活跃
Tcl中(语法怪)需要额外扩展弱(靠外部命令)还行小众
Shell简单基本没有极弱(awk/sed)Unix 系大但分散
Perl陡峭CPAN 模块正则强但数值弱一般萎缩中

Tcl 在十年前确实流行,尤其是泰克、是德科技的仪器都自带 Tcl 示例。但我记得有一次项目,客户要求用 Tcl 写一套 10GBase-T1 的误码率测试,光处理那个字符串拼接就把我整崩溃了。换 Python 后,同样的逻辑代码量直接减半。

Python 的核心优势拆解

下面这张图概括了 Python 在 PHY 量产测试中的五大优势。你可以把它当成选型时的“决策地图”。

Python 在车载 PHY 量产测试中的五大核心优势 Python for PHY Test 语法简洁 库生态 跨平台 调试便利 集成能力 优势之间可叠加,不互斥

说白了,每个优势都不是空话。我下面结合实战例子给你讲透。

优势一:语法简洁,代码即文档

量产测试脚本最怕什么?怕别人接不住。项目换人、产线交接,脚本如果写得像天书,后面的人直接摆烂。

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 在车载 PHY 量产测试中,不是“能凑合用的工具”,而是目前综合成本最低、可维护性最高、未来扩展性最强的选择。如果你团队里还有人坚持用奇奇怪怪的脚本语言,让他来看这段分析。

一个需要注意的坑——Python 版本

我曾经踩过的坑:2019 年有个产线项目,供应商提供的工控机预装了 Python 2.7。我写完脚本后在本地 Python 3.8 上跑得好好的,部署过去直接报 print 语法错误。从那以后,我所有量产脚本第一行都写 #!/usr/bin/env python3,并在 README 里注明“仅支持 Python 3.6+”。建议你统一用 Python 3.8 或 3.10,库兼容性最好。

最后再啰嗦一句:语言只是工具,但选错了工具会让产线变成地狱。Python 不是完美的(比如 GIL 对多线程有一定限制),但在 PHY 量产测试这个场景下,它的优点完全压过了缺点。动手搭个虚拟环境试试 pyvisa 操作,你会回来点赞的。