gpib通讯方式优缺点,gpib接口设计

  

  PicoSDK(软件开发工具包)是Pico技术的软件开发包。PicoScope产品的很多用户都是使用PicoScope示波器作为数据采集设备,并基于PicoScope的硬件开发自己的用户软件程序。很多人发现PicoSDK在二次开发/遥控编程模式上与传统的桌面示波器有很大的不同。同时,PicoSDK的响应速度和灵活性把传统示波器远远地甩在后面,的这种差异来自于深层次的设计理念。本文深入分析了两者的设计原理,揭示了PicoSDK优越性能的奥秘,并通过真实编程对比测试和真实锤子测试加以证明。   

  

     

  

  传统台式示波器软件是如何工作的?   

  

  传统的台式示波器除了核心的调理和采集电路外,还有一个系统板。中低端示波器采用基于ARM的嵌入式架构,运行基于X86的嵌入式Linux操作系统或WinCE操作系统。控制示波器的软件界面在这个嵌入式操作系统上全屏运行,用户看不到操作系统界面本身。在一些高端示波器中,设计了PC系统板,基于X86/X64处理器,运行WindowsXP/7/10等桌面操作系统。示波器的硬件板通过PCIE或10G以太网连接到PC主板。示波器的接口软件是Windows下的应用程序,通过调用底层硬件驱动程序来控制示波器采集数据。用户通常可以退出该应用程序并返回到Windows桌面。   

  

  PicoScope6 软件是如何工作的?   

  

  作为一台PC示波器,每台PicoScope产品都需要连接一台电脑,安装一套PicoScope6软件来控制它们的工作。在PicoScope6软件中,可以设置示波器的档位和时基,观察、测量、分析和保存波形。与传统的桌面示波器相比,PicoScope6完全一样,而且是免费的。甚至一些高端桌面示波器还有顺序触发、历史波形模式、自定义数学运算、模板测试、串行解码等功能,完全免费。   

  

  PicoScope6软件运行在Windows/Linux操作系统上,通过调用底层USB驱动软件来控制PicoScope硬件。它的系统API调用都是通过动态链接库PicoIPP.dll实现的。所以,其实PicoScope的工作架构和传统的高端台式示波器非常相似。   

  

     

  

  图1不同示波器的硬件和软件架构比较   

  

  如何进行传统示波器编程?   

  

  以美国某著名示波器品牌为例,我们可以从其技术文档中提取软件设计的架构。   

  

     

  

  图2美国某著名示波器品牌二次开发的软件架构   

  

  不难看出,用户的二次开发程序并不能直接访问示波器硬件,而是绕了一大圈,最终访问示波器的内置软件程序,然后示波器软件代为控制硬件。程序和示波器软件之间需要一组命令套接字来实现控制和数据传输。常见的做法是使用VISA通信标准传输SCPI命令集,或者运行基于ActiveX的远程VBS脚本语言等。示波器软件中运行有一个远程命令服务器,专门负责接收和翻译远程控制命令,翻译成底层系统调用的API,然后再把结果翻译回来传输给远程用户程序。   

  

  所以传统的远程控制或者二次开发需要在运行用户程序的电脑上安装VISA驱动库或者专门的ActiveX库,然后基于这些库编写控制程序。与示波器的所有交互无非是读写相应的命令字符。   

  

  科普知识:SCPI命令,全称是可编程仪器标准命令,起源于90年代的IEEE488.2标准,也就是大家熟知的GPIB接口。后来大部分可编程仪器都是在GPIB的基础上模拟扩展自己的系统,一直没有改变。如何使用PicoSDK?   

  

  安装和配置PicoSDK有三个步骤:第一步是安装PicoScope6软件,该软件用作驱动程序支持。第二步,安装PicoSDK支持库,包含编程库和用户程序开发必需的头文件。最后参考PicoTechnology官方给出的例程代码,尝试运行测试程序。更详细的安装   

  

  PicoSDK的用户程序基于PicoScope的动态链接库直接调用API系统,动态链接库底层直接连接PicoScope的USB驱动。可以说实现了程序流程的最短路径。   

  

  因此,PicoSDK和传统示波器   

器的最大区别在于:一言以蔽之,没有中间层赚差价。

  

这个差价一是造成了响应时间被拖长,二是限制了功能的灵活性。

  

  

小结底层软件架构对比如下:

  


  

  


  

图3 PicoSDK与传统示波器的二次开发软件架构对比

  


  

详细说来是这样的:

  

PicoSDK的优点1响应快,无延迟

  

上文已经提到传统示波器的二次开发程序弯弯绕绕,过五关斩六将才到达示波器底层硬件,这中间会产生多次数据拷贝,数据传输,包括命令集的解析和数据结构重组。不难想象,费时弥久。而PicoSDK简单直接,API调用直接穿入硬件核心,只产生极少数几次数据拷贝,并且没有复杂的命令和数据格式需要解析转换,原始波形拿来就用。下文我们会举一个例子,发现同样是采集和获取一段数据波形,PicoSDK比传统示波器快一倍以上。

  

PicoSDK的优点2:支持连续数据采集

  

