PicoSDK (Software Development Kit) 是Pico Technology的軟件開(kāi)發(fā)包,許多PicoScope產(chǎn)品的用戶(hù)把PicoScope示波器當(dāng)作一個(gè)數(shù)據(jù)采集設(shè)備來(lái)用,基于PicoScope的硬件開(kāi)發(fā)自己的用戶(hù)軟件程序。不少人發(fā)現(xiàn)PicoSDK與傳統(tǒng)臺(tái)式示波器的二次開(kāi)發(fā)/遠(yuǎn)程控制編程方式非常的不同,同時(shí)PicoSDK的響應(yīng)速度和靈活性把傳統(tǒng)示波器遠(yuǎn)遠(yuǎn)地甩在后面,這種差別來(lái)源于深層次的設(shè)計(jì)思路不同。
本文深入解析兩者的設(shè)計(jì)原理,揭示PicoSDK性能優(yōu)越之謎,并通過(guò)真實(shí)編程對(duì)比測(cè)試,實(shí)錘證明。
傳統(tǒng)臺(tái)式示波器軟件是如何工作的?
傳統(tǒng)臺(tái)式示波器除了核心的調(diào)理采集電路以外,還有一塊系統(tǒng)板,中低端的示波器采用基于ARM的嵌入式架構(gòu),運(yùn)行嵌入式Linux操作系統(tǒng)或者基于X86的WinCE操作系統(tǒng)。用于控制示波器的軟件界面全屏運(yùn)行在這個(gè)嵌入式操作系統(tǒng)上,用戶(hù)看不到操作系統(tǒng)界面本身。在一些高端示波器中,會(huì)設(shè)計(jì)一塊PC系統(tǒng)板,基于X86/X64處理器,運(yùn)行WindowsXP/7/10等桌面操作系統(tǒng),示波器硬件板卡通過(guò)PCIE或者10G以太網(wǎng)連接到PC主板。示波器界面軟件則是Windows中的一個(gè)應(yīng)用程序,通過(guò)調(diào)用底層的硬件驅(qū)動(dòng)控制示波器采集數(shù)據(jù)。用戶(hù)常??梢酝顺鲞@個(gè)應(yīng)用程序,返回Windows桌面。
PicoScope6 軟件是如何工作的?
作為PC示波器,每一款PicoScope產(chǎn)品都需要連接到計(jì)算機(jī),并安裝一套PicoScope6軟件來(lái)控制它們工作。在PicoScope6軟件中,可以實(shí)現(xiàn)示波器的檔位,時(shí)基設(shè)置,可以觀察,測(cè)量,分析和保存波形。從使用功能上來(lái)說(shuō),PicoScope6與傳統(tǒng)的臺(tái)式示波器相比,完全相同并且免費(fèi)。甚至包括一些高端臺(tái)式示波器才有的順序觸發(fā),歷史波形模式,自定義數(shù)學(xué)運(yùn)算,模板測(cè)試以及串行解碼等功能,也都完全免費(fèi)。
PicoScope6軟件運(yùn)行在Windows/Linux操作系統(tǒng)上,通過(guò)調(diào)用底層的USB驅(qū)動(dòng)軟件來(lái)控制PicoScope硬件。它的系統(tǒng)API調(diào)用都通過(guò)PicoIPP.dll這個(gè)動(dòng)態(tài)鏈接庫(kù)來(lái)實(shí)現(xiàn)。這么說(shuō)來(lái),其實(shí)PicoScope的工作架構(gòu)和傳統(tǒng)高端臺(tái)式示波器十分類(lèi)似。
圖1 不同示波器的軟硬件架構(gòu)對(duì)比
如何進(jìn)行傳統(tǒng)示波器編程?
以美國(guó)某著名示波器品牌為例,我們從其技術(shù)文檔中能摘錄軟件設(shè)計(jì)的架構(gòu)。
圖2 美國(guó)某著名示波器品牌二次開(kāi)發(fā)軟件架構(gòu)
不難看出,用戶(hù)二次開(kāi)發(fā)的程序不能直接訪問(wèn)示波器硬件,而是繞了一個(gè)大圈子,最終訪問(wèn)到示波器內(nèi)置的軟件程序,再由示波器軟件代行控制硬件之事。用戶(hù)程序和示波器軟件之間就需要一套命令套接字來(lái)實(shí)現(xiàn)控制和數(shù)據(jù)傳遞,通行的做法是使用VISA通信標(biāo)準(zhǔn)傳輸SCPI命令集,或者基于ActiveX運(yùn)行遠(yuǎn)程VBS腳本語(yǔ)言等等。示波器軟件中運(yùn)行著一個(gè)遠(yuǎn)程命令服務(wù)器,專(zhuān)門(mén)接收和翻譯遠(yuǎn)程控制命令,把它們翻譯成底層系統(tǒng)調(diào)用的API,得到結(jié)果后再翻譯回來(lái)傳輸給遠(yuǎn)程用戶(hù)程序。
因此傳統(tǒng)的遠(yuǎn)程控制或二次開(kāi)發(fā),需要在運(yùn)行用戶(hù)程序的計(jì)算機(jī)上安裝VISA驅(qū)動(dòng)庫(kù)或者專(zhuān)門(mén)的ActiveX庫(kù),再基于這些庫(kù)編寫(xiě)控制程序,所有與示波器的交互不外乎讀寫(xiě)相應(yīng)的命令字符。
科普小知識(shí):SCPI命令全稱(chēng)StandardCommands For Programmable Instruments, 起源于1990年代的IEEE488.2標(biāo)準(zhǔn),也就是家喻戶(hù)曉的GPIB接口。后來(lái)的可編程儀表多在GPIB的基礎(chǔ)上模擬和擴(kuò)展其體系,萬(wàn)變不離其宗。
如何使用PicoSDK?
安裝和配置PicoSDK的大略需要三步:第一步,安裝PicoScope6軟件,其中的作為驅(qū)動(dòng)支持。第二步,安裝PicoSDK支持庫(kù),其中包含了用于用戶(hù)程序開(kāi)發(fā)的編程庫(kù)和必要的頭文件。最后,參考PicoTechnology官方給出的例程代碼,并試運(yùn)行測(cè)試程序。更詳細(xì)的安裝和配置指南請(qǐng)向PicoTechnology技術(shù)支持索取。
PicoSDK的用戶(hù)程序是基于PicoScope的動(dòng)態(tài)鏈接庫(kù)直接進(jìn)行API系統(tǒng)調(diào)用,動(dòng)態(tài)鏈接庫(kù)底層直接連接到PicoScope的USB驅(qū)動(dòng)程序??梢哉f(shuō)是實(shí)現(xiàn)了程序流的最短路徑。
因此PicoSDK與傳統(tǒng)示波器的最大區(qū)別在于:一言以蔽之,沒(méi)有中間層賺差價(jià)。
這個(gè)差價(jià)一是造成了響應(yīng)時(shí)間被拖長(zhǎng),二是限制了功能的靈活性。
小結(jié)底層軟件架構(gòu)對(duì)比如下:
圖3 PicoSDK與傳統(tǒng)示波器的二次開(kāi)發(fā)軟件架構(gòu)對(duì)比
詳細(xì)說(shuō)來(lái)是這樣的:
PicoSDK的優(yōu)點(diǎn)1:響應(yīng)快,無(wú)延遲
上文已經(jīng)提到傳統(tǒng)示波器的二次開(kāi)發(fā)程序彎彎繞繞,過(guò)五關(guān)斬六將才到達(dá)示波器底層硬件,這中間會(huì)產(chǎn)生多次數(shù)據(jù)拷貝,數(shù)據(jù)傳輸,包括命令集的解析和數(shù)據(jù)結(jié)構(gòu)重組。不難想象,費(fèi)時(shí)彌久。而PicoSDK簡(jiǎn)單直接,API調(diào)用直接穿入硬件核心,只產(chǎn)生極少數(shù)幾次數(shù)據(jù)拷貝,并且沒(méi)有復(fù)雜的命令和數(shù)據(jù)格式需要解析轉(zhuǎn)換,原始波形拿來(lái)就用。下文我們會(huì)舉一個(gè)例子,發(fā)現(xiàn)同樣是采集和獲取一段數(shù)據(jù)波形,PicoSDK比傳統(tǒng)示波器快一倍以上。
PicoSDK的優(yōu)點(diǎn)2:支持連續(xù)數(shù)據(jù)采集
我們知道示波器的采集方式是不定期突發(fā)式的,每一次從觸發(fā)到把數(shù)據(jù)從硬件上傳到軟件層,再經(jīng)過(guò)軟件的處理和顯示以后才能開(kāi)始下一次觸發(fā)采集。這個(gè)過(guò)程中的信號(hào)波形我們是捕捉不到的,稱(chēng)之為死區(qū)。而與之對(duì)應(yīng)的數(shù)據(jù)采集卡,可以連續(xù)不斷的將信號(hào)波形捕獲并存儲(chǔ)到計(jì)算機(jī)硬盤(pán)上。傳統(tǒng)的示波器只能基于觸發(fā)模式一段一段的工作,沒(méi)辦法連續(xù)采集波形,而PicoSDK支持一種stream(流模式),底層硬件可以源源不斷地把數(shù)據(jù)送入一個(gè)用戶(hù)程序提供的緩存區(qū)域,用戶(hù)程序也不斷地把緩存中的數(shù)據(jù)取出來(lái),或是存儲(chǔ)到硬盤(pán)上,或是直接處理。在這種模式下,數(shù)據(jù)連續(xù)采集,永遠(yuǎn)不會(huì)間斷或丟失,硬盤(pán)有多大就能采集多少數(shù)據(jù)。換句話(huà)說(shuō),PicoSDK既能像傳統(tǒng)示波器一樣基于觸發(fā)信號(hào)來(lái)突發(fā)地采集波形,也可以如數(shù)據(jù)采集卡一樣連續(xù)不間斷的進(jìn)行流模式采集。翻遍各種傳統(tǒng)示波器的編程手冊(cè),也尋覓不到數(shù)據(jù)流采集模式的字眼,這是因?yàn)樵谠砩纤蜔o(wú)法實(shí)現(xiàn)。上面已經(jīng)提到,傳統(tǒng)示波器數(shù)據(jù)要穿越多個(gè)軟件中間層,因此延遲很大,實(shí)現(xiàn)不了快速數(shù)據(jù)存取。PicoSDK的底層硬件驅(qū)動(dòng)和上層用戶(hù)程序可以訪問(wèn)同一個(gè)內(nèi)存緩存空間,因此可以快速存取數(shù)據(jù)。
圖4 示波器普通采集模式與流模式
PicoSDK的優(yōu)點(diǎn)3:支持并發(fā)機(jī)制
上文已經(jīng)提到,示波器采集和數(shù)據(jù)傳輸處理需要耗費(fèi)一定的時(shí)間,在傳統(tǒng)示波器中,這個(gè)過(guò)程是阻塞的,或者需要靠不斷查詢(xún)狀態(tài)來(lái)確認(rèn)完成了沒(méi)有,用戶(hù)程序在這個(gè)過(guò)程中只能無(wú)謂地等待,做不了別的事,白白浪費(fèi)了運(yùn)算時(shí)間。而PicoSDK的采集和數(shù)據(jù)拷貝函數(shù)都支持回調(diào),用戶(hù)程序可以在采集和數(shù)據(jù)拷貝的過(guò)程中處理上一組數(shù)據(jù),完成計(jì)算或者繪圖等操作,過(guò)程中如果采集完成,會(huì)自動(dòng)打斷當(dāng)前進(jìn)程,緩存新的數(shù)據(jù),等待處理。
關(guān)于PicoSDK響應(yīng)快的特點(diǎn),我們通過(guò)一個(gè)真實(shí)編程案例,實(shí)錘證明!
首先我們通過(guò)NI-VISA庫(kù),經(jīng)過(guò)USB-TMC接口連接一臺(tái)臺(tái)式示波器(美國(guó)某知名品牌350MHz四通道型號(hào)),然后編寫(xiě)一段python程序控制改示波器采集一小段波形,并傳輸?shù)接脩?hù)程序的內(nèi)存中。代碼如下,程序分別記錄了示波器采集信號(hào)和將數(shù)據(jù)拷貝到計(jì)算上的時(shí)間。(為了簡(jiǎn)化過(guò)程,程序連接示波器后,相應(yīng)的垂直檔位和時(shí)基設(shè)置手動(dòng)完成)。
運(yùn)行結(jié)果:
1) 時(shí)基100us/div,采樣率500MS/s,總數(shù)據(jù)量500Kpts.數(shù)據(jù)采集時(shí)間接近0(理論值1ms,想必該示波器的工作機(jī)制是先采集后觸發(fā),故實(shí)際不需要等待示波器采集新的數(shù)據(jù),直接從緩存中取用已有數(shù)據(jù)),相比之下數(shù)據(jù)拷貝時(shí)間較大,約8.3ms.總時(shí)間8.3ms
2) 時(shí)基2ms/div,采樣率500MS/s,總數(shù)據(jù)量10Mpts,數(shù)據(jù)采集時(shí)間仍然接近0,而數(shù)據(jù)拷貝時(shí)間增大到了1.49s(應(yīng)包含了準(zhǔn)備好下一次緩存數(shù)據(jù)的時(shí)間),總時(shí)間1.49s
3) 時(shí)基100ms/div,采樣率10MS/s,總數(shù)據(jù)量保持10Mpts,此時(shí)數(shù)據(jù)采集時(shí)間有所增加達(dá)到1ms(理論時(shí)間1s,1ms應(yīng)該是底層數(shù)據(jù)預(yù)處理所消耗的時(shí)間),但數(shù)據(jù)拷貝時(shí)間竟然增加到了2.34s,總時(shí)間2.34s
同樣的測(cè)量環(huán)境與設(shè)置,我們?cè)賮?lái)看PicoSDK的結(jié)果(PicoScope2408B 100MHz示波器),通過(guò)USB連接示波器,并安裝好SDK庫(kù),運(yùn)行python程序如下(節(jié)選):
運(yùn)行結(jié)果:
1) 時(shí)基100us/div,采樣率500MS/s,總數(shù)據(jù)量500Kpts.數(shù)據(jù)采集時(shí)間18ms,與傳統(tǒng)示波器不同的是,PicoSDK不取用緩存的數(shù)據(jù),而是得到指令后再采集,數(shù)據(jù)拷貝時(shí)間1.4ms,總時(shí)間19.4ms,長(zhǎng)于傳統(tǒng)示波器
2) 時(shí)基2ms/div,采樣率500MS/s,總數(shù)據(jù)量10Mpts,數(shù)據(jù)采集時(shí)間0.2s(理論值20ms),而數(shù)據(jù)拷貝時(shí)間增大到了0.26s,總時(shí)間0.46s,傳統(tǒng)示波器的30%
3) 時(shí)基100ms/div,采樣率10MS/s,總數(shù)據(jù)量保持10Mpts,數(shù)據(jù)采集時(shí)間增加到了1.14s(理論值1s),數(shù)據(jù)拷貝時(shí)間0.26s,總時(shí)間1.4s,傳統(tǒng)示波器的60%
由此我們得出結(jié)論,當(dāng)采集數(shù)據(jù)量小時(shí),PicoSDK的優(yōu)勢(shì)不明顯或略慢于傳統(tǒng)示波器,隨著數(shù)據(jù)量的增加,PicoSDK能夠比傳統(tǒng)示波器快50%左右。且由于工作機(jī)制不同,PicoSDK在數(shù)據(jù)采集階段不是取用已緩存的舊數(shù)據(jù),而是重新捕獲,因此必須受限于物理上的等待時(shí)間,同時(shí)PicoSDK在數(shù)據(jù)拷貝上只花費(fèi)極少的時(shí)間,在編程實(shí)踐中可以把等待捕獲的物理時(shí)間與后續(xù)的數(shù)據(jù)處理并行起來(lái)。而傳統(tǒng)示波器數(shù)據(jù)采集環(huán)節(jié)幾乎不耗費(fèi)時(shí)間,這是因?yàn)樗∮昧司彺嬷械呐f數(shù)據(jù),而數(shù)據(jù)拷貝環(huán)節(jié)耗時(shí)極長(zhǎng),不利于并行編程運(yùn)算,最終的總耗時(shí)也比PicoSDK慢一倍以上。數(shù)據(jù)拷貝時(shí)間的巨大差別,也導(dǎo)致了PicoSDK能夠給支持連續(xù)不斷的流模式采集,而傳統(tǒng)示波器絕無(wú)可能。
當(dāng)然,PicoSDK也有一些缺點(diǎn),例如無(wú)法直接調(diào)用示波器的測(cè)量,串行解碼等功能,需要援用第三方信號(hào)處理庫(kù)來(lái)實(shí)現(xiàn)。同時(shí)PicoScope6也支持一套自動(dòng)化命令集,在不使用SDK的時(shí)候能夠直接調(diào)用PicoScope6已有的軟件功能實(shí)現(xiàn)自動(dòng)化測(cè)試。詳細(xì)內(nèi)容可參考PicoScope6用戶(hù)手冊(cè)。在未來(lái),PicoScope7軟件將支持更加豐富的自動(dòng)化命令集,我們也將專(zhuān)門(mén)行文介紹,敬請(qǐng)關(guān)注。
英國(guó)比克科技有限公司 Pico Technology 成立于1991年,近30年來(lái)一直專(zhuān)注于電子測(cè)試測(cè)量領(lǐng)域,推出了示波器、數(shù)據(jù)記錄儀、網(wǎng)絡(luò)分析儀和信號(hào)發(fā)生器等等產(chǎn)品,它們共同的特點(diǎn)是小巧便攜、易于集成且性能不輸于傳統(tǒng)臺(tái)式儀表。對(duì)于外場(chǎng)實(shí)驗(yàn)、技術(shù)支持、科研數(shù)據(jù)采集、系統(tǒng)集成和產(chǎn)線(xiàn)測(cè)試等等場(chǎng)景尤其適用。