示波器实现全自动测试

示波器实现全自动化测试

项目简介

在芯片硅后样片测试中通过pyvisa库文件和泰克公司的TDS-2000B示波器,并结合编程文档实现了示波器的全自动化测试

# coding=utf-8
from datetime import datetime
import pyvisa
import time


class Tektronix_MSO64:

    def __init__(self):
        rm = pyvisa.ResourceManager("C:/Windows/System32/visa32.dll")
        self.inst = rm.open_resource('USB0::0x0699::0x0368::C031376::INSTR')
        self.inst.write("*IDN?")  # 返回示波器识别码
        # print(self.inst.read())
        self.inst.write('*CLS')  # 清除示波器状态
        self.inst.write('*ESR?')  # 查询标准状态寄存器的内容
        # print(self.inst.read())
        self.inst.write('ALLEV?')  # 使示波器返回所有事件及其消息
        # print(self.inst.read())
        # self.inst.write('FACTORY')  # 恢复出厂设置
        self.inst.timeout = 50000

    def close(self):
        self.inst.write('*CLS')  # 清除示波器状态
        self.inst.write('*ESR?')  # 查询标准状态寄存器的内容
        # print(self.inst.read())
        # self.inst.write('FACTORY')  # 恢复出厂设置
        self.inst.close()

    def set_horizontal(self, VOLTS, SCALE):
        self.inst.write('CH1:VOLTS %s' % VOLTS)  # 设置示波器的垂直刻度
        self.inst.write('HOR:MAIN:SCALE %se-3' % SCALE)  # 设置示波器的水平刻度
        self.inst.write('TRIG:MAIN:LEVEL 2.4')  # 触发装置设置为2.4V

    def operate_set(self):
        self.inst.write('AUTORANGE:STATE ON')  # 启动自动量程功能
        self.inst.write('ACQUIRE:STOPAFTER SEQUENCE')  # 按下RUN/STOP按钮将示波器设置为停止采集
        self.inst.write('ACQuire:STATE ON')  # 开始采集数据,将采集次数重置为0

    # self.inst.write('*OPC?')  # 查询OPC操作是否已完成
    # print(self.inst.read())

    def period_measure(self):
        self.inst.write('MEASU:IMMED:TYPE PERIOD')  # 设置为测量周期
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        global reperiod
        str_rperiod = self.inst.read()
        str_rperiod = str_rperiod[str_rperiod.rfind(' '):]
        rperiod = float(str_rperiod) * 1000
        rperiod = '%.2f' % rperiod
        reperiod = float(rperiod)
        print('实测周期:', reperiod)

    def frequency_measure(self):
        self.inst.write('MEASU:IMMED:TYPE FREQ')  # 设置为测量频率
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        global rfrequent
        str_frequency = self.inst.read()
        str_frequency = str_frequency[str_frequency.rfind(' '):]
        rfrequency = float(str_frequency)
        rfrequency = '%.2f' % rfrequency
        rfrequent = float(rfrequency)
        print('实测频率:', rfrequent)

    def duty_measure(self):
        self.inst.write('MEASU:IMMED:TYPE PDUTY')  # 设置为测量占空比
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        global reduty
        str_duty = self.inst.read()
        str_duty = str_duty[str_duty.rfind(' '):]
        rduty = float(str_duty)
        rduty = '%.2f' % rduty
        reduty = float(rduty)
        print('实测占空比:', reduty)

    def rise_time_measure(self):
        self.inst.write('MEASU:IMMED:TYPE RISE')  # 设置为测量上升时间
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        str_rise = self.inst.read()
        str_rise = str_rise[str_rise.rfind(' '):]
        rise = float(str_rise)
        rise = '%.2f' % rise
        riser = float(rise)
        print('实测上升时间:', riser)

    def positive_pulse_width_measure(self):
        self.inst.write('MEASU:IMMED:TYPE PWIDTH')  # 设置为测量正脉冲宽度
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        str_positive_pulse_width = self.inst.read()
        str_positive_pulse_width = str_positive_pulse_width[str_positive_pulse_width.rfind(' ')]
        positive_pulse_width = float(str_positive_pulse_width)
        positive_pulse_width = '%.2f' % positive_pulse_width
        print('实测正脉冲宽度为:', positive_pulse_width)

    def negative_pulse_width_measure(self):
        self.inst.write('MEASU:IMMED:TYPE NWIDTH')  # 设置为测量负脉冲宽度
        self.inst.write('MEASU:IMMED:VALUE?')  # 执行前面命令指定的立即示波器测量
        str_negative_pulse_width = self.inst.read()
        str_negative_pulse_width = str_negative_pulse_width[str_negative_pulse_width.rfind(' ')]
        negative_pulse_width = float(str_negative_pulse_width)
        negative_pulse_width = '%.2f' % negative_pulse_width
        print('实测负脉冲宽度:', negative_pulse_width)

    def basic_set(self):
        self.inst.write('*ESR?')  # 查询标准状态寄存器的内容
        # print(self.inst.read())
        self.inst.write('ALLEV?')  # 使示波器返回所有事件及其消息
        # print(self.inst.read())
        self.inst.write('WFMPRE?')  # 查询波形数据的编码类型
        # print(self.inst.read())

    def waveform_save(self):
        self.inst.write('RECALL:WAVEFORM' 'D:\TST-PRD\TST-01.CSV')
        self.inst.write('SELECT:REFC')

    def get_screen(self):
        self.inst.write('SAVE:IMAGE "D:/waveform_screen.bmp"')
        time.sleep(1)
        self.inst.write('FILESYSTEM:READFILE "D:/waveform_screen.bmp"')
        img = self.inst.read_raw()
        dt = datetime.now()
        fileName = dt.strftime("%Y%m%d_%H%M%S.bmp")  # 以当前时间建立文件名
        imgFile = open('./waveform/' + fileName, "wb")  # 打开图片文件,如果没有就会新建一个
        imgFile.write(img)
        imgFile.close()
        self.inst.write('FILESYSTEM:DELETE "D:/waveform_screen.bmp"')