我们知道示波器的采集方式是不定期突发式的,每一次从触发到把数据从硬件上传到软件层,再经过软件的处理和显示以后才能开始下一次触发采集。这个过程中的信号波形我们是捕捉不到的,称之为死区。而与之对应的数据采集卡,可以连续不断的将信号波形捕获并存储到计算机硬盘上。传统的示波器只能基于触发模式一段一段的工作,没办法连续采集波形,而PicoSDK支持一种stream(流模式),底层硬件可以源源不断地把数据送入一个用户程序提供的缓存区域,用户程序也不断地把缓存中的数据取出来,或是存储到硬盘上,或是直接处理。在这种模式下,数据连续采集,永远不会间断或丢失,硬盘有多大就能采集多少数据。换句话说,PicoSDK既能像传统示波器一样基于触发信号来突发地采集波形,也可以如数据采集卡一样连续不间断的进行流模式采集。翻遍各种传统示波器的编程手册,也寻觅不到数据流采集模式的字眼,这是因为在原理上它就无法实现。上面已经提到,传统示波器数据要穿越多个软件中间层,因此延迟很大,实现不了快速数据存取。PicoSDK的底层硬件驱动和上层用户程序可以访问同一个内存缓存空间,因此可以快速存取数据。

  


  

  


  

图4 示波器普通采集模式与流模式

  

PicoSDK的优点3支持并发机制

  

上文已经提到,示波器采集和数据传输处理需要耗费一定的时间,在传统示波器中,这个过程是阻塞的,或者需要靠不断查询状态来确认完成了没有,用户程序在这个过程中只能无谓地等待,做不了别的事,白白浪费了运算时间。而PicoSDK的采集和数据拷贝函数都支持回调,用户程序可以在采集和数据拷贝的过程中处理上一组数据,完成计算或者绘图等操作,过程中如果采集完成,会自动打断当前进程,缓存新的数据,等待处理。

  

关于PicoSDK响应快的特点,我们通过一个真实编程案例,实锤证明!

  

首先我们通过NI-VISA库,经过USB-TMC接口连接一台台式示波器(美国某知名品牌350MHz四通道型号),然后编写一段python程序控制改示波器采集一小段波形,并传输到用户程序的内存中。代码如下,程序分别记录了示波器采集信号和将数据拷贝到计算上的时间。(为了简化过程,程序连接示波器后,相应的垂直档位和时基设置手动完成)。

  


  

  


  


  


  

运行结果:

  

1) 时基100us/div,采样率500MS/s,总数据量500Kpts.数据采集时间接近0(理论值1ms,想必该示波器的工作机制是先采集后触发,故实际不需要等待示波器采集新的数据,直接从缓存中取用已有数据),相比之下数据拷贝时间较大,约8.3ms.总时间8.3ms

  

2) 时基2ms/div,采样率500MS/s,总数据量10Mpts,数据采集时间仍然接近0,而数据拷贝时间增大到了1.49s(应包含了准备好下一次缓存数据的时间),总时间1.49s

  

3) 时基100ms/div,采样率10MS/s,总数据量保持10Mpts,此时数据采集时间有所增加达到1ms(理论时间1s,1ms应该是底层数据预处理所消耗的时间),但数据拷贝时间竟然增加到了2.34s,总时间2.34s

  

  

同样的测量环境与设置,我们再来看PicoSDK的结果(PicoScope2408B 100MHz示波器),通过USB连接示波器,并安装好SDK库,运行python程序如下(节选):

  


  

  


  


  

运行结果:

  

1) 时基100us/div,采样率500MS/s,总数据量500Kpts.数据采集时间18ms,与传统示波器不同的是,PicoSDK不取用缓存的数据,而是得到指令后再采集,数据拷贝时间1.4ms,总时间19.4ms,长于传统示波器

  

2) 时基2ms/div,采样率500MS/s,总数据量10Mpts,数据采集时间0.2s(理论值20ms),而数据拷贝时间增大到了0.26s,总时间0.46s,传统示波器的30%

  

3) 时基100ms/div,采样率10MS/s,总数据量保持10Mpts,数据采集时间增加到了1.14s(理论值1s),数据拷贝时间0.26s,总时间1.4s,传统示波器的60%

  

  

由此我们得出结论,当采集数据量小时,PicoSDK的优势不明显或略慢于传统示波器,随着数据量的增加,PicoSDK能够比传统示波器快50%左右。且由于工作机制不同,PicoSDK在数据采集阶段不是取用已缓存的旧数据,而是重新捕获,因此必须受限于物理上的等待时间,同时PicoSDK在数据拷贝上只花费极少的时间,在编程实践中可以把等待捕获的物理时间与后续的数据处理并行起来。而传统示波器数据采集环节几乎不耗费时间,这是因为它取用了缓存中的旧数据,而数据拷贝环节耗时极长,不利于并行编程运算,最终的总耗时也比PicoSDK慢一倍以上。数据拷贝时间的巨大差别,也导致了PicoSDK能够给支持连续不断的流模式采集,而传统示波器绝无可能。

  

当然,PicoSDK也有一些缺点,例如无法直接调用示波器的测量,串行解码等功能,需要援用第三方信号处理库来实现。同时PicoScope6也支持一套自动化命令集,在不使用SDK的时候能够直接调用PicoScope6已有的软件功能实现自动化测试。详细内容可参考PicoScope6用户手册。

相关文章