使用python控制仪器【控制苏州联讯源表SMU】

文章目录

  • 使用python控制仪器【控制苏州联讯源表SMU】
    • 搭建环境
      • 1、安装python
      • 2、安装PyCharm
      • 3、使用PyCharm创建项目
      • 4、添加VISA资源
      • 5、安装PyVisa
    • 连接设备
      • 6、连接设备
    • 控制设备
      • 7、一个更复杂的例程
    • 读写数据
      • 8、将数据写入excel
      • 9、显示扫描波形

使用python控制仪器【控制苏州联讯源表SMU】

搭建环境

1、安装python

  1. 下载python
    链接: https://www.python.org/downloads/windows/
    使用python控制仪器【控制苏州联讯源表SMU】_第1张图片
  2. 安装python
    选中自定义安装,勾选中“Add python3.7 to path”,可自动增加环境变量,不需要手动添加
    使用python控制仪器【控制苏州联讯源表SMU】_第2张图片
    之后一直点下一步就可以了。
  3. 查看python是否安装成功
    win+R 运行cmd,输入“python”
    使用python控制仪器【控制苏州联讯源表SMU】_第3张图片
    安装成功后可输入“print”测试,如果打印成功,代表安装成功了

2、安装PyCharm

  1. 下载PyCharm
    网址:
    打开网址,如图操作,点击Community即可自动下载:
    https://www.jetbrains.com/zh-cn/pycharm/download/#section=windows
    使用python控制仪器【控制苏州联讯源表SMU】_第4张图片
  2. 安装pycharm
    双击安装文件
    使用python控制仪器【控制苏州联讯源表SMU】_第5张图片
    可选择自定义路径安装
    使用python控制仪器【控制苏州联讯源表SMU】_第6张图片
    全勾上
    使用python控制仪器【控制苏州联讯源表SMU】_第7张图片
    一直点击下一步,安装成功。

3、使用PyCharm创建项目

新建项目
使用python控制仪器【控制苏州联讯源表SMU】_第8张图片
使用python控制仪器【控制苏州联讯源表SMU】_第9张图片
创建成功,右键单击点击项目,可选择创建你的第一个py文件,如图:
使用python控制仪器【控制苏州联讯源表SMU】_第10张图片
填写模块名称:
使用python控制仪器【控制苏州联讯源表SMU】_第11张图片
鼠标右键空白处,选择run,可调试运行文件:
使用python控制仪器【控制苏州联讯源表SMU】_第12张图片
运行成功、失败,下方可查看运行日志,如图:
使用python控制仪器【控制苏州联讯源表SMU】_第13张图片

4、添加VISA资源

  • 打开NI MAX,添加设备资源
    使用python控制仪器【控制苏州联讯源表SMU】_第14张图片
    添加一个网口设备

使用python控制仪器【控制苏州联讯源表SMU】_第15张图片
填入设备的ip地址
ip address:192.168.170.8
port:8807
使用python控制仪器【控制苏州联讯源表SMU】_第16张图片
添加成功
使用python控制仪器【控制苏州联讯源表SMU】_第17张图片

5、安装PyVisa

PyVisa是用来控制各种各样的测量仪器的Python包,适用诸如GPIB、RS232、USB、Ethernet等接口。
安装包有两种方法

  • 方法1
    打开终端,输入安装pyvisa库的指令,安装成功后,会有安装成功的提示。
$ pip install -U pyvisa

使用python控制仪器【控制苏州联讯源表SMU】_第18张图片

  • 方法2
    打开python packages选项,搜索pyvisa,点击安装
    使用python控制仪器【控制苏州联讯源表SMU】_第19张图片

连接设备

6、连接设备

输入下面的代码

# 导入库
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 执行或者点击绿色的运行按钮

使用python控制仪器【控制苏州联讯源表SMU】_第20张图片
运行结果,返回设备的基本信息
使用python控制仪器【控制苏州联讯源表SMU】_第21张图片

控制设备

7、一个更复杂的例程

下面的例程展示,如何用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)

运行结果如下,运行成功后,可以打印出扫描测量出的电压值。
使用python控制仪器【控制苏州联讯源表SMU】_第22张图片

读写数据

8、将数据写入excel

测量的数据一般会通过文件保存,这里采用excel进行保存,使用最常用的读写excel的python库。
安装所需要的软件包xlwings,通道python packages安装或者通过指令安装

pip install xlwings

使用python控制仪器【控制苏州联讯源表SMU】_第23张图片
输入如下指令

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' 的工作表,并将数据写入该工作表。")

运行成功后显示如下信息,也可以打开excel查看数据
使用python控制仪器【控制苏州联讯源表SMU】_第24张图片
使用python控制仪器【控制苏州联讯源表SMU】_第25张图片

9、显示扫描波形

通过将数据通过图形的方式显示出来可以更加直观。
需要安装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()

你可能感兴趣的:(python,开发语言)