连接是德科技N9020A,设置并读取数据到电脑
import time
import pyvisa
import os
import matplotlib.pyplot as stimulusResponsePlot
import numpy as npStimulusArray
debug = True
print("Debug flag set to " + str(debug))
# numpoints = input("numpoints:")
#
# CentFreq = input("CenterFrequency:")
# # centerprequency = 10e9
#
# SpanFreq = input("spanFrequency:")
# # spanfrequency = 10e6
#
# Avg = 'Average'
gpib_addr = 'TCPIP0::A-N9020A-10349.local::inst0::INSTR' #PC安装NI MAX后可以查看GPIB地址,此工具也可以直接与GPIB通信
rm = pyvisa.ResourceManager() #获取visa资源,将python的visa和系统visa关联起来
gpib_inst = rm.open_resource(gpib_addr) #打开GPIB地址连接
gpib_inst.write("*RST")
gpib_inst.timeout = 25000 #延时
gpib_inst.write('*CLS')
gpib_inst.read_termination = '\n'
gpib_inst.write_termination = '\n'
print(gpib_inst.query('*IDN?')) #查询仪器型号
# Define Error Check Function 定义错误检查函数
def Errcheck():
myError = []
ErrorList = gpib_inst.query("SYST:ERR?").split(',')
Error = ErrorList[0]
if int(Error) == 0:
print("+0, No Error!")
else:
while int(Error)!=0:
print ("Error #: " + ErrorList[0])
print ("Error Description: " + ErrorList[1])
myError.append(ErrorList[0])
myError.append(ErrorList[1])
ErrorList = gpib_inst.query("SYST:ERR?").split(',')
Error = ErrorList[0]
myError = list(myError)
return myError
# 调用并打印出错误检查结果
print (Errcheck())
# 预设仪器 并等待操作通过 *OPC? 完成,即
# 操作完成查询。
gpib_inst.write("SYST:PRES;*OPC?")
print ("预设成功, *OPC? returned : " + gpib_inst.read())
# 将模式设置为频谱分析仪,然后通过 *OPC? 等待操作完成,即
# the operation complete query.
gpib_inst.write("INST:SEL 'SA';*OPC?")
gpib_inst.read()
# gpib_inst.write("FREQ:ANN CSPan")
# gpib_inst.write("SENS:FREQ:CEN " + str(CentFreq)) #发送中心频率设置命令,注意将字符参数转换成字符串格式
gpib_inst.write('FREQ:CENT 10e9') #发送中心频率设置命令,注意将字符参数转换成字符串格式
# gpib_inst.write("FREQ:SPAN " + str(SpanFreq))
gpib_inst.write('FREQ:SPAN 10e6') #带宽
gpib_inst.write('SWE:POIN 101') #设置点的个数
# gpib_inst.write('SWE:POIN ' + str(numpoints)) #设置点的个数
gpib_inst.write("TRAC1:TYPE Average")
# gpib_inst.write("TRAC1:TYPE " + Avg)
gpib_inst.write("INIT:CONT ON")
# gpib_inst.write('CALC:MARK1:FUNC OFF') #使指定的标记成为 SA 标记函数之一。还会导致指定的标记打开(如果尚未打开)。
# gpib_inst.write('CALC:MARK1:FCO 1') #中心频率点打开(就是marker1
# gpib_inst.write('CALC:MARK:FCO:PREC FIN') #中心频率点打开(就是marker1
# D:User_My_Document/Instrument/My Documents/SA/data/New Folder
# gpib_inst.write('MMEM:MDIR "folder111"') #D:User_My_Document/Instrument/My Documents下创建一个新文件夹,不可是已有的
# gpib_inst.write('MMEMory:RDIR "folder111"') #删除文件夹
#
# gpib_inst.write('DISP:WIND:TRAC:Y:DLIN -50') #在屏幕上显示一条y=-50的线
# gpib_inst.write('DISP:WIND:TRAC1:Y:BOTT -80') #在屏幕上显示一条y=-50的线
#
# gpib_inst.write('DISP:WIND:TRAC1:Y:RPOS -50')
# gpib_inst.write('DISP:WIND:TRAC1:Y:PDIV -.25') #不知道实在弄啥
# gpib_inst.write('DISP:WIND:TRAC1:Y:RLEV -50')
# gpib_inst.write('DISP:WIND:TRAC1:Y:TOP 0') #头又未定义?
# gpib_inst.write("CALC:MARK2:FUNC OFF") #为什么还报错了
# gpib_inst.write("CALC:MARK:FCO:X?") #为什么还报错了
# gpib_inst.write("CALC:MARK2:ACTivate")
# gpib_inst.write("CALC:MARK:AOFF")
# gpib_inst.write("QUAN:TACT?")
# gpib_inst.read()
# gpib_inst.write("RECP:SESS:CSST SING")
# gpib_inst.write("MMEM:STOR:CONV 'MyDUT',INT")
# gpib_inst.write("MMEM:LOAD:CONV 'MyCONV_File',INT")
#######想要保存
# gpib_inst.write('AMPL:UNIT dBm')
print("尝试读取")
gpib_inst.write('FORM REAL,32')
data = gpib_inst.read('TRAC1:DATA?') # #为什么read就超时。。。
time.sleep(1)
print(data)
gpib_inst.write('MMEM:DATA "MyFile",<data>')
# gpib_inst.write('MMEM:STOR:FDAT "11111MyFile.csv"')
# 将应用程序末尾损坏的 SCPI 命令作为调试测试发送
if debug:
gpib_inst.write("INIT:CONT OOOOOOOOOO")
# 调用 ErrCheck 函数并确保程序启动之间没有发生错误
# (第一次 Errcheck() 调用和程序结束(最后一次 Errcheck() 调用。
print(Errcheck())
运行结果及报错内容
我想要达到的结果
成功读取trace上点的数据并保存到电脑上