4、核心库选型与安装:pyvisa、pyserial、numpy、pandas、openpyxl

好,咱们开始搭建真正的「武器库」了。

前面几章我们把框架思路理清了,环境也配好了。但光有Python解释器,你什么都干不了。就像你买了台车床,没装刀具,怎么加工零件?

这一章,我就带你把这五把「核心刀具」装上去。它们分别是:pyvisa(仪器控制)、pyserial(串口通信)、numpy(数据处理)、pandas(数据管理)、openpyxl(报表生成)。

这五个库,几乎覆盖了TPMS产线测试的全部需求。我个人习惯是,不管项目大小,先把这五个装上再说。为什么?你往下看就明白了。

4.1 pyvisa:让电脑和仪器「对话」

先说说pyvisa。它是Python和仪器之间的「翻译官」。

TPMS产线里,你肯定要用到频谱仪、信号发生器、功率计这些设备。怎么让电脑控制它们?靠的就是VISA协议。而pyvisa,就是Python里最成熟的VISA实现。

核心作用:通过GPIB、USB、LAN、RS232等接口,向仪器发送SCPI命令,并读取返回值。

安装很简单:

pip install pyvisa

但注意,光装pyvisa还不够。你还需要一个「后端」——也就是VISA的驱动程序。我推荐用NI-VISA或者PyVISA-py。我个人习惯用PyVISA-py,因为它纯Python实现,不用装NI那套庞大的驱动包。

pip install pyvisa-py

装完之后,验证一下:

import pyvisa
rm = pyvisa.ResourceManager('@py')
print(rm.list_resources())

如果输出一个列表(哪怕为空),就说明安装成功了。

避坑指南:我曾经在产线调试时,发现pyvisa死活连不上仪器。折腾了半天,最后发现是忘了指定后端。默认用的是NI-VISA,但我的电脑没装。改成'@py'就好了。所以,记得在ResourceManager里显式指定后端。

4.2 pyserial:串口通信的「老黄牛」

TPMS产线里,很多设备还是走串口的。比如一些老式的传感器测试夹具、烧录器、甚至某些定制化的通信模块。

pyserial就是Python里操作串口的标准库。它稳定、轻量、文档齐全。说白了,它就是串口通信的「老黄牛」,任劳任怨。

pip install pyserial

基本用法也很直观:

import serial

ser = serial.Serial(
    port='COM3',
    baudrate=115200,
    timeout=1
)
ser.write(b'AT\r\n')
response = ser.read(100)
print(response)
ser.close()

嗯,这里要注意:串口参数一定要和你的设备匹配。波特率、数据位、停止位、校验位,错一个都不行。

警告:串口是独占资源。一个程序打开了COM3,另一个程序就打不开了。我在产线调试时,经常遇到「端口被占用」的问题。后来我养成了一个习惯:每次用完串口,一定要显式调用ser.close()。或者用with语句,自动释放资源。

4.3 numpy:数据计算的「发动机」

TPMS测试会产生大量数据。比如频率偏差、功率值、温度曲线……这些数据如果一个个用Python原生列表去算,效率太低了。

numpy就是来解决这个问题的。它底层用C语言实现,计算速度比纯Python快几十倍甚至上百倍。你想想看,产线上每秒钟可能要处理几百个测试点,没有numpy,你的程序会卡成PPT。

pip install numpy

安装后,你可以这样用:

import numpy as np

# 假设这是从仪器读回来的100个频率值
freq_data = np.array([315.0, 315.1, 314.9, 315.2, ...])
mean_freq = np.mean(freq_data)
std_freq = np.std(freq_data)
max_freq = np.max(freq_data)

你看,一行代码就能算均值、标准差、最大值。如果用原生Python写,至少得写个for循环。

个人经验:我在做TPMS产线测试时,经常需要做「滑动平均滤波」。用numpy的convolve函数,一行代码就能实现。如果用纯Python写,至少要十几行,而且容易出bug。所以,numpy不是「锦上添花」,而是「雪中送炭」。

4.4 pandas:数据管理的「瑞士军刀」

数据算出来了,怎么管理?怎么筛选?怎么分组?

pandas就是干这个的。它提供了DataFrame这种数据结构,让你像操作Excel表格一样操作数据。说实话,我自从用了pandas,就再也不想用Excel手动处理测试数据了。

pip install pandas

举个例子,假设你有1000个TPMS模块的测试结果:

import pandas as pd

data = {
    'serial_no': ['TPMS001', 'TPMS002', ...],
    'freq': [315.0, 315.1, ...],
    'power': [10.2, 10.5, ...],
    'result': ['PASS', 'FAIL', ...]
}
df = pd.DataFrame(data)

# 筛选出所有FAIL的模块
fail_df = df[df['result'] == 'FAIL']
print(fail_df)

你看,筛选、分组、排序、统计,pandas都提供了非常简洁的API。产线上经常要统计良率、分析不良原因,pandas就是最好的工具。

核心作用:pandas让你从「手动处理数据」变成「自动化处理数据」。它和numpy配合使用,一个负责计算,一个负责管理,天作之合。

4.5 openpyxl:报表生成的「最后一公里」

数据算好了,管理好了,最后一步是什么?出报表。

产线上,测试结果最终要生成Excel报表,发给生产主管、质量工程师、甚至客户。openpyxl就是Python里操作Excel文件最成熟的库。

pip install openpyxl

基本用法:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "TPMS测试报表"

# 写入表头
ws['A1'] = '序列号'
ws['B1'] = '频率(MHz)'
ws['C1'] = '功率(dBm)'
ws['D1'] = '测试结果'

# 写入数据
ws.append(['TPMS001', 315.0, 10.2, 'PASS'])
ws.append(['TPMS002', 315.1, 10.5, 'FAIL'])

wb.save('TPMS_test_report.xlsx')

openpyxl还支持设置单元格样式、合并单元格、插入图表等高级功能。我一般用它生成带条件格式的报表——PASS的标绿色,FAIL的标红色,一目了然。

注意:openpyxl只能操作.xlsx格式的文件。如果你还在用老旧的.xls格式,需要换用xlrd/xlwt库。不过现在产线基本都升级到.xlsx了,所以openpyxl是首选。

4.6 一次性安装所有库

好了,五个库都介绍完了。你当然可以一个一个pip install。但我个人习惯是,写一个requirements.txt文件,然后一次性安装:

pyvisa==1.13.0
pyvisa-py==0.6.1
pyserial==3.5
numpy==1.24.3
pandas==2.0.3
openpyxl==3.1.2

然后执行:

pip install -r requirements.txt

这样既方便,又能保证版本一致。产线上最怕的就是「在我电脑上能跑,在你电脑上跑不了」。用requirements.txt锁定版本,能避免很多麻烦。

4.7 验证安装是否成功

最后,写一个简单的验证脚本,确保所有库都能正常导入:

import pyvisa
import serial
import numpy as np
import pandas as pd
import openpyxl

print("所有核心库安装成功!")
print(f"pyvisa版本: {pyvisa.__version__}")
print(f"numpy版本: {np.__version__}")
print(f"pandas版本: {pd.__version__}")
print(f"openpyxl版本: {openpyxl.__version__}")

如果没有任何报错,恭喜你,武器库已经搭建完毕。下一章,我们就开始真正动手写代码了。

避坑指南:我曾经在产线部署时,发现某台电脑的pandas版本是1.3.0,而我的代码里用了2.0才有的特性。结果程序直接崩溃。从那以后,我每次部署前都会跑一遍这个验证脚本,确保版本一致。这个习惯救了我很多次。

好,这一章就到这里。五个库,各有各的用途,缺一不可。你想想看,没有pyvisa,你怎么控制仪器?没有pyserial,你怎么和串口设备通信?没有numpy和pandas,你怎么处理海量数据?没有openpyxl,你怎么出报表?

所以,别嫌麻烦,老老实实把这五个库装好。下一章,我们开始写第一个真正的产线测试脚本。