自动化测试
硬件测试方案
目录
- 项目背景与目标
- 整体系统架构
- GUI界面设计详细方案
- 仪器可编程控制层(核心)
- 自动数据采集与参数提取
- 规格书自动解析与标准建立
- 历史数据库与趋势分析
- AI智能波形识别与异常检测
- 自动报告生成
- 完整测试流程与状态机
- 技术选型与依赖清单
- 项目开发阶段与里程碑
- 部署与运维
1. 项目背景与目标
1.1 传统测试痛点
| 痛点 | 影响 |
|---|---|
| 手动连接、设置、读数,每个测试点耗时5~10分钟 | 批量测试效率极低 |
| 肉眼判断波形异常(毛刺、振铃、过冲) | 主观性强,漏检率高 |
| 测试数据手工记录,格式不统一 | 追溯困难,无法做SPC分析 |
| 规格书参数人工比对 | 易错,尤其当规格版本更新时 |
| 报告手工整理,每人格式不同 | 客户审核时难以统一 |
1.2 系统目标
- 一键测试:工程师仅需连接设备并点击“开始”,后续全自动。
- 标准化:所有测试步骤、判定准则、报告格式完全统一。
- 智能化:AI辅助波形判读,规格书自动解析,趋势预警告警。
- 平台化:支持多种仪器(示波器、电源、万用表、信号源)和多种产品类型。
1.3 适用场景
- 研发阶段的设计验证(DVT)
- 生产线的在线测试(ICT / FCT)
- 质量部门的来料检验(IQC)
- 售后故障复现与分析
2. 整体系统架构
采用六层分层架构,便于模块替换与扩展。
| 层级 | 功能 | 技术组件 |
|---|---|---|
| 表现层 | GUI人机交互 | PyQt5 / PySide6,QML可视化 |
| 控制层 | 测试流程编排、状态管理 | 自定义测试引擎(State Machine) |
| 设备接入层 | 仪器连接与命令封装 | PyVISA + 各厂商VICP/LAN驱动 |
| 数据处理层 | 参数提取、波形预处理、单位转换 | NumPy, SciPy, Pandas |
| 智能分析层 | AI识别、规格解析、异常检测 | OpenCV, PyTorch, Tesseract OCR |
| 数据持久层 | 测试记录、规格库、历史趋势 | SQLite / MySQL, MinIO(波形图存储) |
架构图(文字描述)
[测试工程师] → [GUI (PyQt)]
↓
[测试引擎] → 解析用户选择的测试项,加载对应的测试序列(JSON/YAML)
↓
[设备管理器] → 根据序列指令,通过PyVISA控制示波器、电源等
↓
[数据采集器] → 读取波形数据(二进制或CSV)和测量参数(SCPI查询)
↓
[数据分析器] → 计算Vpp、Freq、RiseTime等,并做单位归一化
↓
[判定模块] → 结合规格书标准(来自DB)和历史趋势,输出Pass/Fail/Warning
↓
[报告生成器] → 填充模板,插入波形截图,输出PDF/Excel
3. GUI界面设计详细方案
3.1 主窗口布局(采用Dockable窗口)
| 区域 | 内容 | 实现说明 |
|---|---|---|
| 顶部工具栏 | 连接/断开设备、开始/停止测试、紧急停止 | 大按钮,颜色标识(绿/红/黄) |
| 左侧面板 | 测试项目树形列表(按产品/板卡分类) | 支持多选,批量测试 |
| 中央区 | 波形显示(Matplotlib嵌入) | 实时刷新,支持缩放/游标测量 |
| 右侧面板 | 实时参数数值表(Vpp, Freq, …) | 动态更新,Pass/Fail标色 |
| 底部日志 | 测试步骤日志、错误信息 | 支持保存至文件 |
| 状态栏 | 设备连接状态、当前测试进度条 | 显示剩余时间估算 |
3.2 关键界面设计细节
- 设备连接弹窗:自动扫描可用VISA资源,显示设备型号和序列号,支持手动输入地址(如TCP/IP)。
- 测试配置页:允许用户选择规格书版本(PDF自动解析后入库),选择测试项(如“上电时序”、“纹波噪声”),并可设定循环次数或批量样本数。
- 实时数据显示:以表格和仪表盘形式展示,例如电压用Gauge控件,频率用数字+趋势小图。
- 波形截图预览:每次测试自动保存截图,并缩略图显示在底部时间轴上,点击可放大查看。
- 报告预览:内置报告预览窗口,在生成前可检查内容和排版。
3.3 用户权限管理
- 管理员:可修改测试参数、规格书、仪器配置。
- 测试工程师:可执行测试、导出报告、查看历史。
- 访客:仅查看结果。
使用RBAC模型,登录采用LDAP或本地加密数据库。
4. 仪器可编程控制层(核心)
4.1 VISA通信框架
- 使用 PyVISA 作为统一抽象层,支持:
- USB (USB-TMC/ USB-RAW)
- LAN (VXI-11, HiSLIP, Socket)
- GPIB (需安装NI-488.2或linux-gpib)
- RS232 (通过VISA Serial)
- 兼容主流品牌:Keysight, Tektronix, R&S, Lecroy, Keithley, Fluke等。
4.2 设备抽象类设计(Python)
class InstrumentBase(ABC):
@abstractmethod
def connect(self, address: str, timeout=5000) -> bool: ...
@abstractmethod
def disconnect(self): ...
@abstractmethod
def query(self, cmd: str) -> str: ...
@abstractmethod
def write(self, cmd: str): ...
@abstractmethod
def read_raw(self) -> bytes: ...
class Oscilloscope(InstrumentBase):
def setup_timebase(self, scale: float, position: float): ...
def setup_channel(self, ch: int, vscale: float, vpos: float, coupling='DC'): ...
def setup_trigger(self, source: int, level: float, slope='POS'): ...
def acquire_single(self): ...
def read_waveform(self, channel: int) -> np.ndarray: ...
def measure_parameter(self, param: str, source: int) -> float: ...
def save_screenshot(self, filepath: str): ...
4.3 常用SCPI命令封装(示波器为例)
| 功能 | SCPI命令 | 示例 |
|---|---|---|
| 复位 | *RST |
|
| 自动量程 | :AUToscale |
|
| 设置水平刻度 | :TIMebase:SCALe 1e-3 |
1ms/div |
| 设置垂直刻度 | :CHANnel1:SCALe 2.0 |
2V/div |
| 设置触发边沿 | :TRIGger:A:EDGe:SLOPe POSitive |
上升沿 |
| 读取Vpp | :MEASure:VPP? CHANnel1 |
返回数值 |
| 读取波形数据 | :WAVeform:DATA? |
返回二进制字节流 |
| 硬拷贝(截图) | :DISPlay:DATA? PNG |
返回PNG图像 |
4.4 设备自动发现与连接管理
- 程序启动时自动扫描所有VISA资源,缓存设备信息。
- 支持配置常用仪器列表(存储IP或USB地址),快速连接。
- 心跳检测:每5秒查询
*IDN?,若超时则自动重连,并记录异常。
4.5 错误处理与重试机制
- 每次SCPI操作封装try-except,若超时则重试最多3次。
- 对于测量值明显异常(如NaN或超出物理范围),标记为“无效”并提示用户检查探头连接。
5. 自动数据采集与参数提取
5.1 参数读取方式
分为两类:
- 仪表内置测量(最快):使用
MEASure类SCPI命令直接读取Vpp, Freq, RiseTime等。 - 波形后处理(更灵活):下载原始波形数据(Y轴电压数组+X轴时间数组),由软件使用NumPy计算:
- Vpp = max - min
- Vrms = sqrt(mean(square))
- 频率 = 通过过零检测或FFT
- 上升时间 = 10%~90%跨度时间
- 过冲 = (max - 稳定值) / 稳定值 ×100%
5.2 波形数据解析(二进制转数值)
示波器波形数据常见格式:
- BYTE(8位)或 WORD(16位),带参考电压和缩放因子。
- PyVISA读取后,按照示波器返回的
:WAVeform:XINCrement?(时间增量)和:WAVeform:YREFerence?(参考点)等参数还原物理值。 - 示例解析函数:
def parse_waveform(raw_bytes, x_increment, x_origin, y_increment, y_origin, y_reference):
# 将字节转为整型数组(有符号/无符号根据格式)
int_vals = ...
voltages = (int_vals - y_reference) * y_increment + y_origin
times = np.arange(len(voltages)) * x_increment + x_origin
return times, voltages
5.3 多通道同步采集
- 支持同时读取多个通道(如CH1电压,CH2电流),时间对齐。
- 可配置触发源,保证多通道相位一致。
5.4 数据校验与单位转换
- 自动识别单位(V, mV, A, mA, Hz, kHz, s, ns等),统一转为SI单位后存储。
- 判异准则:若某参数超出传感器量程,立即终止测试并报警。
6. 规格书自动解析与标准建立
6.1 支持的文件格式
- PDF(含文本层):使用
pdfplumber提取表格和段落。 - PDF(扫描版/图片):使用
pytesseract(Tesseract OCR) +PIL进行文字识别,再用正则提取参数。 - Word (.docx):使用
python-docx读取表格。 - Excel (.xlsx):使用
openpyxl或pandas,最稳定。 - 纯文本/CSV:直接解析。
6.2 参数提取规则(基于正则与关键词)
建立关键词词典,例如:
PATTERNS = {
"voltage": r"(?:output voltage|vout|voltage).*?(\d+\.?\d*)\s*(V|mV)",
"ripple": r"(?:ripple|纹波).*?(\d+\.?\d*)\s*(mV|V)",
"rise_time": r"(?:rise time|tr).*?(\d+\.?\d*)\s*(ns|us|ms|s)",
"tolerance": r"±(\d+\.?\d*)\s*%",
}
提取后存入数据库的spec_limits表,结构如下:
| product_id | parameter | min_value | max_value | unit | tolerance_type |
|---|---|---|---|---|---|
| PSU-100 | Vout | 11.4 | 12.6 | V | absolute |
| PSU-100 | Ripple | 0 | 100 | mV | absolute |
| PSU-100 | RiseTime | 0 | 10 | ms | absolute |
6.3 规格书版本管理
- 每个产品可关联多个规格书版本(Rev1.0, Rev2.0)。
- 测试时选择当前有效版本,所有判定以此为准。
- 历史数据仍保留测试时使用的版本ID,方便追溯。
6.4 自动更新与审核
- 当解析到新规格书时,自动比对差异,提示管理员审核变更点。
- 变更记录审计日志。
7. 历史数据库与趋势分析
7.1 数据模型(核心表)
-- 测试记录主表
test_records (
id INT PK,
product_id VARCHAR(50),
spec_version_id INT,
tester VARCHAR(50),
test_start_time DATETIME,
test_end_time DATETIME,
overall_result ENUM('PASS','FAIL','WARNING'),
waveform_image_path VARCHAR(255) -- 存储截图文件路径或MinIO URL
)
-- 测量参数详情表
test_measurements (
id INT PK,
record_id INT FK,
param_name VARCHAR(50),
value DOUBLE,
unit VARCHAR(10),
min_limit DOUBLE,
max_limit DOUBLE,
result ENUM('PASS','FAIL','WARNING')
)
-- 规格书表
spec_limits (
id INT PK,
product_id VARCHAR(50),
param_name VARCHAR(50),
min_value DOUBLE,
max_value DOUBLE,
unit VARCHAR(10),
version VARCHAR(20),
effective_date DATE
)
7.2 历史趋势分析
- 按产品/参数/时间维度查询,绘制控制图(X-bar, R图)或箱线图。
- 自动计算Cpk(过程能力指数),若Cpk<1.33则发出预警。
- 异常检测:使用移动极差或3σ规则,自动标记离群值。
7.3 数据库选择
- 研发/单机:SQLite(轻量,无需服务端)。
- 产线/多用户:MySQL / PostgreSQL(支持并发),可配合Redis做缓存。
7.4 数据备份与归档
- 每日自动备份到NAS或云存储。
- 超过一年的数据压缩归档,但仍支持查询。
8. AI智能波形识别与异常检测
8.1 当前实现方案(基于规则+图像处理)
- OpenCV预处理:
- 灰度化 → 二值化 → 边缘检测(Canny) → 提取波形轮廓。
- 通过轮廓拟合得到波形曲线点集。
- 特征工程:
- 峰值数量、过冲幅度、振铃频率、噪声功率谱密度。
- 与理想波形(标准模板)做DTW(动态时间规整)相似度比较。
- 规则判定:
- 若过冲 > 5% → Fail
- 若振铃幅度 > 10% → Fail
- 若高频噪声超过阈值 → Warning
8.2 未来升级方向(深度学习)
- 数据集准备:收集历史测试波形截图,人工标注“正常”、“过冲”、“振铃”、“噪声异常”、“缺失”等标签。
- 模型选择:采用轻量级CNN如MobileNetV3或ResNet18,输入为波形截图(224x224)。
- 训练与部署:
- 使用PyTorch训练,导出ONNX模型。
- 推理时加载模型,对截图进行预测,输出各类别概率。
- 结合规则引擎(若模型置信度<0.8,则转为人工复核)。
- 持续学习:将人工复核后的数据回传,定期增量训练。
8.3 规格书文本理解(LLM辅助)
- 对于非结构化的规格书描述(如“上升时间应小于10ms,且过冲不超过5%”),可使用本地部署的轻量级LLM(如Qwen2.5-7B)进行信息抽取。
- 也可用于生成测试结论描述(例如:“Ripple为45mV,小于100mV,Pass;但波形存在轻微振铃,建议检查布局”),提高报告可读性。
8.4 性能优化
- GPU推理(NVIDIA CUDA)或Intel OpenVINO加速。
- 对批量测试,使用异步队列,避免阻塞主流程。
9. 自动报告生成
9.1 报告模板引擎
- 使用 Jinja2 生成HTML中间格式,再通过 WeasyPrint 或 wkhtmltopdf 转换为PDF。
- Excel报告使用 openpyxl 写入模板,支持图表嵌入。
- 报告内容:
- 封面:公司Logo、产品名称、测试日期、测试人。
- 测试配置:仪器型号、规格书版本、测试项目列表。
- 测试结果汇总表(所有参数值、限值、判定)。
- 波形截图(每个通道独立图片)。
- 趋势图(如果该产品有历史数据)。
- AI分析结论(异常描述)。
- 签名栏(电子签名)。
9.2 批量报告生成
- 支持一次测试多个样本(例如10个DUT),生成一个综合报告,包含每个DUT的独立表格和汇总统计(均值、标准差、PPM)。
9.3 自动化分发
- 报告生成后自动保存至指定网络路径。
- 可配置邮件通知(使用smtplib)发送给相关人员。
- 可上传至MES系统(通过REST API)。
10. 完整测试流程与状态机
10.1 测试引擎状态机
IDLE → CONNECTING → CONNECTED → CONFIGURING → ACQUIRING → ANALYZING → JUDGING → REPORTING → IDLE
↓ (错误)
ERROR → 重试/停止
- IDLE:就绪,等待用户操作。
- CONNECTING:尝试连接所有所需仪器。
- CONFIGURING:按照测试序列逐个设置仪器参数(时基、电压、触发等)。
- ACQUIRING:发送“单次触发”命令,等待采集完成(轮询
*OPC?)。 - ANALYZING:读取测量参数和波形数据,进行数值计算和AI推理。
- JUDGING:与规格书比较,结合历史趋势,输出每个参数结果和整体结论。
- REPORTING:生成报告并保存。
- ERROR:任一环节失败进入,可重试或跳过。
10.2 测试序列定义(JSON示例)
{
"test_name": "Power Supply Startup Test",
"instruments": {
"oscilloscope": "192.168.1.100",
"dc_power": "USB::0x1234::0x5678"
},
"steps": [
{
"step_id": 1,
"action": "set_power_output",
"params": {"voltage": 12, "current": 3}
},
{
"step_id": 2,
"action": "scope_setup",
"params": {"timebase": 0.01, "ch1_vscale": 5, "trigger_level": 6}
},
{
"step_id": 3,
"action": "acquire_waveform",
"channels": [1, 2]
},
{
"step_id": 4,
"action": "measure_params",
"params": ["VPP", "FREQ", "RISE"]
}
]
}
10.3 并行测试支持
- 对于多台相同仪器的产线,可启动多个测试实例(多进程),每个实例连接不同的仪器地址。
- 使用Redis队列管理任务分配,主控界面显示所有工位的测试状态。
11. 技术选型与依赖清单
11.1 核心框架
| 组件 | 技术 | 版本 |
|---|---|---|
| 编程语言 | Python | 3.10+ |
| GUI框架 | PyQt5 / PySide6 | 5.15+ |
| 仪器通信 | PyVISA + pyvisa-py (纯Python后端) | 1.13+ |
| 数值计算 | NumPy, SciPy | 1.24+ |
| 数据处理 | Pandas | 2.0+ |
| 数据库 | SQLite (开发) / MySQL 8.0 (生产) | |
| PDF生成 | WeasyPrint / reportlab | 60+ |
| Excel读写 | openpyxl | 3.1+ |
| 图像处理 | OpenCV-Python | 4.8+ |
| 深度学习 | PyTorch (或TensorFlow) | 2.0+ |
| OCR | pytesseract + Tesseract-OCR | 5.0 |
| PDF文本解析 | pdfplumber, PyPDF2 | 0.10+ |
| 日志 | logging + loguru | |
| 配置管理 | PyYAML, python-dotenv | |
| 任务队列 | Celery (可选,用于异步AI推理) |
11.2 开发工具
- IDE: PyCharm / VS Code
- 版本控制: Git + GitLab(CI/CD)
- 虚拟环境: Poetry / Conda
- 打包工具: PyInstaller (生成exe) / Inno Setup (安装包)
12. 项目开发阶段与里程碑
| 阶段 | 工作内容 | 预计周期 | 状态 |
|---|---|---|---|
| P0 - 基础框架 | 搭建GUI主界面,设备连接模块(PyVISA),日志系统 | 2周 | ✅ 已完成 |
| P1 - 示波器控制 | 实现示波器基本控制(时基、电压、触发),能读取截图和测量值 | 3周 | ✅ 已完成 |
| P2 - 数据采集 | 实现波形下载和参数自动读取,支持多通道 | 2周 | 🔄 联调中 |
| P3 - 测试用例管理 | 支持从Excel/CSV导入测试项,测试序列执行引擎 | 2周 | 🔄 开发中 |
| P4 - 规格书解析 | PDF/OCR解析,提取参数限值并存入数据库 | 3周 | 🔄 开发中 |
| P5 - 历史数据对比 | 建立数据库模型,实现历史查询、趋势图、自动预警 | 2周 | 🔄 开发中 |
| P6 - 报告生成 | PDF/Excel报告模板,自动填充数据 | 2周 | 📋 规划中 |
| P7 - AI识别模块 | 基于OpenCV的波形异常检测,深度学习模型训练与部署 | 4周 | 📋 规划中 |
| P8 - 系统集成测试 | 端到端测试,性能优化,文档编写 | 2周 | 📋 规划中 |
| P9 - 用户验收与部署 | 现场试运行,反馈修复,交付 | 2周 | 📋 规划中 |
总预估周期:约24周(6个月),可根据团队人力并行推进缩短。
13. 部署与运维
13.1 部署模式
- 单机版:安装在工程师PC或工控机上,使用SQLite本地数据库,适合研发测试。
- 服务器-客户端版:中心服务器部署MySQL+文件存储,客户端通过网络连接,适合产线多工位。
13.2 环境要求
- 操作系统:Windows 10/11(首选),支持Linux(Ubuntu 20.04+)。
- 仪器驱动:需安装NI-VISA或pyvisa-py(纯Python,无需额外驱动)。
- 对于USB设备,需配置相应权限(Linux下需添加udev规则)。
13.3 持续集成与更新
- 使用GitLab CI自动构建可执行文件。
- 提供自动更新功能(检查版本,下载差分包)。
- 配置远程日志收集(ELK或Sentry),便于故障诊断。
13.4 安全性
- 数据库连接加密(TLS)。
- 敏感配置(如数据库密码)使用环境变量或Windows凭据管理器。
- 操作日志记录所有用户的动作,满足审计要求。
14. 项目价值与展望
- 短期价值:测试效率提升70%以上,人为错误归零,报告规范化,客户满意度提升。
- 中期价值:积累大量测试数据,可开展质量预测、良率分析,辅助研发改进设计。
- 长期价值:AI模型持续进化,逐步实现全自动“黑灯测试”;可与MES、PLM系统深度集成,成为企业数字化制造的核心环节。
本方案文档版本 V2.0,最后更新于2026年7月。

浙公网安备 33010602011771号