摘 要:在利用VC開(kāi)發(fā)數(shù)字邏輯實(shí)驗(yàn)仿真系統(tǒng)時(shí),有大量的虛擬實(shí)驗(yàn)元件(儀器)的邏輯功能需要編程實(shí)現(xiàn)。利用圖形化編程語(yǔ)言LabVIEW編寫(xiě)虛擬元件邏輯功能的DLL函數(shù),可以大大節(jié)省代碼編寫(xiě)與調(diào)試工作量。文章結(jié)合實(shí)例分析歸納了LabVIEW中DLL函數(shù)的制作方法與技巧。
關(guān)鍵詞:LabVlEW;圖形化編程語(yǔ)言;DLL函數(shù);虛擬儀器
0 引言
VR技術(shù)的蓬勃發(fā)展推動(dòng)了“虛擬實(shí)驗(yàn)室”的發(fā)展。在教學(xué)或科研領(lǐng)域廣泛開(kāi)展虛擬實(shí)驗(yàn)具有重要的意義,如:①能彌補(bǔ)實(shí)驗(yàn)經(jīng)費(fèi)不足;②能實(shí)現(xiàn)資源無(wú)損重復(fù)利用;③能打破實(shí)驗(yàn)受時(shí)空的限制;④能實(shí)現(xiàn)對(duì)實(shí)驗(yàn)的微觀控制等等。在進(jìn)行數(shù)字邏輯課程教學(xué)時(shí),筆者需要組織學(xué)生進(jìn)行各種數(shù)字邏輯實(shí)驗(yàn),但受物理?xiàng)l件的限制無(wú)法正常開(kāi)展硬件實(shí)驗(yàn);雖然EDA技術(shù)的發(fā)展,EDA實(shí)驗(yàn)室也提供了相關(guān)的實(shí)驗(yàn)功能,但EDA實(shí)驗(yàn)室的組建需要大筆經(jīng)費(fèi),這受到了經(jīng)濟(jì)上的限制。為此,筆者以EDA技術(shù)為基礎(chǔ),設(shè)計(jì)了一個(gè)數(shù)字邏輯電路虛擬實(shí)驗(yàn)平臺(tái)模型,并用VC作為主要開(kāi)發(fā)工具實(shí)現(xiàn)該平臺(tái)。該實(shí)驗(yàn)平臺(tái)模型如圖1所示。
該模型中虛擬實(shí)驗(yàn)平臺(tái)是一個(gè)實(shí)現(xiàn)人機(jī)交互的圖形界面,主要完成數(shù)據(jù)的采集和結(jié)果的輸出顯示。
后臺(tái)計(jì)算程序是一個(gè)數(shù)據(jù)處理模塊,負(fù)責(zé)完成兩方面的工作:一方面將用戶編輯輸入的電路轉(zhuǎn)換成模擬數(shù)據(jù);另一方面,利用用戶輸入的外部激勵(lì)信號(hào)和控制命令驅(qū)動(dòng)電路,進(jìn)行模擬計(jì)算得出模擬結(jié)果。
虛擬設(shè)備庫(kù)中包含了數(shù)字邏輯實(shí)驗(yàn)中所要用到的所有設(shè)備,包括各種電源器件、顯示器件(各種指示燈等)、基本門(mén)電路、集成芯片、各種儀器(如示波器)等。所有這些虛擬器件都需要為其建立相應(yīng)的對(duì)象模型。對(duì)上述的虛擬元件建立的模型是E=(N,F(xiàn),I,O),其中,N為元件的類型名稱,F(xiàn)為元件的功能,I、O是元件的輸入輸出端口。
VC作為一種面向?qū)ο蟮恼Z(yǔ)言,同時(shí)具備強(qiáng)大的圖像處理能力,從而成為了開(kāi)發(fā)的首選工具,借助于Microsoft出色的MFC類庫(kù)和應(yīng)用程序框架,能夠輕易實(shí)現(xiàn)對(duì)象的存儲(chǔ)與表示。然而,直接使用VC來(lái)編寫(xiě)代碼實(shí)現(xiàn)虛擬設(shè)備庫(kù)中大量器件的邏輯功能,其工作十分煩瑣。為此筆者選擇采用LabVIE來(lái)編制虛擬器件的邏輯功能函數(shù)并生成DLL函數(shù)以供VC中調(diào)用,從而簡(jiǎn)化這部分代碼的編寫(xiě)與調(diào)試。
1 LabVIEW與虛擬儀器編程
1.1虛擬儀器是計(jì)算機(jī)仿真的基本元件
虛擬儀器(Virtual Instrument,簡(jiǎn)稱Ⅵ)是LabVIEW首先提出的創(chuàng)新概念。所謂虛擬儀器,是在以通用計(jì)算機(jī)為核心的硬件平臺(tái)上,由用戶設(shè)計(jì)定義、具有虛擬面板、測(cè)試功能由測(cè)試軟件實(shí)現(xiàn)的一種計(jì)算機(jī)儀器系統(tǒng)。它利用PC計(jì)算機(jī)顯示器(CRT)的顯示功能模擬傳統(tǒng)儀器的控制面板,以多種形式表達(dá)輸出檢測(cè)結(jié)果,利用PC計(jì)算機(jī)強(qiáng)大的軟件功能實(shí)現(xiàn)信號(hào)數(shù)據(jù)的運(yùn)算、分析、處理,由I/O接口設(shè)備完成信號(hào)的采集、測(cè)量與調(diào)理,從而完成各種測(cè)試功能?!疤摂M”二字主要包含兩方面的含義:
第一,虛擬儀器的面板是虛擬的。
第二,虛擬儀器測(cè)量功能由軟件編程來(lái)實(shí)現(xiàn)。
最初LabVIEW提出的虛擬儀器概念實(shí)際是一種程序設(shè)計(jì)思想,目前虛擬儀器概念已經(jīng)發(fā)展成為一種創(chuàng)新的儀器設(shè)計(jì)思想。這種思想可以簡(jiǎn)單表述為:一個(gè)VI可以由前面板、數(shù)據(jù)流圖和圖標(biāo)連接端口組成,前面板相當(dāng)于真實(shí)物理儀器的操作面板,而數(shù)據(jù)流框圖就相當(dāng)于儀器的電路結(jié)構(gòu),前面板和數(shù)據(jù)流框圖有各自的設(shè)計(jì)窗口,而圖標(biāo)連接端口則負(fù)責(zé)前面板窗口和框圖窗口之間的數(shù)據(jù)傳輸與交換。
1.2 LabVlEW是圖形化的虛擬儀器編程語(yǔ)言
LabVIEW(Laboratory Virtual Instrument EngineeringWorkbench,實(shí)驗(yàn)室虛擬儀器工程平臺(tái))是美國(guó)m公司(NationalInstrumem Company)最先于1986年發(fā)布的一種基于G語(yǔ)言(Graphics Language,圖形化編程語(yǔ)言)的虛擬儀器軟件開(kāi)發(fā)工具,到目前LabVIEW已經(jīng)發(fā)展到8.0版本??梢哉f(shuō)虛擬儀器是與LabVIEW同步誕生的。目前已有多種的虛擬儀器的軟件開(kāi)發(fā)工具,如C、Visual C++、Visual Basic、Labwindows/CVI等屬于文本式編程語(yǔ)言,而LabVIEW,HPVEE則屬于圖形化編程語(yǔ)言。LabVIEW以其強(qiáng)大的便捷的圖形化編程方式贏得了包括航空、航天、通信、汽車、半導(dǎo)體、生物醫(yī)學(xué)等世界范圍眾多領(lǐng)域的廣泛應(yīng)用,從大學(xué)實(shí)驗(yàn)室到工廠,從探索研究到技術(shù)集成,我們都可以發(fā)現(xiàn)LabVIEW應(yīng)用的成果和開(kāi)發(fā)的產(chǎn)品。
LabVIEW為虛擬儀器設(shè)計(jì)者提供了一個(gè)便捷、輕松的設(shè)計(jì)環(huán)境,利用它,設(shè)計(jì)者可以像搭積木一樣,輕松組建一個(gè)測(cè)量系統(tǒng)和構(gòu)造自己的儀器面板,而無(wú)需進(jìn)行任何繁瑣的代碼編寫(xiě)。而且用LabVIEW設(shè)計(jì)的虛擬儀器可以脫離LabVIEW環(huán)境使用。LabVIEW提供了大量與外部代碼或軟件進(jìn)行連接的機(jī)制,諸如DLLs(動(dòng)態(tài)鏈接庫(kù))、DDE(共享庫(kù))、ActiveX等,這就使得利用LabVIEW與Visual C++組合開(kāi)發(fā)虛擬實(shí)驗(yàn)室系統(tǒng)成為可能。
2 利用LabVIEW實(shí)現(xiàn)虛擬器件的邏輯功能
本文以半加器為例,分析在LabVIEW中創(chuàng)建半加器邏輯功能函數(shù)DLL的方法。
2.1 創(chuàng)建子VI
LabVIEW中的子VI(subVI)相當(dāng)于文本編程語(yǔ)言中的函數(shù)、過(guò)程和子程序,就是可以被其他的VI調(diào)用的VI。要在VC或其他文本編程語(yǔ)言程序調(diào)用LabVIEW的子VI,首先要利用子VI創(chuàng)建DLL函數(shù)。
子Vl的創(chuàng)建過(guò)程與普通Vl的創(chuàng)建過(guò)程基本相同,即都是通過(guò)前面板來(lái)定義用戶界面,用程序框圖(block diagram)來(lái)定義程序流程。創(chuàng)建好的半加器VI的前面板和程序框圖如圖2、圖3所示。從一個(gè)普通VI構(gòu)造子VI的重要工作是定義它的圖標(biāo)和連接器。子VI的圖標(biāo)是作為被其他VI調(diào)用時(shí)出現(xiàn)在程序框圖中的圖標(biāo),而連接器則定義了子VI作為子函數(shù)(過(guò)程)具有的輸入輸出參數(shù)類型與個(gè)數(shù)。對(duì)制作被文本語(yǔ)言調(diào)用的DLL函數(shù)來(lái)說(shuō),定義連接器是必須的。因?yàn)榘爰悠饔袃蓚€(gè)輸入和兩個(gè)輸出,所以在定義它的連接器時(shí)應(yīng)選擇一個(gè)兩輸入兩輸出的模板。未定義的連接器各個(gè)端子都是空白的,通過(guò)將各個(gè)端子與前面板中相應(yīng)的控制器或指示器關(guān)聯(lián)后,連接器的端子變了顏色。用沒(méi)有定義連接器的子VI創(chuàng)建的DLL函數(shù)將是一個(gè)沒(méi)有任何輸入、輸出參數(shù)的函數(shù)。因此創(chuàng)建DLL前一定要將子VI的連接器定義好。
2.2 利用子VI創(chuàng)建DLL
創(chuàng)建好子Ⅵ后,就可以利用它來(lái)制作DLL了。工作開(kāi)始之前要打開(kāi)包含了以上子VI的項(xiàng)目。如果原來(lái)的子VI是單獨(dú)建立的則新建一個(gè)項(xiàng)目,然后將子VI添加到新項(xiàng)目中并保存該項(xiàng)目。注意一定要先保存項(xiàng)目,未經(jīng)保存的項(xiàng)目是無(wú)法創(chuàng)建DLL或EXE的。
簡(jiǎn)單歸納制作步驟如下:
(1)打開(kāi)項(xiàng)目后,在項(xiàng)目瀏覽器(Project Explorer)中展開(kāi)“My Computer”。
(2)右擊其中的“Build specification”,從快捷菜單中選擇New->Shared Library命令打開(kāi)Shared Library Property對(duì)話框(如圖3)。通過(guò)該對(duì)話框?yàn)榧磳?chuàng)建的DLL配置參數(shù),其中最重要的就是Shared Library Information和Source Files兩類參數(shù)。前者用于指定輸出的DLL文件路徑等信息,后者則指出用于制作DLL函數(shù)的源子VI文件。
(3)在Shared Library Information面板設(shè)置生成的目標(biāo)文件信息。用戶要特別關(guān)注兩個(gè)參數(shù):Target filename和SharedLibrary destination directory,前者是生成的DLL文件名,后者是存放DLL文件的目錄路徑。值得注意的是Windows環(huán)境所用的DLL是以.dll為擴(kuò)展名,而在Mac OS中用的擴(kuò)展名是,framework,Linux中則是.SO。
(4)在Source files面板中指定將導(dǎo)出DLL的VI;即要從Project Files列表中將既定的VI文件添加到Exported Vis列表中。LabVIEW會(huì)根據(jù)加入的子VI自動(dòng)生成DLL函數(shù)原型void HalfAdder(unsigned char A,unsigned char B,unsigned char*Y,unsigned char*C)。
在此用戶可以對(duì)該函數(shù)作進(jìn)一步配置。如果原來(lái)的子VI明明存在數(shù)據(jù)輸入輸出,而在此卻發(fā)現(xiàn)函數(shù)原型中沒(méi)有任何輸入輸出參數(shù)或者參數(shù)的數(shù)目與子VI中的輸入輸出端口不相符,則說(shuō)明在創(chuàng)建子VI的時(shí)候沒(méi)有定義連接器或連接器定義不正確,需重新定義子VI的連接器。
(5)相關(guān)參數(shù)配置好后便可以執(zhí)行創(chuàng)建“Build”命令,LabVIEW會(huì)根據(jù)參數(shù)生成相關(guān)的文件(如圖4)。其中在VC中調(diào)用該函數(shù)時(shí)要用到的有三個(gè)文件dll、h和lib文件。
3 結(jié)束語(yǔ)
正確創(chuàng)建DLL后,在VC中就可以按其它DLL函數(shù)的調(diào)用方法一樣,使用LabVIEW中導(dǎo)出的函數(shù)了。以此為基礎(chǔ),筆者利用LabVIEW生成了數(shù)字邏輯實(shí)驗(yàn)仿真系統(tǒng)中所需的各種虛擬器件(包括邏輯門(mén)、譯碼器、觸發(fā)器、移位寄存器、計(jì)數(shù)器等)的邏輯功能函數(shù)。
充分利用LabVIEW圖形化編程的便捷陸,通過(guò)圖形圖標(biāo)的拖動(dòng)與組合便輕松組裝出一個(gè)個(gè)具有特定功能的程序,大大簡(jiǎn)化了開(kāi)發(fā)人員代碼編寫(xiě)與調(diào)試的工作。