PicoSDK (Software Development Kit)是Pico Technology的软件开发包,许多PicoScope产品的用户把PicoScope示波器当作一个数据采集设备来用,基于PicoScope的硬件开发自己的用户软件程序。不少人发现PicoSDK与传统台式示波器的二次开发/远程控制编程方式非常的不同,同时PicoSDK的响应速度和灵活性把传统示波器远远地甩在后面,这种差别来源于深层次的设计思路不同。本文深入解析两者的设计原理,揭示PicoSDK性能优越之谜,并通过真实编程对比测试。
传统台式示波器软件是如何工作的?
传统台式示波器除了核心的调理采集电路以外,还有一块系统板,中低端的示波器采用基于ARM的嵌入式架构,运行嵌入式Linux操作系统或者基于X86的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的工作架构和传统高端台式示波器十分类似。
用户二次开发的程序不能直接访问示波器硬件,而是绕了一个大圈子,最终访问到示波器内置的软件程序,再由示波器软件代行控制硬件之事。用户程序和示波器软件之间就需要一套命令套接字来实现控制和数据传递,通行的做法是使用VISA通信标准传输SCPI命令集,或者基于ActiveX运行远程VBS脚本语言等等。示波器软件中运行着一个远程命令服务器,专门接收和翻译远程控制命令,把它们翻译成底层系统调用的API,得到结果后再翻译回来传输给远程用户程序。
因此传统的远程控制或二次开发,需要在运行用户程序的计算机上安装VISA驱动库或者专门的ActiveX库,再基于这些库编写控制程序,所有与示波器的交互不外乎读写相应的命令字符。
如何使用PicoSDK?
安装和配置PicoSDK的大略需要三步:
第一步,安装PicoScope6软件,其中的作为驱动支持。
第二步,安装PicoSDK支持库,其中包含了用于用户程序开发的编程库和必要的头文件。
最后,参考PicoTechnology官方给出的例程代码,并试运行测试程序。更详细的安装和配置指南请向PicoTechnology技术支持索取。
PicoSDK的用户程序是基于PicoScope的动态链接库直接进行API系统调用,动态链接库底层直接连接到PicoScope的USB驱动程序。可以说是实现了程序流的最短路径。
因此PicoSDK与传统示波器的最大区别在于:一言以蔽之,没有中间层赚差价。
这个差价一是造成了响应时间被拖长,二是限制了功能的灵活性。
详细说来是这样的:
PicoSDK的优点1:响应快,无延迟
上文已经提到传统示波器的二次开发程序弯弯绕绕,过五关斩六将才到达示波器底层硬件,这中间会产生多次数据拷贝,数据传输,包括命令集的解析和数据结构重组。不难想象,费时弥久。而PicoSDK简单直接,API调用直接穿入硬件核心,只产生极少数几次数据拷贝,并且没有复杂的命令和数据格式需要解析转换,原始波形拿来就用。下文我们会举一个例子,发现同样是采集和获取一段数据波形,PicoSDK比传统示波器快一倍以上。
PicoSDK的优点2:支持连续数据采集
我们知道示波器的采集方式是不定期突发式的,每一次从触发到把数据从硬件上传到软件层,再经过软件的处理和显示以后才能开始下一次触发采集。这个过程中的信号波形我们是捕捉不到的,称之为死区。而与之对应的数据采集卡,可以连续不断的将信号波形捕获并存储到计算机硬盘上。传统的示波器只能基于触发模式一段一段的工作,没办法连续采集波形,而PicoSDK支持一种stream(流模式),底层硬件可以源源不断地把数据送入一个用户程序提供的缓存区域,用户程序也不断地把缓存中的数据取出来,或是存储到硬盘上,或是直接处理。在这种模式下,数据连续采集,永远不会间断或丢失,硬盘有多大就能采集多少数据。换句话说,PicoSDK既能像传统示波器一样基于触发信号来突发地采集波形,也可以如数据采集卡一样连续不间断的进行流模式采集。翻遍各种传统示波器的编程手册,也寻觅不到数据流采集模式的字眼,这是因为在原理上它就无法实现。上面已经提到,传统示波器数据要穿越多个软件中间层,因此延迟很大,实现不了快速数据存取。PicoSDK的底层硬件驱动和上层用户程序可以访问同一个内存缓存空间,因此可以快速存取数据。
PicoSDK的优点3:支持并发机制
上文已经提到,示波器采集和数据传输处理需要耗费一定的时间,在传统示波器中,这个过程是阻塞的,或者需要靠不断查询状态来确认完成了没有,用户程序在这个过程中只能无谓地等待,做不了别的事,白白浪费了运算时间。而PicoSDK的采集和数据拷贝函数都支持回调,用户程序可以在采集和数据拷贝的过程中处理上一组数据,完成计算或者绘图等操作,过程中如果采集完成,会自动打断当前进程,缓存新的数据,等待处理。
当采集数据量小时,PicoSDK的优势不明显或略慢于传统示波器,随着数据量的增加,PicoSDK能够比传统示波器快50%左右。且由于工作机制不同,PicoSDK在数据采集阶段不是取用已缓存的旧数据,而是重新捕获,因此必须受限于物理上的等待时间,同时PicoSDK在数据拷贝上只花费极少的时间,在编程实践中可以把等待捕获的物理时间与后续的数据处理并行起来。而传统示波器数据采集环节几乎不耗费时间,这是因为它取用了缓存中的旧数据,而数据拷贝环节耗时极长,不利于并行编程运算,最终的总耗时也比PicoSDK慢一倍以上。数据拷贝时间的巨大差别,也导致了PicoSDK能够给支持连续不断的流模式采集,而传统示波器绝无可能。
当然,PicoSDK也有一些缺点,例如无法直接调用示波器的测量,串行解码等功能,需要援用第三方信号处理库来实现。同时PicoScope6也支持一套自动化命令集,在不使用SDK的时候能够直接调用PicoScope6已有的软件功能实现自动化测试。
以上内容由纳米软件整理,如想了解有关PICO示波器二次开发或者其他仪器二次开发请访问纳米软件。