有没有这样一种情况,就是通过脚本控制你的测量设备,比如示波器,那是不是就可以不用人为的去分析数据,直接由脚本就可以完成整个操作了。
是的,有这样一种方式就可以,就是利用python中的pyvisa库,实现这样的控制。
pyvisa是什么?
pyvisa中的visa全程是虚拟一起软件结构(Virtual Instrument Software Architecture),是python的一个第三方库,可以用来控制各种测量仪器,比如示波器,万用表,频谱仪等等。并且它支持包括Ethernet(LAN), USB, GPIB(通用接口总线), RS232(一种串行通讯接口)等接口的数据接入。
在python中,可以直接通过”pip install pyvisa”就可以安装这个实用的测量仪器第三方库。
在安装了pyvisa之后,为了保证pyvisa能够正常工作,还需要安装NI-VISA库,然后就可以开始连接相应的设备,也就是通过支持的接口。
LAN:[TCPIP0::192.168.0.1::inst0::INSTR]
GPIB:[GPIB0::1::INSTR]
Serial:[serial('COM1','BaudRate',4800)]
USB:[USB::XXX::XXX::XXX::INSTR]
所以连接示波器的指令就是连接这个接口地址,假设接口是个网口地址
Visa_address=”[TCPIP0::192.168.0.1::inst0::INSTR]”
然后建立管理器,再去连接这个地址
Rm=pyvisa.ResourceManager()
Scope=rm.open_resource(visa_address)
此时建立了一个示波器对象Scope,可以对它进行控制,比如写入和读取,方法分别是write(), query()。
常用的写入项:
“*RST”: 重启示波器
“AUTOSET EXECUTE”: 自动设置示波器
“HORIZONTAL”: 采样率
常用的读取项:
“MEASU:MEAS1: xxx”: 添加测量项
“MEASU:MEAS1: SOU CH1”: 设置测量通道为1
“MEASU:MEAS1: xxx?”: 读取测量结果
获取示波器信息方式有两种,一种是用query(‘*idn?’),一种是先write(‘*idn?’)写入,然后使用read()读的方式。就可以获得示波器的厂家型号,仪器型号,序列号,固件的版本号等等信息。
示波器中最重要的就是所抓取的波形了,那么它的波形数据如何读取。
对于波形数据的抓取,可以利用query_ascii_values去读取ASCII数据,或者读取二进制数据的query_binary_values。
最后就是工具的关闭了,也就是连接上的示波器对象和整个测量仪器管理器。
Scope.close()
Rm.close()
可以看到,python控制示波器的指令中,有很多指令是示波器所固有的,那如何去理解这些指令到底是干什么用的呢?对于这个,其实这些指令都可以叫SCIP命令,它们可以通过去厂家的官方网站进行下载。
进入官网之后,找到相应的示波器型号,然后下载它的manual(说明书),一般名字会是编程手册,比如下图:
比如说获取示波器长度的指令“horizontal: recordlength?”就可以从中找到。
获取示波器长度指令:
Record=int(scope.query(‘horizontal: recordlength?’))
Scope.write(‘date:stop {}’.format(record))
在示波器正式连接并调整好参数之后,就可以看是采集了,可以选择单次或多次运行。
Scope.write(‘acquire:stopafter SEQINCE’) #单次运行
Scope.write(‘acquire:stopafter run’) #多次运行
运行之后,如何采集示波器的数据,可以通过诸如指令:scope.query_binary_values(‘curve?’, datatype=’h’,container=np.array)获取到它的数据,如果想具体到某一项,可以在相应示波器manual中寻找。
不过上面采集的数据会比较乱,要通过公式转换,才能得到示波器中我们看到的电压值。
最后,在有是电压值和时间参数之后,就可以得到坐标系的X轴和Y轴,然后就可以绘制出示波器的图像,一般会用到Python中的图形绘制库matplotlib和科学计算库numpy。