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,你怎么出报表?
所以,别嫌麻烦,老老实实把这五个库装好。下一章,我们开始写第一个真正的产线测试脚本。