测试设备自动化技能Skill test-automation

测试设备自动化技能是一个用于硬件验证的自动化测试解决方案,提供VISA/SCPI仪器通信、示波器控制、频谱分析仪操作、电源管理、数据采集和测量不确定度分析等功能。关键词:自动化测试、硬件验证、仪器控制、数据采集、SCPI通信、测量不确定度、测试序列、PyVISA、测试报告生成、EMC测量。

测试 0 次安装 0 次浏览 更新于 2/25/2026

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预合规测量

最佳实践

  1. 始终在开始测试序列前验证仪器连接
  2. 对慢速测量使用适当的超时设置
  3. 实现适当的错误处理以应对仪器通信故障
  4. 记录测量条件(温度、湿度、设置)
  5. 在测试程序中包含校准验证
  6. 使用统计分析进行生产测试决策

流程集成

  • ee-hardware-validation(所有阶段)
  • ee-environmental-testing(数据采集)
  • ee-emc-design-testing(预合规测量)

依赖项

  • PyVISA和PyVISA-py用于仪器通信
  • NI VISA或Keysight IO Libraries用于驱动程序支持
  • 根据需要安装仪器特定驱动程序

参考资料