当前位置: 首页 > ai >正文

Python与矢量网络分析仪3671E:自动化测试(Vscode)

一、背景介绍

        DUT集成了多个可调衰减的射频通道,使用中电思仪的3671E矢量网络分析仪测试DUT的S参数并记录数据。

        基于Python完成远程控制及自动化测试。

二、前期准备

        Python环境:3.11.5(版本过高需要安装ipykernel)

        Vscode版本:version 1.98

        R&S visa:Version 5.12.3(最新版本7.2.5)

        确保本地上位机与矢网以太网通信正常:
如何使用VISA通过以太网(Ethernet)和罗德施瓦茨设备通信_rohde&schwarz频谱仪如何联网-CSDN博客https://blog.csdn.net/lu2289504634/article/details/134879343

三、代码实现

3.1 连接仪表

import pyvisa 
import time
import numpy as np
# 导入 send_serial_command 函数
from serial_comm import send_serial_command# 初始化VISA资源管理器
rm = pyvisa.ResourceManager()# 连接到仪器
instrument = rm.open_resource('TCPIP0::10.0.0.102::inst0::INSTR')  # 通过LAN连接的例子ID=instrument.query('*IDN?')  # 查询仪器信息
print("ID: ", ID)instrument.write("*CLS")  # 复位状态寄存器
instrument.write("*RST")  # 复位仪器
instrument.write("CALC:PAR:DEL:ALL")    # 删除所有测量
time.sleep(1)

此处矢网的IP地址为:10.0.0.102,根据需要进行修改。运行代码,通信正常情况下,输出:ID: Ceyear Technologies,3671E,QZNK000625,2.2.0

3.2 仪表设置

        设置内容:起始频率、功率、扫描点数、中频带宽、平均因子、光标等

delay_IL=1.5
IL_indicator=4
ISO_indicator=55
# delay_ISO=1instrument.write("CALC:PAR:DEF:EXT 'Trace1', 'S21'") #设置Trace1为S21
instrument.write("DISPlay:WINDow1:STATE ON")         #显示第一窗口
instrument.write("DISP:WIND1:TRACE1:FEED 'Trace1'")  #Trace1显示在第一窗口内#---------------设置起始频率,功率,扫描点数----------
instrument.write("SENSe1:FREQ:STAR 2e6")    # 设置起始频率
instrument.write("SENSe1:FREQ:STOP 1e9")    # 设置终止频率
instrument.write("SOURce1:POWer1 0dBm")    # 设置功率
instrument.write("SENSe1:SWEep:POINts 500")    # 设置扫描点数500
instrument.write("SENSe1:BANDwidth 10000")    # 设置中频带宽instrument.write("SENSe1:AVER:STATe OFF")      # 关闭轨迹平均功能
instrument.write("SENSe1:AVER:Count "+str(SET_aver_num))       # 设置平均因子为5instrument.write("CALC:PAR:SEL 'Trace1'")     # 选择测量S21
instrument.write("CALCulate1:MARKer:AOFF")    # 关闭所有光标 
instrument.write("CALCulate1:MARKer1:STATe ON")    # 打开光标1     
instrument.write("CALCulate1:MARKer1:X 1e9")    # 设置光标1的X坐标为1GHz  
# ZEcal() #Z通道电子校准
print("Z通道校准完毕")

3.3 插损测试

        测试S参数,将测试数据保存至矢网的指定文件路径中,代码中保存文件格式为csv文件。

#------------------测试参数设置-----------------------
DUT_num='M_0011'  # 模块编号
temp=25  #温度值
COM_port = 'COM3'  # 根据实际情况设置串口号
baudrate = 115200  # 波特率instrument.write("DISP:WIND:TRAC1:Y:RLEVel 0")    # 设置Y轴参考电平0dB
for ATT_value in range(0,24,8):  # 衰减量# 发送指令55,通道数01,衰减值00send_serial_command(COM_port,baudrate,int(hex(chn), 16),int(hex(ATT_value), 16))instrument.write("SENSe1:AVER:STATe ON")      # 打开轨迹平均功能instrument.write("SENSe1:AVER:Count "+str(SET_aver_num))       # 设置平均因子为5InputPower=0# powerlevel='SOURce1:POWer1 '+str(InputPower)+'dBm'# instrument.write(powerlevel)                # 设置功率电平time.sleep(1.5)# 选择测量类型(此处以S21为例)instrument.write("CALC:PAR:SEL 'S21'")  # 选择S21参数# 选择数据格式(例如CSV)instrument.write("FORM:DATA ASCii")  # 设置为ASCII格式# 获取数据并保存到文件data = instrument.query("CALC:DATA? FDATA")  # 获取测量数据time.sleep(0.5)# 假设数据是以逗号分隔的多行文本data_list = data.splitlines()  # 按行分割数据# 将每行数据转换为浮点数,并转换为numpy数组data_array = np.array([list(map(float, row.split(','))) for row in data_list])max_value = np.max(data_array)  # 求最大值min_value = np.min(data_array)  # 求最小值print(f"最小值: {min_value}")filepath='D:\\'+DUT_num+'\IL\\'+str(chn_IL)+'\T'+str(temp)+'\data_csv\\'filename='ATT'+str(ATT_value)+'dB_P'+str(InputPower)+'dBm.csv'instruct='MMEMory:STORe:DATA "'+filepath+filename+'","CSV Formatted Data","Displayed","DB",-1'print(instruct)instrument.write(instruct)                  # 根据文件路径保存文件instrument.write("SENSe1:AVER:STATe OFF")      # 关闭轨迹平均功能instrument.write("SENSe1:AVER:Count "+str(SET_aver_num))       # 设置平均因子为5time.sleep(0.5)
print('当前通道IL测试完成')

