python的仪表控制_visa通讯
仪表控制_visa通讯
·
目录
一、pyvisa
库以及NI的使用
在 Python 里,pyvisa
库可用于和各种仪器(像频谱仪、信号发生器等)进行通信,借助 VISA(Virtual Instrument Software Architecture)标准达成。
推荐使用 NI-VISA软件可以进行仪表控制,你还需要安装对应的 VISA 后端。下图为NI软件的截图,如果已经连接上仪表,可以自动查询进行连接仪表。
下图为仪表连接界面(未连接仪表显示的是X),可以打开VISA测试面板,可以输入SCPI指令对仪表进行控制,如果OK,仪表会出现你需要的状态,如果Fail,会返回错误码,根据错误码进行排查问题。
二、自定义通讯类示例
对于pyvisa
库,可以构建自定义的类,输入仪表IP/GPIB就可以连接仪表,创建打开仪表/关闭仪表/下发指令/读取返回值的方法,后续所有对于仪表的SCPI指令操作都可以用此类实例化,对函数进行操作。
下面为IP地址的简单示例:
# -*- coding: utf-8 -*-
import time
try:
import pyvisa as visa
except:
import visa
from pyvisa import errors, constants
# constants模块定义了许多与VISA(Virtual Instrument Software Architecture)规范相关的常量。
# 这些常量在与仪器进行通信时,用于指定不同的参数和配置,例如超时时间、数据传输模式等。
class VisaCommunication(object):
def __init__(self, ip):
self.ip = ip
self.on = None # 目的是为了看仪表端口是否打开
def open(self, end='\r\n'):
"""
:param end:指令最后加上的字符
:return:
"""
try:
# 仪表通讯基础格式,可以参考NI连接是的通讯地址
telnet_ip = f'TCPIP0::{self.ip}:: inst0:INSTR'
resource_messager = visa.ResourceManager()
communication = resource_messager.open_resource(telnet_ip, write_end=end)
communication.timeout = 1000
self.visa_communication = communication
self.on = True
except visa.errors.VisaIOError as e:
print(f"VISA I/O 错误: {e}")
except Exception as e:
print(f"发生其他错误: {e}")
def send(self, cmd, end='\r\n'):
if cmd.find("?") != -1:
result = self.visa_communication.query(cmd, write_end=end)
time.sleep(0.1)
return result
size, status = self.visa_communication.write(cmd, write_end=end)
if status != visa.constants.StatusCode.success:
print("指令下发失败")
time.sleep(0.05)
return status == visa.constants.StatusCode.success
# visa.constants.StatusCode.success 是 pyvisa 库中 constants 模块里的一个常量,
# 它代表着与仪器通信时操作成功的状态码。
def close(self):
self.visa_communication.close()
复杂的通讯逻辑,请留言沟通。
更多推荐
所有评论(0)