• 泰克示波器控制scpi,程序读取波形数据并显示


    泰克示波器控制scpi,程序读取波形数据并显示,py程序
    

    1. """
    2. tektronix MDO3000 series oscilloscope test
    3. """
    4. import numpy as np
    5. import pyvisa
    6. import sys
    7. from struct import unpack #not needed for newest implementation
    8. import matplotlib.pyplot as plt
    9. channel_num = 4 #please select number of channels to read
    10. v_list=[i for i in range(channel_num)]
    11. time_list=[i for i in range(channel_num)]
    12. try:
    13. rm = pyvisa.ResourceManager()
    14. # r_list = rm.list_resources()
    15. # my_inst=rm.open_resource(r_list[0])
    16. my_inst=rm.open_resource('TCPIP0::192.168.0.65::INSTR')
    17. except Exception as e:
    18. print("Could not create instrument instance; {0}".format(e))
    19. sys.exit()
    20. # 得到此通道的波形数据
    21. def acq_one_wave(channel):
    22. try:
    23. my_inst.write(':DAT:SOU '+channel)
    24. my_inst.write(':DAT:ENCdg RPB')
    25. my_inst.write(':DAT:WIDTH 2')
    26. my_inst.write(':HEADer 1')
    27. print(my_inst.query('WFMO?'))
    28. q1 = my_inst.query(':WFMPRE:YMULT?')
    29. print(q1)
    30. ymult = float( q1[10:])
    31. yzero = float(my_inst.query(':WFMPRE:YZERO?')[10:])
    32. yoff = float(my_inst.query(':WFMPRE:YOFF?')[10:])
    33. xincr = float(my_inst.query(':WFMPRE:XINCR?')[10:])
    34. # ADC_wave = my_inst.query_binary_values(':CURVE?', datatype='H', is_big_endian=True, container = np.array)
    35. ##读取波形数据
    36. my_inst.write(':CURVE?')
    37. osc_data=my_inst.read_raw()
    38. print(osc_data)
    39. # headerlen = 2 + int(osc_data[1])
    40. headerlen = 13
    41. print(osc_data[1])
    42. header = osc_data[:headerlen]
    43. ADC_wave = osc_data[headerlen:-1]
    44. # 两个字节组成一个int16,为幅度值,高位在前,低位在后
    45. ADC_wave = np.array(unpack('>%sH' % str(int(len(ADC_wave)/2)),ADC_wave))
    46. Volts = (ADC_wave - yoff) * ymult + yzero
    47. Time = np.arange(0, xincr * len(Volts), xincr)
    48. return Time, Volts
    49. except Exception as e:
    50. print("Error reading waveform from"+channel)
    51. print("Error: {0}".format(e))
    52. my_inst.close()
    53. sys.exit()
    54. if __name__ == "__main__":
    55. try:
    56. print(my_inst.query('*IDN?'))
    57. my_inst.write(':ACQ:STOPAfter SEQ')
    58. # 读取不同通道的波形数据
    59. for i in range(channel_num):
    60. channel_num = 'CH' + str(i + 1)
    61. Time, Volts = acq_one_wave(channel_num)
    62. # normalization
    63. # temp_min = np.min(Volts)
    64. # temp_max=np.max(Volts)
    65. # Volts=(Volts-temp_min)/(temp_max-temp_min)
    66. plt.plot(Time, Volts)
    67. time_list[i] = Time
    68. v_list[i] = Volts
    69. plt.show()
    70. except Exception as e:
    71. print("Error retrieving data: {0}".format(e))
    72. # my_inst.close()
    73. sys.exit()

    程序运行如图 

  • 相关阅读:
    Vue入门基础
    Lamda表达式的推演过程
    外设篇:串口通信
    [附源码]计算机毕业设计springboot-菜篮子系统
    【c++】——类和对象(上)——万字详细解疑
    最新AI创作系统ChatGPT系统运营源码+支持GPT-4多模态模型
    Pythonmock基本使用
    (13.1)Latex符号表示及公式撰写
    kali部署dvwa靶场
    《简历宝典》13 - 简历中“项目经历”,内功学习 - 下篇
  • 原文地址:https://blog.csdn.net/HETONGDE/article/details/126405703