python程控提高篇

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,运行程序后如下图所示:

图-python运行程序图

输出的内容分别为:测量到的S12幅度迹线的标准差、测量到的S12相位迹线的标准差、测量到的S21幅度迹线的标准差、测量到的S21相位迹线的标准差。

此时矢量网络分析仪的界面:

图-矢量网络分析仪界面图