简 介: 本文给出了对MSO24平板示波器进行网络获取图片和数据的方法。这位使用这台示波器进行电路分析打下基础。
关键词
: MSO24,波形获取
01 MSO24示波器
今天收到了MSO24平板示波器,超大的显示屏,简介的控制界面,令每一位电子工程师都不免心动。为了能够更大的发挥示波器数据采集和显示的功能,需要寻找如何通过网络结构获取该示波器采集的波形数据以及测量显示界面的图片。
一、平板示波器
下面给出了这款平板示波器的主要性能指标。可以看到这台设备除了标准的示波器的功能之外,还提供了对于波形分析的数学功能,波形发生器,通讯协议分析等功能。
▲ 图1.1 示波器的主要技术指标
▲ 图1.1.2 平板示波器的外观
▲ 图1.1.3 模拟输入通道的性能指标
- 驱动器(网盘)参考一起操作手册: 操作手册 : https://download.tek.com/manual/2-Series-MSO_Help-ZH-CN-077178200.pdf
二、相关资料
下面的一些资料是由 TEK 工程师发送过来的相关信息。
刚刚我找了一下相关的资料,目前可以提供的都比较零碎,今天实验室的样机没有挂在网上,我现在没法远程连接录屏,明天我重新给一个完整的操作给到您吧。目前包含以下操作:1. MSO24使用网线与电脑的连线和IP设置(参考视频);2.MSO24使用网线连接后的远程访问和操作方法(参考连接中的视频,明天会录制一个更详细的操作演示);3. 通过VISA控制示波器,读取相关的信息(明天时间允许,会提供一个简易说明)。
1、视频教程
在 2 Series MSO - Remote Control VNC 中给出了如何打开 MSO24中的 VNC功能,可以通过远程进行控制。但是问题来了: 远程通过什么软件来访问 VNC 呢?
▲ 图1.2.1 MSO相关的使用视频
2、TightVNC软件
下面是 TEK 发送过来的 TightVNC 软件。下面是按照TightVNC 的过程。最后一步是设置两个密码:
- VNCServer : a1234567
- Administrator: a1234567
▲ 图1.2.2 安装 TightVNC
▲ 图1.2.3 安装之后 TightVNC的波形界面
3、下载 TightVNC软件
▲ 图1.2.4 TightVNC 软件下载网站
三、设置高分辨率
为了使得示波器中的波形分辨率更高,用于精细的测量。可以在水平参数设置中: 采集模式选择高分辨率。
▲ 图1.3.1 设置采集高分辨率
下面是在水平设置中设置采集模式的过程:
- 在水平栏双击,弹出水平设置对话框;
- 选择下面的采集设置栏,切换到采集设置界面;
- 在采集模式中选择“高分辨率”;
▲ 图1.3.2 设置高分辨率过程
02 编程控制
一、编程资料下载
下面是 MSO24 示波器编程手册下载连接:
编程手册 : https://www.tek.com.cn/manual/oscilloscope/2-series-mso-programmer-manual-2-series-mso
▲ 图2.1.1 编程手册下载界面
二、基本编程测试
1、读取基本信息
下面Python 编程读取MSO24 的基本信息。
from headm import *
import pyvisa
import numpy
rm = pyvisa.ResourceManager()
mso24 = None
def mso24open(ipadd=117):
global mso24
if ipadd == 0:
mso24 = rm.open_resource('TCPIP::192.168.0.117::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
mso24 = rm.open_resource(ipstr)
mso24.chunk_size = 20480
mso24.read_termination = '\n'
mso24.write_termination = '\n'
printf(mso24)
def mso24read(ch1=1, ch2=0, ch3=0, ch4=0):
global mso24
if mso24 == None:
printf('ERROR:MSO24 has not been opened !')
return[]
mso24.write('*IDN?')
tempdata = mso24.read()
return tempdata
mso24open()
d = mso24read()
printf(d)
输出的结果为:
TCPIPInstrument at TCPIP::192.168.0.117::INSTR
TEKTRONIX,MSO24,C012312,CF:91.1CT FV:1.42.6.324
2、读取通道波形
mso24.write(':DATA:SOURCE CHAN%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:START 10000')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 1')
mso24.write(':WFMOutpre?')
data = mso24.read()
TCPIPInstrument at TCPIP::192.168.0.117::INSTR
1;8;ASCII;RI;INTEGER;MSB;"Ch1, DC coupling, 84.48V/div, 200us/div, 100000 points, Hi Res mode";90001;Y;LINEAR;"s";20.0E-9;3.1250E-9;40001;"V";13.2000E-3;0.0E+0;1.2660;TIME;ANALOG;0.0E+0;0.0E+0;0.0E+0;1;VECTOR
3、读取波形显示数据
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 20000')
mso24.write(':DATA:STOP 28000')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':CURVE?')
data = [int(s) for s in mso24.read().split(',') if s.isdigit()]
▲ 图2.2.1 显示的数据波形
三、读取校正后的波形
利用 “:WAVFRM?” 获得示波器采集到的相关参数,对读取的数据进行校正。
from headm import *
import pyvisa
import numpy
rm = pyvisa.ResourceManager()
mso24 = None
def mso24open(ipadd=117):
global mso24
if ipadd == 0:
mso24 = rm.open_resource('TCPIP::192.168.0.117::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
mso24 = rm.open_resource(ipstr)
mso24.chunk_size = 0x20000 #20480
mso24.read_termination = '\n'
mso24.write_termination = '\n'
mso24.clear()
printf(mso24)
def mso24read(ch1=1, ch2=0, ch3=0, ch4=0):
global mso24
if mso24 == None:
printf('ERROR:MSO24 has not been opened !')
return[]
if ch1!=0 and ch2==0 and ch3==0 and ch4== 0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 100000')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata))]
return x,rawdata
if ch1!=0 and ch2!=0 and ch3==0 and ch4== 0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 100000')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata1 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata1))]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch2)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 100000')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata2 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
return x,rawdata1,rawdata2
mso24open()
x,y1,y2 = mso24read(1,2)
plt.plot(array(x)*1000,y1,label='Channel1')
plt.plot(array(x)*1000,y2, label='Channel2')
plt.xlabel("Time(ms)")
plt.ylabel("Voltage(V)")
plt.legend(loc='upper right')
plt.grid(True)
plt.tight_layout()
plt.show()
▲ 图2.3.1 读取的两个通道的数据波形
▲ 图2.3.2 两路采集到的波形
※ 总 结 ※
本文给出了对MSO24平板示波器进行网络获取图片和数据的方法。这位使用这台示波器进行电路分析打下基础。
对数据进行平滑
#--------------------------------------------------------
if ch1!=0 and ch2==0 and ch3==0 and ch4== 0:
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
printf(points)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')[-1]
value = [float(s) for s in data.split(',')]
rawdata = [v*yunit+yoffset for v in value]
x = [i * xunit-xoffset for i in range(len(rawdata))]
return x,rawdata
if ch1!=0 and ch2!=0 and ch3==0 and ch4== 0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
printf(points)
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata1 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata1))]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch2)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata2 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
return x,rawdata1,rawdata2
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2022-09-23
#
# Note:
#============================================================
from headm import *
from tsmodule.tsvisa import *
#------------------------------------------------------------
mso24open()
x,y1,y2 = mso24read(1,2)
avg = 64
num = len(x)//avg
x = [mean(x[i*avg:i*avg+avg]) for i in range(num)]
y1 = [mean(y1[i*avg:i*avg+avg]) for i in range(num)]
y2 = [mean(y2[i*avg:i*avg+avg]) for i in range(num)]
x = array(x)*1e3
plt.plot(x,y1,linewidth=1,label='Channel1')
plt.plot(x,y2,linewidth=1,label='Channel2')
plt.xlabel("Time(ms)")
plt.ylabel("Voltage(V)")
plt.legend(loc='upper right')
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
▲ 图3.1 平均后的采集波形
■ 相关文献链接:
● 相关图表链接: