我是靠谱客的博主 鲤鱼铃铛,最近开发中收集的这篇文章主要介绍示波器实现全自动测试示波器实现全自动化测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

示波器实现全自动化测试

项目简介

在芯片硅后样片测试中通过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-PRDTST-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()

最后

以上就是鲤鱼铃铛为你收集整理的示波器实现全自动测试示波器实现全自动化测试的全部内容,希望文章能够帮你解决示波器实现全自动测试示波器实现全自动化测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部