电源66319D控制方法

实现自动化控制,电源为基础的模块,下面为大家讲解电源66319D的控制逻辑。

新建底层控制逻辑

在这里插入图片描述
在文件basis_contorl.py中写入仪器控制底层代码,代码如下:

import tkinter.messagebox
import pyvisa


class InstrumentControl(object):
    inst = None

    def __init__(self, equipment_name: str, equipment_visa: str, visa_dll='c:/Windows/System32/visa32.dll'):
        """
        建立仪器初始对象
        @param equipment_name: 仪器名
        @param equipment_visa: 仪器visa地址
        @param visa_dll: visa.all地址
        """
        try:
            self.rm = pyvisa.ResourceManager(visa_dll)
            print("打开visa32.dll文件成功")
            self.inst = self.open_by_name(equipment_name, equipment_visa)
        except Exception as e:
            tkinter.messagebox.showerror('错误', '在{}中找不到visa32.dll,请确认正确安装了NI-MAX和驱动')
            print(f"打开visa32.dll文件失败, 报错原因:{e}")
        pass

    def open_by_name(self, device_name, gpib_ip):
        """
        仪表通讯
        @param device_name:
        @param gpib_ip:
        @return: 仪器控制对象
        """
        self.inst = self.rm.open_resource(gpib_ip)
        print(self.inst)
        print("打开资源:" + gpib_ip)
        query_name_str = self.command_query("*IDN?")
        print("查询名称为:" + query_name_str)
        if device_name in query_name_str:
            print("打开仪表成功,打开的是:" + device_name)
            print("打开仪表成功,打开的是:" + device_name)
            return self.inst
        return self.inst

    def command_write(self, write_cmd):
        """
        命令写入
        @param write_cmd: 写入指令
        @return: 执行结果
        """
        print("执行了写入指令:" + write_cmd)
        ret_res = self.inst.write(write_cmd)
        print("返回了:" + str(ret_res))
        return ret_res

    def command_read(self, read_cmd):
        """
        命令读取
        @param read_cmd: 读取指令
        @return: 读取信息
        """
        print("执行了读取指令:" + read_cmd)
        ret_res = self.inst.read(read_cmd)
        print("返回了:" + str(ret_res))
        return ret_res

    def command_query(self, query_cmd):
        """
        命令查询
        @param query_cmd: 查询指令
        @return: 查询信息
        """
        print("执行了查询指令:" + query_cmd)
        ret_res = self.inst.query(query_cmd).replace('\n', '')
        print("返回了:" + str(ret_res))
        return ret_res

编写好底层控制代码,在文件instrument_66319d.py写入电源66139D的控制指令,代码如下:

from instrument_control.basis_contorl import InstrumentControl