3.4 隔离度测试

        测试S参数,仪表设置包含平滑处理。

# --------------ISO测试---------------------------------
chn=1   # 测试通道
instrument.write("DISP:WIND:TRAC1:Y:RLEVel -50")    # 设置Y轴参考电平-50dBATT_value_ISO=0  # 衰减量
# 发送指令55,通道数01,衰减值00
send_serial_command(COM_port,baudrate,int(hex(chn), 16),int(hex(ATT_value_ISO), 16))
send_serial_command(COM_port,baudrate,int(hex(chn+1), 16),int(hex(ATT_value_ISO), 16))
instrument.write("SENSe1:AVER:STATe ON")      # 打开轨迹平均功能
instrument.write("SENSe1:AVER:Count "+str(SET_aver_num))       # 设置平均因子为5
instrument.write("CALC:PAR:SEL 'Trace1'") #选择测量
instrument.write("CALCulate1:SMO:STAT ON")    # 打开轨迹平滑功能
instrument.write("CALCulate1:SMOothing:APERture 15")    # 设置平滑百分比20%time.sleep(4)
# 选择测量类型(此处以S21为例)
instrument.write("CALC:PAR:SEL 'S21'")  # 选择S21参数
# 选择数据格式(例如CSV)
instrument.write("FORM:DATA ASCii")  # 设置为ASCII格式
# 获取数据并保存到文件
data_iso = instrument.query("CALC:DATA? FDATA")  # 获取测量数据
# 假设数据是以逗号分隔的多行文本
data_iso_list = data_iso.splitlines()  # 按行分割数据# 将每行数据转换为浮点数,并转换为numpy数组
data_iso_array = np.array([list(map(float, row.split(','))) for row in data_iso_list])
max_value_iso = np.max(data_iso_array)  # 求最大值
min_value_iso = np.min(data_iso_array)  # 求最小值
print(f"最大值: {max_value_iso}")filepath='D:\\'+DUT_num+'\ISO\\'+test_kind+str(chn_ISO+1)+'_'+test_kind+str(chn_ISO)+'\data_csv\\'
filename='ATT'+str(ATT_value_ISO)+'dB_ATT'+str(ATT_value_ISO)+'dB_P'+str(InputPower)+'dBm.csv'
instruct='MMEMory:STORe:DATA "'+filepath+filename+'","CSV Formatted Data","Displayed","DB",-1'
print(instruct)
instrument.write(instruct)                  # 根据文件路径保存文件  
# instrument.write("SENSe1:AVER:STATe OFF")      # 关闭轨迹平均功能
# instrument.write("CALCulate1:SMO:STAT OFF")    # 关闭轨迹平滑功能print('当前通道ISO测试完成')

3.5 关闭连接

# 关闭连接
instrument.close()

四、资源下载

Python代码下载链接:Python与矢量网络分析仪3671E:自动化测试(Vscode)资源-CSDN文库

串口下发参数代码下载链接:Python串口下发指令函数资源-CSDN文库

http://www.xdnf.cn/news/5407.html

相关文章:

  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 红黑树的线程安全的做法
  • 黑名单中的随机数-leetcode710
  • sunset:Solstice靶场
  • 动态规划之背包问题总结(Java)
  • 微服务架构-限流、熔断:Alibaba Sentinel入门
  • TIME - MoE 模型代码 4——Time-MoE-main/run_eval.py
  • 前端密码加密:保护用户数据的第一道防线
  • 《微服务设计》笔记
  • CSS:盒子阴影与渐变完全解析:从基础语法到创意应用
  • MySQL数据库容灾设计案例与SQL实现
  • 数据库的脱敏策略
  • 深入浅出之STL源码分析6_模版编译问题
  • 【Tools】git使用详解以及遇到问题汇总
  • 传感器:从单一感知到智能决策的跨越
  • Java基础(异常2)
  • MCP:重塑AI交互的通用协议,成为智能应用的基础设施
  • 【js基础笔记] - 包含es6 类的使用
  • C++(9):位运算符进阶版
  • 变换炉设备设计:结构优化与工艺集成
  • 使用vue3-seamless-scroll实现列表自动滚动播放
  • 中空电机在安装垂直轴高速电机后无法动平衡的原因及解决方案
  • 26考研——中央处理器_指令流水线_流水线的冒险与处理 流水线的性能指标 高级流水线技术(5)
  • LintCode第4题-丑数 II
  • java笔记06
  • Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
  • 频率学派和贝叶斯学派置信区间/可信区间的区别
  • spark算子介绍
  • 机器视觉开发教程——C#如何封装海康工业相机SDK调用OpenCV/YOLO/VisionPro/Halcon算法
  • 高精地图数据错误的侵权责任认定与应对之道