欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

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

发布时间:2024/1/18 python 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用python控制仪器【控制苏州联讯源表SMU】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

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

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

搭建环境

1、安装python

  • 下载python
    链接: https://www.python.org/downloads/windows/
  • 安装python
    选中自定义安装,勾选中“Add python3.7 to path”,可自动增加环境变量,不需要手动添加

    之后一直点下一步就可以了。
  • 查看python是否安装成功
    win+R 运行cmd,输入“python”

    安装成功后可输入“print”测试,如果打印成功,代表安装成功了
  • 2、安装PyCharm

  • 下载PyCharm
    网址:
    打开网址,如图操作,点击Community即可自动下载:
    https://www.jetbrains.com/zh-cn/pycharm/download/#section=windows
  • 安装pycharm
    双击安装文件

    可选择自定义路径安装

    全勾上

    一直点击下一步,安装成功。
  • 3、使用PyCharm创建项目

    新建项目


    创建成功,右键单击点击项目,可选择创建你的第一个py文件,如图:

    填写模块名称:

    鼠标右键空白处,选择run,可调试运行文件:

    运行成功、失败,下方可查看运行日志,如图:

    4、添加VISA资源

    • 打开NI MAX,添加设备资源

      添加一个网口设备


    填入设备的ip地址
    ip address:192.168.170.8
    port:8807

    添加成功

    5、安装PyVisa

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

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

    • 方法2
      打开python packages选项,搜索pyvisa,点击安装

    连接设备

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


    运行结果,返回设备的基本信息

    控制设备

    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)

    运行结果如下,运行成功后,可以打印出扫描测量出的电压值。

    读写数据

    8、将数据写入excel

    测量的数据一般会通过文件保存,这里采用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' 的工作表,并将数据写入该工作表。")

    运行成功后显示如下信息,也可以打开excel查看数据

    9、显示扫描波形

    通过将数据通过图形的方式显示出来可以更加直观。
    需要安装Matplotlib库
    Matplotlib是一个用于创建高质量图形的Python库。它提供了广泛的数据可视化功能,使用户能够以各种方式呈现数据。

    pip install matplotlib

    执行代码

    import pyvisa import time import xlwings as xw import matplotlib.pyplot as pltrm = 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控制仪器【控制苏州联讯源表SMU】的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。