• 泰克示波器控制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()

    程序运行如图 

  • 相关阅读:
    SpringBoot集成OpenFeign实现文件下载
    设计模式-单例模式
    46. 从零开始学springboot: spel结合aop实现动态传参
    深度学习预备知识(线性代数)
    基于SSM的IT运维管理系统
    安卓开发Android studio学习笔记14:用户注册登录(案例演示)
    Node.js 入门教程 13 在 Node.js 中从命令行接收输入
    选座位吧(10)
    数据结构学习笔记——前、中、后缀表达式的转换(栈的应用)
    C++快速入门 - 2(几分钟让你快速入门C++)
  • 原文地址:https://blog.csdn.net/HETONGDE/article/details/126405703