class D66319(InstrumentControl):
    def __init__(self, equipment_name: str, equipment_visa: str):
        super(D66319, self).__init__(equipment_name, equipment_visa)

    def query_equipment_info(self):
        """
        查询设备信息
        :return: 设备信息
        """
        result = self.command_query("*IDN?")
        return result

    def switch_display(self, interface: int):
        """
        切换显示界面
        :param interface: 1 or 2
        """
        self.command_write(f"DISPLAY:CHANNEL {interface}")

    def set_output_2(self, output_2: int):
        """
        设置output2的输出功率
        :param output_2: 1,2.....
        """
        self.command_write(f"OUTP2 {output_2};*OPC?")

    def set_output(self, output: int):
        """
        设置output1的输出功率
        :param output: 1,2.....
        """
        self.command_write(f"OUTP1 {output};*OPC?")

    def set_voltage_2(self, voltage_2: int):
        """
        设置二口的电压
        :param voltage_2: 1,2.....
        """
        self.command_write(f'VOLT2 {voltage_2}')

    def set_voltage(self, voltage):
        """
        设置一口的电压
        :param voltage: 1,2.....
        """
        self.command_write(f'VOLT1 {voltage}')

    def open_output_2(self):
        """
        打开二口的输出开关
        """
        self.command_write('OUTP2 ON')

    def open_output(self):
        """
        打开一口的输出开关
        """
        self.command_write('OUTP1 ON')

    def query_maximum_voltage(self):
        """
        查询可编程的最大输出电压
        :return: 电压值
        """
        result = self.command_query("VOLT? MAX").replace("\n", '')
        return result

    def open_over_voltage_protection(self):
        """
        开启过压保护
        """
        self.command_write("CURR:PROT:ON")

    def close_over_voltage_protection(self):
        """
        关闭过压保护
        """
        self.command_write("CURR:PROT:OFF")

    def set_output_resistance(self, output_resistance: int):
        """
        设置输出电阻
        :param output_resistance: 输出电阻值
        """
        self.command_write(f"RES {output_resistance}")

    def query_average_output_voltage(self):
        """
        查询平均输出电压
        :return: 均输出电压
        """
        result = self.command_query("MEAS:VOLT?")
        return result

    def query_average_output_current(self):
        """
        查询平均输出电流
        :return: 平均输出电流
        """
        result = self.command_query("MEAS:CURR?")
        return result

    def query_average_output_current_2(self):
        """
        查询二口的平均输出电流
        :return: 二口的平均输出电流
        """
        result = self.command_query("MEAS:CURR2?")
        return result

    def set_samples(self, samples: int):
        """
        设置采样的样本数量
        :param samples: 样本数量
        """
        self.command_write(f"SENS:SWE:POIN {samples}")

    def set_time_interval(self, time_interval: float):
        """
        设置每个样本的间隔时间
        :param time_interval: 间隔时间
        """
        self.command_write(f"SENS:SWE:TINT {time_interval}")

    def set_measurement_ranges(self, measurement_range: str):
        """
        设置电流测试范围(3A:0~MAX, 1A:0~1, 0.02:0~0.02)
        :param measurement_range: 测试范围
        """
        self.command_write(f"SENS:CURR:RANG {measurement_range}")

    def query_measurement_ranges(self):
        """
        查询电流测试范围
        :return: 电流测试范围
        """
        result = self.command_query("SENS:CURR:RANG?")
        return result

    def set_measurement_detectors(self, measurement_detectors):
        """
        设置电流探测器类型(AC_DC, DC)
        :param measurement_detectors: 电流探测器类型
        """
        self.command_write(f"SENS:CURR:DET {measurement_detectors}")

    def query_measurement_detectors(self):
        """
        查询电流探测器类型
        :return: 电流探测器类型
        """
        result = self.command_query("SENS:CURR:DET?")
        return result

    def query_voltage_rms_measurement(self, electric_type):
        """
        查询电压的rms测量值(AC:交流电, DC:直流电, AC_DC:直流加交流, DC:直流)
        :param electric_type: 电流类型
        :return: 电压的rms测量值
        """
        result = self.command_query(f"MEAS:VOLT:{electric_type}?")
        return result

    def query_current_rms_measurement(self, electric_type):
        """
        查询电流的rms测量值(AC:交流电, DC:直流电, AC_DC:直流加交流, DC:直流)
        :param electric_type: 电流类型
        :return: 电流的rms测量值
        """
        result = self.command_query(f"MEAS:CURR:{electric_type}?")
        return result

    def query_voltage_max_min(self):
        """
        查询电压的脉冲或交流波形的最大或最小值
        :return: 电压的脉冲或交流波形的最大或最小值
        """
        result_max = self.command_query("FETC:VOLT:MAX?")
        result_min = self.command_query("FETC:VOLT:MIN?")
        return result_max, result_min

    def query_current_max_min(self):
        """
        查询电流的脉冲或交流波形的最大或最小值
        :return: 电流的脉冲或交流波形的最大或最小值
        """
        result_max = self.command_query("FETC:CURR:MAX?")
        result_min = self.command_query("FETC:CURR:MIN?")
        return result_max, result_min

    def query_average_voltage(self):
        """
        测试平均电压
        :return: 平均电压
        """
        result = self.command_query("MEAS:DVM:DC?")
        return result

    def query_rms_voltage(self):
        """
        测试rms电压
        :return: rms电压
        """
        result = self.command_query("MEAS:DVM:ACDC?")
        return result

控制仪器时先设置控制对象,具体例子如下:

    set_equipment_name = "D66319"
    set_equipment_visa = "仪器的GPIB地址"
    d66319_object = D66319(equipment_name=set_equipment_name, equipment_visa=set_equipment_visa)

关于电源66319D的控制方法就到这里了,博主后续还会更新不同仪器的控制方法,各位敬请期待吧,有疑问欢迎找博主解答,我是活动的笑脸。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值