name: test-automation description: 用于硬件验证的自动化测试设备控制和数据采集技能,包含VISA/SCPI仪器通信、测试序列脚本编写和测量不确定度分析。 allowed-tools: Read, Grep, Write, Bash, Edit, Glob category: 测试 backlog-id: SK-018 metadata: author: babysitter-sdk version: “1.0.0”
测试设备自动化技能
用于硬件验证和特性分析的自动化测试设备控制与数据采集。
目的
本技能提供全面的电子测试设备自动化能力,支持一致且可重复的硬件验证工作流程。它支持仪器通信、自动化测试序列、数据记录和分析。
功能
仪器通信
- VISA/SCPI仪器通信协议
- 支持GPIB、USB-TMC、LAN/VXI-11和串行接口
- 仪器发现和资源管理
- 错误处理和超时管理
- 多仪器设置的连接池
示波器自动化
- Keysight、Tektronix、Rohde & Schwarz示波器控制
- 通道配置和耦合
- 触发设置(边沿、脉冲、模式、串行)
- 波形采集和传输
- 测量提取(上升时间、频率、占空比)
- 截图捕获和文档记录
频谱分析仪控制
- 频率跨度和中心频率配置
- 分辨率和视频带宽设置
- 标记操作和峰值搜索
- 轨迹捕获和数据导出
- 极限线测试和通过/失败判定
- EMC预合规测量
电源和电子负载控制
- 输出电压和电流编程
- 保护限制配置
- 序列和时序控制
- 负载瞬态生成
- 效率测量自动化
数字万用表和源测量单元自动化
- 直流/交流电压和电流测量
- 电阻和连续性测试
- 源测量单元操作
- IV曲线特性分析
- 温度系数测量
数据记录和分析
- 实时数据采集
- 统计分析(平均值、标准差、最小值、最大值)
- 数据记录到CSV、JSON、HDF5
- 时间序列趋势分析
- 警报和限制监控
测试序列脚本编写
- 顺序和并行测试执行
- 基于结果的条件分支
- 循环和迭代支持
- 测试夹具抽象
- 参数化测试用例
测量不确定度分析
- A类(统计)不确定度评估
- B类(系统)不确定度估计
- 合成不确定度计算
- 包含因子和置信区间
- GUM合规的不确定度预算
报告生成
- 自动化测试报告创建
- 通过/失败汇总表
- 测量数据可视化
- 可追溯性文档
- 导出为PDF、HTML、Excel格式
先决条件
安装
pip install pyvisa pyvisa-py numpy pandas matplotlib
可选依赖
# 用于HDF5数据存储
pip install h5py tables
# 用于高级分析
pip install scipy uncertainties
# 用于报告生成
pip install jinja2 weasyprint
使用模式
基本仪器通信
import pyvisa
# 初始化资源管理器
rm = pyvisa.ResourceManager()
# 列出可用仪器
print(rm.list_resources())
# 连接到示波器
scope = rm.open_resource('TCPIP::192.168.1.100::INSTR')
scope.timeout = 5000 # 5秒超时
# 查询标识
idn = scope.query('*IDN?')
print(f"已连接到: {idn}")
# 配置和测量
scope.write(':CHANnel1:DISPlay ON')
scope.write(':CHANnel1:SCALe 1.0') # 1V/格
scope.write(':TIMebase:SCALe 0.001') # 1ms/格
scope.write(':TRIGger:EDGE:SOURce CHANnel1')
scope.write(':TRIGger:EDGE:LEVel 0.5')
# 读取测量值
vpp = float(scope.query(':MEASure:VPP? CHANnel1'))
freq = float(scope.query(':MEASure:FREQuency? CHANnel1'))
print(f"峰峰值: {vpp:.3f} V, 频率: {freq:.2f} Hz")
scope.close()
自动化测试序列
from dataclasses import dataclass
from typing import List, Dict, Any
import time
@dataclass
class TestResult:
name: str
passed: bool
value: float
unit: str
limit_low: float
limit_high: float
class TestSequence:
def __init__(self, instruments: Dict[str, Any]):
self.instruments = instruments
self.results: List[TestResult] = []
def run_test(self, name: str, measure_func, limit_low: float,
limit_high: float, unit: str) -> TestResult:
value = measure_func()
passed = limit_low <= value <= limit_high
result = TestResult(name, passed, value, unit, limit_low, limit_high)
self.results.append(result)
return result
def generate_report(self) -> Dict:
return {
'total_tests': len(self.results),
'passed': sum(1 for r in self.results if r.passed),
'failed': sum(1 for r in self.results if not r.passed),
'results': [vars(r) for r in self.results]
}
# 示例用法
def measure_output_voltage():
return float(dmm.query(':MEASure:VOLTage:DC?'))
sequence = TestSequence({'dmm': dmm, 'psu': psu})
sequence.run_test('输出电压', measure_output_voltage, 4.9, 5.1, 'V')
测量不确定度分析
from uncertainties import ufloat
import numpy as np
class UncertaintyAnalysis:
def __init__(self):
self.measurements = []
self.instrument_uncertainty = 0.0
def add_measurement(self, value: float):
self.measurements.append(value)
def set_instrument_uncertainty(self, uncertainty: float):
"""从仪器规格设置B类不确定度"""
self.instrument_uncertainty = uncertainty
def calculate_combined_uncertainty(self, coverage_factor: float = 2.0):
# A类不确定度(统计)
n = len(self.measurements)
mean = np.mean(self.measurements)
std = np.std(self.measurements, ddof=1)
type_a = std / np.sqrt(n)
# B类不确定度
type_b = self.instrument_uncertainty / np.sqrt(3) # 矩形分布
# 合成标准不确定度
combined = np.sqrt(type_a**2 + type_b**2)
# 扩展不确定度
expanded = coverage_factor * combined
return {
'mean': mean,
'type_a_uncertainty': type_a,
'type_b_uncertainty': type_b,
'combined_uncertainty': combined,
'expanded_uncertainty': expanded,
'coverage_factor': coverage_factor
}
# 用法
analysis = UncertaintyAnalysis()
for _ in range(10):
analysis.add_measurement(float(dmm.query(':MEASure:VOLTage:DC?')))
analysis.set_instrument_uncertainty(0.001) # 规格书中的1mV
result = analysis.calculate_combined_uncertainty()
print(f"电压: {result['mean']:.4f} +/- {result['expanded_uncertainty']:.4f} V (k=2)")
使用指南
何时使用此技能
- 自动化硬件验证和特性分析
- 生产测试开发
- 设计验证测试
- 带数据采集的环境测试
- EMC预合规测量
最佳实践
- 始终在开始测试序列前验证仪器连接
- 对慢速测量使用适当的超时设置
- 实现适当的错误处理以应对仪器通信故障
- 记录测量条件(温度、湿度、设置)
- 在测试程序中包含校准验证
- 使用统计分析进行生产测试决策
流程集成
- ee-hardware-validation(所有阶段)
- ee-environmental-testing(数据采集)
- ee-emc-design-testing(预合规测量)
依赖项
- PyVISA和PyVISA-py用于仪器通信
- NI VISA或Keysight IO Libraries用于驱动程序支持
- 根据需要安装仪器特定驱动程序