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的工作架构和传统高端台式示波器十分类似。
图1 不同示波器的软硬件架构对比
如何进行传统示波器编程?
以美国某著名示波器品牌为例,我们从其技术文档中能摘录软件设计的架构。
图2 美国某著名示波器品牌二次开发软件架构
不难看出,用户二次开发的程序不能直接访问示波器硬件,而是绕了一个大圈子,最终访问到示波器内置的软件程序,再由示波器软件代行控制硬件之事。用户程序和示波器软件之间就需要一套命令套接字来实现控制和数据传递,通行的做法是使用VISA通信标准传输SCPI命令集,或者基于ActiveX运行远程VBS脚本语言等等。示波器软件中运行着一个远程命令服务器,专门接收和翻译远程控制命令,把它们翻译成底层系统调用的API,得到结果后再翻译回来传输给远程用户程序。
因此传统的远程控制或二次开发,需要在运行用户程序的计算机上安装VISA驱动库或者专门的ActiveX库,再基于这些库编写控制程序,所有与示波器的交互不外乎读写相应的命令字符。
科普小知识:SCPI命令全称StandardCommands For Programmable Instruments, 起源于1990年代的IEEE488.2标准,也就是家喻户晓的GPIB接口。后来的可编程仪表多在GPIB的基础上模拟和扩展其体系,万变不离其宗。
如何使用PicoSDK?
安装和配置PicoSDK的大略需要三步:第一步,安装PicoScope6软件,其中的作为驱动支持。第二步,安装PicoSDK支持库,其中包含了用于用户程序开发的编程库和必要的头文件。最后,参考PicoTechnology官方给出的例程代码,并试运行测试程序。更详细的安装和配置指南请向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用户手册。在未来,PicoScope7软件将支持更加丰富的自动化命令集,我们也将专门行文介绍,敬请关注。
英国比克科技有限公司 Pico Technology 成立于1991年,近30年来一直专注于电子测试测量领域,推出了示波器、数据记录仪、网络分析仪和信号发生器等等产品,它们共同的特点是小巧便携、易于集成且性能不输于传统台式仪表。对于外场实验、技术支持、科研数据采集、系统集成和产线测试等等场景尤其适用。