def oscilloscoper():
    rm = Tektronix_MSO64()
    rm.set_horizontal(2.0, 10)
    # rm.operate_set()
    rm.period_measure()
    rm.frequency_measure()
    rm.duty_measure()
    rm.basic_set()
    rm.close()

if __name__ == "__main__":
    oscill = Tektronix_MSO64()
    oscill.set_horizontal(2.0, 1)
    # oscill.operate_set()
    oscill.period_measure()
    oscill.frequency_measure()
    oscill.duty_measure()
    # oscill.waveform_save()
    oscill.basic_set()
    # oscill.get_screen()
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将mso5104升级为mso5354,首先需要确保设备本身支持此升级。我们需要查阅mso5104的产品手册或咨询厂商,确认设备是否可以进行升级。 若设备支持升级,我们需要按照以下步骤进行操作: 1. 首先,备份设备中的所有重要数据。升级过程中可能会重置设备,导致数据丢失。 2. 登录到设备的管理界面。通常可以通过设备的IP地址,在浏览器中输入管理界面的网址来访问。 3. 在管理界面中,找到软件升级的选项。通常该选项位于“系统设置”、“维护”或类似的菜单下。 4. 在软件升级选项中,下载适用于mso5354的最新固件。该固件应该由厂商提供,并且用于升级mso5104到mso5354。 5. 确保电脑与设备连接,并将下载的固件上传到设备中。上传方法通常是通过点击“浏览”或类似按钮,选择固件文件,然后点击“上传”。 6. 等待固件上传完成,并确保上传过程中不要中断设备的电源。 7. 上传完成后,设备应该会自动进行升级。升级过程中设备会自动重启,这是正常现象。在升级完成前不要断开设备的电源。 8. 等待设备重新启动后,检查设备的版本信息,确认是否成功升级为mso5354。 需要注意的是,升级过程中可能出现问题,如断电、网络中断等,这可能导致设备损坏或升级失败。在进行升级之前,务必确认所有步骤都正确操作,并且确保设备在升级过程中不会遇到意外情况。如有需要,可以咨询厂商提供的技术支持或寻求专业人士的帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值