python 程控提高篇 #
操作系统: Windows 7 IDE:sublime Visa版本: 17.5 通信方式: LAN
在开发之前请确保已配置visa开发环境,参考 Visa开发环境搭建 的第一步和第二步。
关于python程控的配置参考 python程控基础篇。
运行本例程序后,下方依次输出:S12幅度迹线的标准差、S12相位迹线的标准差、S21幅度迹线的标准差、S21相位迹线的标准差。下面具体介绍整个实现过程。
第一步:编写程序 #
import pyvisa as visa # 导入pyvisa库
import time # 导入time是因为后面要用到延时
class Demo(): # 定义一个名为Demo的类
def __init__(self, visaDLL=None, *args):
self.ip = ip
self.visaDLL = 'C:/Windows/System32/visa32.dll' # visa32.dll的地址
# tcp_addr = 'TCPIP0::172.16.1.201::inst0::INSTR'# VXI-11接口的
# tcp_addr = 'GPIB0::16::INSTR'# GPIB接口
# tcp_addr = 'USB0::0x0525::0x1000::ZKC00523::INSTR'# USB接口
tcp_addr = 'TCPIP0::172.16.1.201::5025::SOCKET' # TCPIP0::172.16.1.201::5025::SOCKET为网络分析仪的IP地址和端口号。这里使用的是我的配置,要根据自己的情况进行改动。
self.resourceManager = visa.ResourceManager(self.visaDLL)
def open(self): # 打开函数
self.instance = self.resourceManager.open_resource(self.address)
self.instance.read_termination = '\n' # 定义结束符
def close(self): # 关闭函数
if self.instance is not None:
self.instance.close()
self.instance = None
def set(self): # 设置函数
self.instance.write('*RST\n') # 复位指令
self.instance.write(':SENS:BWID 1KHZ\n') # 设置中频带宽为1KHZ
self.instance.write(':SENS:FREQ:CENT 10000000\n') # 键入中心频率
def S12_M(self): # 测量S12幅度迹线的标准差
self.instance.write(':DISP:WIND:TRAC1:DEL\n') # 删除轨迹1
self.instance.write(":CALCulate1:PARameter:DEF 'CH1',S12\n") # 在通道1上创建测量名称为'CH1',测量参数为S12的测量。
self.instance.write(":DISP:WIND:TRAC1:FEED 'CH1'\n") # 创建轨迹1并将其与测量名称为'CH1'的测量相关联,之后在窗口1中显示。
self.instance.write(":CALCulate1:PARameter:SEL 'CH1'\n") # 设置名称为'CH1'的测量为通道1的当前选择测量。
self.instance.write(':CALCulate1:FORMat MLOGarithmic\n') # 设置通道1当前选择轨迹的显示格式为对数幅度。
self.instance.write(':CALCulate1:FUNCtion:STAT:STAT ON\n') # 显示通道1轨迹统计。
self.instance.write(':CALCulate1:FUNCtion:TYPE STDEV\n') # 设置通道1轨迹统计返回数据的类型为标准偏差。
time.sleep(1) # 延时,给分析仪足够的时间进行计算
pr=self.instance.query(':CALCulate1:FUNCtion:DATA?\n') # 返回通道1轨迹统计返回数据的数值
print('S12 MLOGarithmic STDEV is '+pr) # 输出的内容为'S12 MLOGarithmic STDEV is '+返回通道1轨迹统计返回数据的数值
def S12_P(self): # 测量S12相位迹线的标准差
self.instance.write(":CALCulate1:PARameter:DEF 'CH2',S12\n")
self.instance.write(":DISP:WIND:TRAC2:FEED 'CH2'\n")
self.instance.write(":CALCulate1:PARameter:SEL 'CH2'\n")
self.instance.write(':CALCulate1:FORMat PHASe\n')
self.instance.write(':CALCulate1:FUNCtion:STAT:STAT ON\n')
self.instance.write(':CALCulate1:FUNCtion:TYPE STDEV\n')
time.sleep(1)
pr=self.instance.query(':CALCulate1:FUNCtion:DATA?\n')
print('S12 PHASe STDEV is '+pr)
def S21_M(self): # 测量S21幅度迹线的标准差
self.instance.write(":CALCulate1:PARameter:DEF 'CH3',S21\n")
self.instance.write(":DISP:WIND:TRAC3:FEED 'CH3'\n")
self.instance.write(":CALCulate1:PARameter:SEL 'CH3'\n")
self.instance.write(':CALCulate1:FORMat MLOGarithmic\n')
self.instance.write(':CALCulate1:FUNCtion:STAT:STAT ON\n')
self.instance.write(':CALCulate1:FUNCtion:TYPE STDEV\n')
time.sleep(1)
pr=self.instance.query(':CALCulate1:FUNCtion:DATA?\n')
print('S21 MLOGarithmic STDEV is '+pr)
def S21_P(self): # 测量S21相位迹线的标准差
self.instance.write(":CALCulate1:PARameter:DEF 'CH4',S21\n")
self.instance.write(":DISP:WIND:TRAC4:FEED 'CH4'\n")
self.instance.write(":CALCulate1:PARameter:SEL 'CH4'\n")
self.instance.write(':CALCulate1:FORMat PHASe\n')
self.instance.write(':CALCulate1:FUNCtion:STAT:STAT ON\n')
self.instance.write(':CALCulate1:FUNCtion:TYPE STDEV\n')
time.sleep(1)
pr=self.instance.query(':CALCulate1:FUNCtion:DATA?\n')
print('S21 PHASe STDEV is '+pr)
if __name__ == '__main__': # 实现主函数
de = Demo('127.0.0.1::5025')# IP地址和网络分析仪的端口号
de.open()
de.set()
de.S12_M()
de.S12_P()
de.S21_M()
de.S21_P()
de.close()
第二步:运行程序 #
按下快捷键ctrl+b,运行程序后如下图所示:
输出的内容分别为:测量到的S12幅度迹线的标准差、测量到的S12相位迹线的标准差、测量到的S21幅度迹线的标准差、测量到的S21相位迹线的标准差。
此时矢量网络分析仪的界面: