文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)04-0081-03
0 引言
隨著工業(yè)技術(shù)的急劇發(fā)展,虛擬儀器在機(jī)械控制及測(cè)量分析領(lǐng)域得到了廣泛應(yīng)用。虛擬儀器除了可以完成傳統(tǒng)測(cè)量?jī)x器的功能外,還擁有龐大的數(shù)據(jù)處理能力[1]。LabVIEW便是由美國(guó)國(guó)家儀器(National Instruments,NI)公司發(fā)布的一款虛擬儀器軟件。LabVIEW可以與NI公司的數(shù)據(jù)采集卡實(shí)現(xiàn)無(wú)縫連接,針對(duì)這種數(shù)據(jù)卡,只需要在程序框圖中選擇對(duì)應(yīng)的圖標(biāo)并編程便可實(shí)現(xiàn)USB連接及數(shù)據(jù)采集,這種情況無(wú)需設(shè)置專門(mén)的驅(qū)動(dòng)程序。但對(duì)于非NI公司的USB接口數(shù)據(jù)采集卡,必須使用LabVIEW自行編寫(xiě)驅(qū)動(dòng)程序才能夠驅(qū)動(dòng)USB并完成數(shù)據(jù)采集。
可編程的片上系統(tǒng)(Programmable System-on-Chip,PSoC)是賽普拉斯公司推出的系列芯片。其中PSoC3的單個(gè)芯片集微控制器、存儲(chǔ)器、模擬和數(shù)字外設(shè)功能為一體,具有USB等通信接口。借助PSoC Creator這一原理圖設(shè)計(jì)及輸入工具,便可以輕松完成片上的模擬數(shù)字系統(tǒng)設(shè)計(jì)。
為了使LabVIEW能夠更普遍地使用通用USB設(shè)備,本文系統(tǒng)地闡述了LabVIEW與PSoC3通過(guò)USB通信的四種方式,最后列舉了其中兩種方式的LabVIEW設(shè)計(jì)程序和測(cè)試效果。
1 LabVIEW連接USB的方式
對(duì)于非NI公司的通用USB接口設(shè)備,必須使用LabVIEW編寫(xiě)對(duì)應(yīng)的驅(qū)動(dòng)程序。一般有四種方法:使用調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(Call Library Function Node,CLF)方式調(diào)用動(dòng)態(tài)數(shù)據(jù)庫(kù);使用代碼接口節(jié)點(diǎn)(Code Interface Node,CIN)調(diào)用外部代碼;使用虛擬儀器軟件架構(gòu)(NI-Virtual Instrument Software Architecture,NI-VISA)配置USB;將USB接口轉(zhuǎn)換為L(zhǎng)abVIEW已定義的外設(shè)接口類型,例如聲卡、串口等類型。
1.1 CLF方式
CLF方式為在程序框圖中使用庫(kù)函數(shù)節(jié)點(diǎn)調(diào)用動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library,DLL)。DLL是一種允許多個(gè)程序共享并執(zhí)行某些代碼或者資源的可執(zhí)行文件[3]。LabVIEW沒(méi)有非NI公司USB接口設(shè)備的驅(qū)動(dòng)程序,用戶需要使用其他開(kāi)發(fā)軟件(VC++、C等)自行開(kāi)發(fā)驅(qū)動(dòng)程序并封裝為DLL,以供LabVIEW調(diào)用[4]。
LabVIEW調(diào)用動(dòng)態(tài)鏈接庫(kù)的步驟如下:在程序框圖中放置庫(kù)函數(shù)節(jié)點(diǎn),其位置在“互連接口——庫(kù)與可執(zhí)行程序——調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)”,雙擊庫(kù)函數(shù)節(jié)點(diǎn)或者右擊選擇配置菜單選項(xiàng),進(jìn)入配置對(duì)話框。在“函數(shù)”標(biāo)簽中選擇自己編寫(xiě)并封裝的DLL庫(kù)函數(shù)名稱及某個(gè)功能函數(shù)。在“參數(shù)”標(biāo)簽中設(shè)置庫(kù)函數(shù)節(jié)點(diǎn)的輸入輸出參數(shù)及數(shù)據(jù)類型。由于只有指針類型的輸出參數(shù)能夠正確傳出,所以要注意將輸出參數(shù)的傳遞屬性設(shè)置為指針類型。
1.2 CIN方式
LabVIEW的CIN圖標(biāo)可以通過(guò)USB接口實(shí)現(xiàn)與其他編程語(yǔ)言的通信。使用CIN圖標(biāo)同樣需要設(shè)置輸入輸出參數(shù)。當(dāng)LabVIEW程序運(yùn)行到CIN節(jié)點(diǎn)時(shí),通過(guò)輸入端口進(jìn)入其他語(yǔ)言源代碼中,運(yùn)行完源代碼之后再通過(guò)輸出端口返回到LabVIEW程序。在其他語(yǔ)言源代碼中要獲取USB設(shè)備句柄并設(shè)置USB接口值等參數(shù)。從LabVIEW 2010升級(jí)版取消了代碼接口節(jié)點(diǎn)后,此方式已較少使用。
1.3 NI-VISA方式
VISA是一個(gè)用來(lái)與各種儀器總線進(jìn)行通信的高級(jí)應(yīng)用編程接口。NI-VISA從3.0版本開(kāi)始支持USB通信,它的兩種VISA類函數(shù)可以控制兩類USB設(shè)備:USB儀器(Instruction,INSTR)設(shè)備與USB 讀寫(xiě)(Read And Write,RAW)設(shè)備,NI-VISA與這兩種USB設(shè)備實(shí)現(xiàn)通信的編程是不同的[5]。
1.3.1 NI-VISA與USB INSTR設(shè)備的通信
這種方式不需要配置NI-VISA,直接使用圖1所示程序便可實(shí)現(xiàn)兩者的通信。
1.3.2 NI-VISA與USB RAW設(shè)備的通信
這種方式需要配置NI-VISA,配置步驟如下:
(1)對(duì)下位機(jī)PSoC3供電并將USB總線接入個(gè)人電腦。
(2)打開(kāi)NI-VISA Driver Wizard,將USB作為缺省驅(qū)動(dòng)程序。
(3)進(jìn)入基本信息設(shè)置窗口,設(shè)置USB的基本信息。在Device List中可以選擇Other選項(xiàng),點(diǎn)擊Next進(jìn)入U(xiǎn)SB的基本信息填寫(xiě)對(duì)話框。但因?yàn)橐呀?jīng)連接了USB設(shè)備,所以此處可以直接單擊連接的USB設(shè)備,在下方自動(dòng)填寫(xiě)USB設(shè)備對(duì)應(yīng)的供應(yīng)商ID、產(chǎn)品ID、制造商名稱和型號(hào)名稱。
(4)指定INF文檔的存放文件夾。
(5)安裝INF文檔。
設(shè)置完畢,運(yùn)行上位機(jī)時(shí),便可以在“VISA資源名”顯示框中搜索到連接的USB設(shè)備。如圖2,此時(shí)表示PSoC3可與LabVIEW實(shí)現(xiàn)通信。
1.4 使用LabVIEW已有的驅(qū)動(dòng)類型
因?yàn)長(zhǎng)abVIEW本身具有一些設(shè)備驅(qū)動(dòng)程序,例如聲卡、串口等,LabVIEW可直接利用這些已有的圖標(biāo)完成編程。此時(shí)需要將下位機(jī)PSoC3構(gòu)建為這些設(shè)備。
2 將PSoC3構(gòu)建為USB設(shè)備的方式
PSoC3集成開(kāi)發(fā)環(huán)境(PSoC Creator)中的全速USB組件USBFS(Full Speed USB)為控制端點(diǎn)提供了低層驅(qū)動(dòng)程序。此組件提供了USBFS自定義程序,從而可以方便實(shí)現(xiàn)描述符的構(gòu)建[6]。根據(jù)傳輸數(shù)據(jù)的不同,開(kāi)發(fā)者可以構(gòu)建普通的USB設(shè)備,也可以構(gòu)建基于USB類的設(shè)備。構(gòu)建為基于USB類的設(shè)備的最大優(yōu)勢(shì)是操作系統(tǒng)中集成了這些類設(shè)備的驅(qū)動(dòng)程序,免去了開(kāi)發(fā)者編寫(xiě)驅(qū)動(dòng)的過(guò)程。例如需要中斷傳輸,可以構(gòu)建基于人機(jī)接口類的設(shè)備(USB_DEVICE_CLASS_HUMAN INTERFACE,HID);需要批量傳輸,可以構(gòu)建為基于通信類的設(shè)備(USB_DECICE_CLASS_COMMUNICATIONS,CDC);需要等時(shí)傳輸可以構(gòu)建為基于音頻類的設(shè)備(USB_DEVICE_ CLASS_AUDIO,Audio)。
2.1 將PSoC3構(gòu)建為普通的USB設(shè)備
此方式為PSoC3端最簡(jiǎn)單的方式。雖然各種描述符的構(gòu)建相對(duì)簡(jiǎn)單,可以根據(jù)需要使用中斷傳輸、等時(shí)傳輸、批量傳輸?shù)葌鬏敺绞剑鷥r(jià)是USB主機(jī)端(如PC)設(shè)計(jì)的復(fù)雜度大大提高。開(kāi)發(fā)者必須針對(duì)此設(shè)備編寫(xiě)相應(yīng)的驅(qū)動(dòng)程序,否則該設(shè)備將無(wú)法運(yùn)行。NI-VISA雖然可以簡(jiǎn)化驅(qū)動(dòng)程序的編寫(xiě)過(guò)程,但是簡(jiǎn)單的接口描述符和端點(diǎn)描述符決定了此種方式很難完成大量復(fù)雜的數(shù)據(jù)傳輸。因此,這種方式只適合普通、少量的數(shù)據(jù)傳輸。
2.2 將PSoC3構(gòu)建為基于HID類、CDC類的設(shè)備
HID類是應(yīng)用最為廣泛的標(biāo)準(zhǔn)USB類,操作系統(tǒng)的支持使HID類的開(kāi)發(fā)變得較為容易。USB主機(jī)通過(guò)HID報(bào)表描述符獲取主機(jī)所接收到的數(shù)據(jù)的意義,以及應(yīng)該發(fā)送什么數(shù)據(jù)給USB設(shè)備。對(duì)于PSoC3來(lái)說(shuō),HID類只適合傳輸一些低傳輸速率的數(shù)據(jù),這是因?yàn)镠ID類在實(shí)際應(yīng)用方面有一些限制:(1)所有的數(shù)據(jù)傳輸類型必須為控制傳輸和中斷傳輸;(2)一次最多傳輸64字節(jié),1 ms傳輸一次,所以速率限制為64 kb/s;(3)僅支持一個(gè)輸入端點(diǎn)和一個(gè)輸出端點(diǎn);(4)只能由USB主機(jī)周期性輪詢請(qǐng)求數(shù)據(jù)傳輸[7]。
基于CDC類的器件可以彌補(bǔ)HID類在以上方面的限制。開(kāi)發(fā)者可以根據(jù)PSoC Creator中的USBUART組件將PSoC3構(gòu)建為基于CDC類的器件,而操作系統(tǒng)通常都自帶CDC類的設(shè)備驅(qū)動(dòng)程序。PSoC3通過(guò)USB口連接到PC后,PC端識(shí)別為普通串口設(shè)備。這樣USB接口在LabVIEW與PSoC3之間相當(dāng)于透明的,LabVIEW端完全可以忽略USB的存在,只當(dāng)PC端連接到了一個(gè)普通的串口設(shè)備,使用串口的一系列圖標(biāo)便可實(shí)現(xiàn)數(shù)據(jù)的傳輸。相對(duì)于HID類設(shè)備,既提高了傳輸速度,又簡(jiǎn)化了程序設(shè)計(jì)的復(fù)雜程度。
2.3 將PSoC3構(gòu)建為基于Audio類的設(shè)備
以上兩種方式在實(shí)際應(yīng)用上并不能應(yīng)對(duì)所有的PSoC3和LabVIEW之間的通信問(wèn)題。例如USB連接的多路信號(hào)采集顯示及分析設(shè)備,需要將多路信號(hào)數(shù)據(jù)通過(guò)USB實(shí)時(shí)地上傳到LabVIEW端。將PSoC3配置為基于Audio類的設(shè)備有助于處理好系統(tǒng)所需的實(shí)時(shí)性和上位機(jī)下位機(jī)之間采樣率同步等問(wèn)題。和HID類與CDC類相同的是,一般的計(jì)算機(jī)操作系統(tǒng)中都集成了Audio類的驅(qū)動(dòng)程序,將配置好的PSoC3連接到PC后,PC端識(shí)別為USB音頻設(shè)備,USB接口在LabVIEW與PSoC3之間也相當(dāng)于透明的。LabVIEW與PSoC3之間借用音頻的左右聲道傳輸數(shù)據(jù),并且可以利用Audio類對(duì)數(shù)據(jù)格式、同步和采樣率的協(xié)議進(jìn)行數(shù)據(jù)的傳輸和同步處理,從而大大簡(jiǎn)化了LabVIEW和PSoC3之間此類數(shù)據(jù)的傳輸復(fù)雜程度。
3 LabVIEW與PSoC3基于USB通信的測(cè)試
3.1 通過(guò)配置NI-VISA實(shí)現(xiàn)通信的測(cè)試
通過(guò)NI-VISA配置USB設(shè)備的前面板與程序框圖如圖3、圖4所示,此方法中上位機(jī)LabVIEW使用配置NI-VISA方式,下位機(jī)將PSoC3構(gòu)建為普通的USB設(shè)備。點(diǎn)擊圖3中實(shí)時(shí)采集按鈕,實(shí)時(shí)顯示采集的數(shù)據(jù)。圖4的程序框圖中使用的是USB RAW設(shè)備配置方法。
3.2 將PSoC3構(gòu)建為基于Audio類設(shè)備的測(cè)試
此方法的前面板與程序框圖如圖5、圖6所示。此方法中上位機(jī)LabVIEW直接使用聲卡驅(qū)動(dòng)完成數(shù)據(jù)采集與實(shí)時(shí)顯示,下位機(jī)將PSoC3構(gòu)建為基于Audio類的設(shè)備。圖5中上位機(jī)將接收到的數(shù)據(jù)解包后實(shí)時(shí)顯示,采集到的是四個(gè)具有相位差的正弦信號(hào),圖6是通過(guò)聲卡驅(qū)動(dòng)編寫(xiě)的程序。
4 總結(jié)
本文系統(tǒng)地介紹了LabVIEW與PSoC3基于USB的幾種通信方式,各種方式都有各自的適用場(chǎng)合。LabVIEW的四種方式中,CLF可以調(diào)用設(shè)備的驅(qū)動(dòng)程序,但驅(qū)動(dòng)程序的編寫(xiě)對(duì)開(kāi)發(fā)者來(lái)說(shuō)相對(duì)困難。CIN方式雖可以與其他編程語(yǔ)言實(shí)現(xiàn)鏈接,但目前LabVIEW已取消了這個(gè)節(jié)點(diǎn)函數(shù)。NI-VISA使用更方便,應(yīng)用更廣泛。將PSoC3構(gòu)建為基于USB類設(shè)備的方式可以避免對(duì)驅(qū)動(dòng)程序的編寫(xiě)及VISA的配置,可直接使用LabVIEW已有驅(qū)動(dòng)程序,更簡(jiǎn)化了程序的實(shí)現(xiàn)。根據(jù)傳輸數(shù)據(jù)類型的不同,可以將PSoC3配置為基于HID類、CDC類和Audio類的設(shè)備。
參考文獻(xiàn)
[1] 伍星華,王旭.國(guó)內(nèi)虛擬儀器技術(shù)的應(yīng)用研究現(xiàn)狀及展望[J].現(xiàn)代科學(xué)儀器,2011(4):112-116.
[2] 劉宇芳,李秀娟.Labview平臺(tái)下基于DLL的USB通信技術(shù)應(yīng)用[J].安徽工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2008(2):168-170,189.
[3] 王平,蘇濤,方浩俊.基于USB2.0的高速實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2007(1):81-84.
[4] 周青云,王建勛.基于USB接口與LabVIEW的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2011(8):238-240.
[5] Cypress.Full Speed USB(USBFS)[EB/OL].[2014-02-25].http://www.cypress.com/?rID=48924.
[6] Cypress.USB General Data Transfer with Standard HID Drivers[EB/OL].[2014-09-22].http://www.cypress.com/rID=70131.
[7] 方尚俠.基于LabVIEW和USB接口的虛擬晶體管特性圖示儀[D].成都:電子科技大學(xué),2006.