新建项目
创建成功,右键单击点击项目,可选择创建你的第一个py文件,如图:
填写模块名称:
鼠标右键空白处,选择run,可调试运行文件:
运行成功、失败,下方可查看运行日志,如图:
填入设备的ip地址
ip address:192.168.170.8
port:8807
添加成功
PyVisa是用来控制各种各样的测量仪器的Python包,适用诸如GPIB、RS232、USB、Ethernet等接口。
安装包有两种方法
$ pip install -U pyvisa
输入下面的代码
# 导入库
import pyvisa
# 创建 VISA资源管理器的对象。
rm = pyvisa.ResourceManager()
# 打开指定资源名称的设备。一旦设备被打开,您就可以使用返回的设备对象进行与设备的通信和控制。
my_Instrument = rm.open_resource('TCPIP0::192.168.170.8::8807::SOCKET')
# 配置通讯超时时间
my_Instrument.timeout = 5000
# 配置截止符
my_Instrument.read_termination = '\n'
# 查询设备信息
instrumentMessage=my_Instrument.query('*IDN?')
# 打印设备信息
print(instrumentMessage)
运行代码
按 Shift+F10 执行或者点击绿色的运行按钮
下面的例程展示,如何用SCPI命令控制S3022F完成一个电压扫描,start为1V,stop为5V,扫描10个点,线性扫描,将测量电压数据打印出来。
import pyvisa
import time
rm = pyvisa.ResourceManager()
my_Instrument = rm.open_resource('TCPIP0::192.168.170.8::8807::SOCKET')
my_Instrument.timeout = 5000
my_Instrument.read_termination = '\n'
instrumentMessage=my_Instrument.query('*IDN?')
print(instrumentMessage)
#发送SCPI指令
my_Instrument.write(':SOUR:FUNC:MODE VOLT,(@101)')
my_Instrument.write(':SOUR:VOLT:MODE SWE,(@101)')
my_Instrument.write(':SOUR:FUNC:SHAP DC,(@101)')
my_Instrument.write(':SOUR:SWE:SPAC LIN,(@101)')
my_Instrument.write(':SOUR:VOLT:RANG 10,(@101)')
my_Instrument.write(':SOUR:CURR:RANG 0.01,(@101)')
my_Instrument.write(':SENS:CURR:PROT 0.01,(@101)')
my_Instrument.write(':SOUR:VOLT:STAR 1,(@101)')
my_Instrument.write(':SOUR:VOLT:STOP 5,(@101)')
my_Instrument.write(':TRIG:COUN 10,(@101)')
my_Instrument.write(':SOUR:SWE:POIN 10,(@101)')
my_Instrument.write(':SENS:VOLT:NPLC 1,(@101)')
my_Instrument.write(':OUTP 1,(@101)')
my_Instrument.write(':INIT (@101)')
#循环读取状态寄存器,读取到1024,扫描完成,跳出循环,读取电压值
while (1):
time.sleep(1)
end = my_Instrument.query(':STAT:OPER:COND? (@101)')
print(end)
if (end == '1024'):
break
# 获取扫描电压值
voltageList = my_Instrument.query_ascii_values(":FETC:VOLT?")
print(voltageList)
测量的数据一般会通过文件保存,这里采用excel进行保存,使用最常用的读写excel的python库。
安装所需要的软件包xlwings,通道python packages安装或者通过指令安装
pip install xlwings
import pyvisa
import time
import xlwings as xw
rm = pyvisa.ResourceManager()
my_Instrument = rm.open_resource('TCPIP0::192.168.170.8::8807::SOCKET')
my_Instrument.timeout = 5000
my_Instrument.read_termination = '\n'
instrumentMessage=my_Instrument.query('*IDN?')
print(instrumentMessage)
#发送SCPI指令
my_Instrument.write(':SOUR:FUNC:MODE VOLT,(@101)')
my_Instrument.write(':SOUR:VOLT:MODE SWE,(@101)')
my_Instrument.write(':SOUR:FUNC:SHAP DC,(@101)')
my_Instrument.write(':SOUR:SWE:SPAC LIN,(@101)')
my_Instrument.write(':SOUR:VOLT:RANG 10,(@101)')
my_Instrument.write(':SOUR:CURR:RANG 0.01,(@101)')
my_Instrument.write(':SENS:CURR:PROT 0.01,(@101)')
my_Instrument.write(':SOUR:VOLT:STAR 1,(@101)')
my_Instrument.write(':SOUR:VOLT:STOP 5,(@101)')
my_Instrument.write(':TRIG:COUN 10,(@101)')
my_Instrument.write(':SOUR:SWE:POIN 10,(@101)')
my_Instrument.write(':SENS:VOLT:NPLC 1,(@101)')
my_Instrument.write(':OUTP 1,(@101)')
my_Instrument.write(':INIT (@101)')
#循环读取状态寄存器,读取到1024,扫描完成,跳出循环,读取电压值
while (1):
time.sleep(1)
end = my_Instrument.query(':STAT:OPER:COND? (@101)')
print(end)
if (end == '1024'):
break
# 创建新文件
wb = xw.Book()
# 添加名为"voltage"的工作表
wb.sheets.add('voltage')
# 取消活动工作表选择
wb.sheets[0].select()
# 获取要写入的数据
voltageList = my_Instrument.query_ascii_values(":FETC:VOLT?")
# 将数据写入Excel文件
sheet = wb.sheets['voltage']
sheet.range('A1').value = '电压(V)'
for i in range(len(voltageList)):
sheet.range((i+2, 1)).value = voltageList[i]
# 修改保存路径和文件名
save_path = 'D:/test.xlsx'
# 保存并关闭文件
wb.save(save_path)
wb.close()
print(f"已成功创建名为 '{save_path}' 的Excel文件,并在其中添加了名为 'voltage' 的工作表,并将数据写入该工作表。")
通过将数据通过图形的方式显示出来可以更加直观。
需要安装Matplotlib库
Matplotlib是一个用于创建高质量图形的Python库。它提供了广泛的数据可视化功能,使用户能够以各种方式呈现数据。
pip install matplotlib
执行代码
import pyvisa
import time
import xlwings as xw
import matplotlib.pyplot as plt
rm = pyvisa.ResourceManager()
my_Instrument = rm.open_resource('TCPIP0::192.168.170.8::8807::SOCKET')
my_Instrument.timeout = 5000
my_Instrument.read_termination = '\n'
instrumentMessage=my_Instrument.query('*IDN?')
print(instrumentMessage)
#发送SCPI指令
my_Instrument.write(':SOUR:FUNC:MODE VOLT,(@101)')
my_Instrument.write(':SOUR:VOLT:MODE SWE,(@101)')
my_Instrument.write(':SOUR:FUNC:SHAP DC,(@101)')
my_Instrument.write(':SOUR:SWE:SPAC LIN,(@101)')
my_Instrument.write(':SOUR:VOLT:RANG 10,(@101)')
my_Instrument.write(':SOUR:CURR:RANG 0.01,(@101)')
my_Instrument.write(':SENS:CURR:PROT 0.01,(@101)')
my_Instrument.write(':SOUR:VOLT:STAR 1,(@101)')
my_Instrument.write(':SOUR:VOLT:STOP 5,(@101)')
my_Instrument.write(':TRIG:COUN 10,(@101)')
my_Instrument.write(':SOUR:SWE:POIN 10,(@101)')
my_Instrument.write(':SENS:VOLT:NPLC 1,(@101)')
my_Instrument.write(':OUTP 1,(@101)')
my_Instrument.write(':INIT (@101)')
#循环读取状态寄存器,读取到1024,扫描完成,跳出循环,读取电压值
while (1):
time.sleep(1)
end = my_Instrument.query(':STAT:OPER:COND? (@101)')
print(end)
if (end == '1024'):
break
# 创建新文件
wb = xw.Book()
# 添加名为"voltage"的工作表
wb.sheets.add('voltage')
# 取消活动工作表选择
wb.sheets[0].select()
# 获取要写入的数据
voltageList = my_Instrument.query_ascii_values(":FETC:VOLT?")
currentList = my_Instrument.query_ascii_values(":FETC:CURR?")
# 将数据写入Excel文件
sheet = wb.sheets['voltage']
sheet.range('A1').value = '电压(V)'
for i in range(len(voltageList)):
sheet.range((i+2, 1)).value = voltageList[i]
# 修改保存路径和文件名
save_path = 'D:/test.xlsx'
# 保存并关闭文件
wb.save(save_path)
wb.close()
print(f"已成功创建名为 '{save_path}' 的Excel文件,并在其中添加了名为 'voltage' 的工作表,并将数据写入该工作表。")
#*************************显示扫描波形***************************************************#
x = voltageList
y = currentList
# 创建图形并绘制数据,数据源是电压,纵坐标是电压值,横坐标是数据的索引
plt.plot(x, marker='o')
# 添加标题和标签
plt.title('Voltage Data')
plt.xlabel('index')
plt.ylabel('Voltage (V)')
plt.grid()
#创建图形并绘制数据,数据源是电压,横坐标是电压值,纵坐标是数据的索引
(fig, ax1) = plt.subplots()
ax1.plot(x, y, marker='o')
ax1.grid()
# 设置子图的横纵坐标轴标签
ax1.set_xlabel('Voltage')
ax1.set_ylabel('Current')
# 设置子图的标题
ax1.set_title('Voltage vs. Current')
# 显示图形窗口
plt.show()