首页 > 编程语言 > 详细

python 控制泰克示波器

时间:2020-06-17 20:52:22      阅读:284      评论:0      收藏:0      [点我收藏+]

NI-VISA这是一种美国的一家公司的协议,主要用来和仪器通信,当然这只是一种通信的格式,具体的操作我们还是要参照示波器的说明书。

我们直接采用Python里面自带的NI—VISA库文件。pip install pyvisa

通过VISA发送相应命令(示波器编程文档有命令集)即可完成对示波器的控制,并且通过VISA可以接收返回值,比如波形数据等。

这里是通过USB来与示波器通信

1         rm = visa.ResourceManager()
2         # res = rm.list_resources()
3         # print(rm)
4         # print(res)
5         self.inst = rm.open_resource(USB0::0x0699::0x0528::C019161::INSTR)

第一行是得到visa资源管理器,第二行的res会是返回当前与电脑连接的端口地址,采用print()将其打印出来即可看到你的示波器地址。然后就可以注释掉了,然后使用第五行的代码即可打开示波器通信通道。

源码如下:

  1 import matplotlib.pyplot as plt
  2 import visa
  3 import time
  4 
  5 class Tektronix_MSO64:
  6     def __init__(self):
  7         visa_dll = c:/windows/system32/visa32.dll
  8         rm = visa.ResourceManager()
  9         # res = rm.list_resources()
 10         # print(rm)
 11         # print(res)
 12         self.inst = rm.open_resource(USB0::0x0699::0x0528::C019161::INSTR)
 13         ##############################################
 14         self.inst.write("*IDN?")
 15         print(self.inst.read())
 16         self.inst.write(CLEAR)
 17         self.inst.write(ACQuire:MODe?)
 18         print(self.inst.read())
 19         self.inst.timeout = 25000
 20         self.inst.write(ACQUIRE:STOPAFTER RUNSTOP)
 21         self.inst.write(ACQuire:STATE RUN)
 22 
 23 
 24     def set_HORIZONTAL(self,POSITION,SCALE):#scale us
 25         set_POSITION=HORIZONTAL:POSITION %s%POSITION
 26         set_SCALE=HORIZONTAL:SCALE %se-6%SCALE
 27         self.inst.write(set_POSITION)
 28         self.inst.write(set_SCALE)
 29 
 30     def open_ch(self,ch):
 31         op_ch=DISplay:GLObal:CH%s:STATE ON%ch
 32         self.inst.write(op_ch)
 33 
 34     def close_ch(self,ch):
 35         cl_ch=DISplay:GLObal:CH%s:STATE OFF%ch
 36         self.inst.write(cl_ch)
 37 
 38     def vertical_ch(self,ch,scale,position):
 39         ver_ch=CH%s:BANDWIDTH FULl%ch
 40         ver_scale=CH%s:SCAle %sE-3%(ch,scale)#mv
 41         ver_position=CH%s:POSition %s%(ch,position)
 42         ver_dc=CH%s:COUPLING DC%ch
 43         ver_ter=CH%s:TERMINATION 10.0E+5%ch
 44         self.inst.write(ver_ch)#at its maximum bandwidth
 45         self.inst.write(ver_scale)
 46         self.inst.write(ver_position)
 47         self.inst.write(ver_dc)
 48         self.inst.write(ver_ter)
 49 
 50     def trigger_set(self,ch,level):
 51         trigger_ch=TRIGGER:A:EDGE:SOURCE CH%s%ch
 52         trigger_level=TRIGGER:A:LEVEL:CH4 %s%level
 53         self.inst.write(TRIGGER:A:EDGE:COUPLING DC)
 54         self.inst.write(trigger_ch)
 55         self.inst.write(TRIGGER:A:EDGE:SLOPE RISE)
 56         self.inst.write(trigger_level)
 57 
 58     def begin_trigger(self):
 59         self.inst.write(ACQuire:STOPAfter SEQuence)
 60         while 1:
 61             time.sleep(1)
 62             self.inst.write(TRIGGER:STATE?)
 63             TRIGGER_STATE =self.inst.read()
 64             if TRIGGER_STATE[0] == "S":
 65                 print(have triggered)
 66                 break
 67 
 68     def data_caul(self,ch,div,position,divH,positionH):
 69         caul_ch=DATA:SOURCE CH%s%ch
 70         self.inst.write(caul_ch)
 71         self.inst.write(DATa:ENCdg ASCIi)
 72         self.inst.write(WFMOUTPRE:BYT_NR 4)
 73         self.inst.write(DATA:START 1)
 74         self.inst.write(DATA:STOP 250e6)
 75         self.inst.write(WFMOUTPRE?)
 76         preamble= self.inst.read()
 77         #########################################################
 78         j=0
 79         point_str= 
 80         for i in range(0,len(preamble)):
 81             if preamble[i]==,:
 82                 j+=1
 83             if j==4:
 84                 point_str=point_str+preamble[i]
 85             elif j==5:
 86                 point_len=len(point_str)
 87                 point_str=point_str[2:(point_len-6)]
 88                 break
 89         point_int=int(point_str)
 90         print(point_int)
 91         ######################################################
 92         data = self.inst.query(CURVE?)
 93         x = []
 94         dat = [ ]
 95         dat1 = []
 96         j = 0
 97         for i in range(0, len(data)):
 98             if data[i] == ,:
 99                 dat1.append(float(dat[j])/32000*div*5-div*position)
100                 x.append((int(j)/point_int*divH*10-divH*10*positionH/100)*0.000001)
101                 j += 1
102                 dat.append( )
103             else:
104                 dat[j] = dat[j] + data[i]
105         # plt.plot(x, dat1, color=‘g‘, linestyle=‘-‘)
106         plt.plot(x, dat1)
107 
108 
109 
110 
111 if __name__ == "__main__":
112     my=Tektronix_MSO64()
113     my.set_HORIZONTAL(10,200)
114     fig = plt.figure()
115     # my.close_ch(1)
116     my.open_ch(4)
117     my.open_ch(3)
118     my.open_ch(2)
119     my.open_ch(1)
120     my.vertical_ch(4,2000,2)
121     my.vertical_ch(3, 2000,2)
122     my.vertical_ch(2, 2000,2)
123     my.vertical_ch(1, 2000,2)
124     my.trigger_set(4,2)
125     my.begin_trigger()
126     my.data_caul(4,2,2,200,10)
127     my.data_caul(3,2,2,200,10)
128     my.data_caul(2,2,2,200,10)
129     my.data_caul(1,2,2,200,10)
130     plt.show()

第7行代码感觉没有用到,因为调用的python自带的visa库。

根据示波器编程文档,通过visa发送相应命令,接收相应返回值即可完成对示波器的控制,获取数据等,具体命令可以参考相应的编程文档。

此代码具有以下功能:

设置水平轴相关设置;

设置通道相关设置;

打开,关闭相应通道;

设置触发;

开启一次触发;

获取波形数据,并处理数据,然后通过plot()显示出来;

 

python 控制泰克示波器

原文:https://www.cnblogs.com/caiya/p/13154580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!