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