

摘 "要: 在此詳細介紹了如何使用LabVIEW調用WinIO來控制博來科技股份有限公司的單片機主板2I260A的DIO(數字輸入/輸出),以及通過控制2I260A 的DO來實現控制放大器電路模塊中繼電器的切換,從而達到編程調節放大器增益的目的。試驗結果表明,這是一種比基于底層I/O端口控制更直接更高效的控制方法,完全可以滿足放大器增益檔位控制的要求,不僅提高設備整體的利用率、降低開發周期,而且效果良好且運行穩定。
關鍵詞: LabVIEW; WinIO; 2I260A; DIO
中圖分類號: TN911?34 " " " " " " " " " 文獻標識碼: A " " " " " " " " " " " " " "文章編號: 1004?373X(2015)06?0149?04
WinIO is called by LabVIEW to adjust amplifier’s gain
LIU Hui1, LIU Rong1, SHEN Qing?he1, TIAN Yong?quan2
(1. Shandong Electric Power Research Institute, Jinan 250002, China; 2. Xi’an Boyuan Electric Corporation, Xi’an 710054, China)
Abstract: The method how to use LabVIEW to call WinIO to control DIO (digital input output) of microcontroller mainboard 2I260A made by LEX Computech Co., Ltd "is described in detail. The switching of relay in control amplifier circuit module is realized by controlling DO of 2I260A to achieve the purpose of the amplifier gain adjustment. The experimental results show that this control method is more direct and more efficient than the control method based on the underlying I/O port, and can fully meet the requirements of the amplifier gain control. It improved the overall equipment utilization and reduced the development cycle.
Keywords: LabVIEW; WinIO; 2I260A; DIO
0 "引 "言
一般情況下,在LabVIEW中實現I/O控制有兩種方式,一種是I/O硬件已經自帶了LabVIEW底層的驅動,這樣只需要直接調用即可,這種方式一般用于采集卡或NI的一些板卡[1]上;第二種方式是使用LabVIEW中的I/O端口函數[2]編寫底層細節,這種方法一般難度較大。
由于文章所討論的系統的下位機采用了博來科技股份有限公司單片機主板2I260A,所以如果需要使用上述第一種方法來實現放大器增益的控制,需要額外購買硬件,成本太高,不劃算;而且2I260A自帶了8個DI和DO接口,如果將其利用,將提高設備的利用率。所以選擇第二種方式性價比較高,但2I260A自帶的資料全部都是調用WinIO.DLL來實現DIO的控制[3],使得使用I/O端口實現控制難度較大,所以急需使用一種新的方法來完成所需的I/O控制。
本文詳細介紹了使用LabVIEW調用WinIO.DLL來快速實現2I260A上DO的控制,從而來控制放大器中繼電器的切換,從而實現編程控制放大器增益[4]調節的目的。試驗結果表明,這是一種比基于I/O端口控制更直接更高效的控制方法,完全可以滿足放大器檔位控制的要求,不僅提高了設備整體的利用率,而且效果良好且運行穩定。
1 "概 "述
1.1 "2I260A及其DIO介紹
博來科技股份有限公司于1990年在臺北正式成立。該公司專門研發生產工業電腦應用的嵌入式系統。目前已在中國大陸、歐洲和美洲設有多個分支機構。該公司致力于主機板、平板電腦及各類標準系統產品的設計及制造,主打嵌入式系統的各項應用,以滿足客戶在網絡、數字監控、網絡存儲設備、網路應用、多媒體查詢終端、POS機和精簡型電腦等方面應用需求。此外,該公司可根據客戶需求提供OEM或ODM服務。
2I260A就是博來科技研發的2.5英寸的單片機主板,其主要配置如下:英特爾1.6 GHz的CPU(雙核處理器),DDR3 SDRAM 2 GB的內存,1×Realtek RTL8111F 10/100/1 000 Mb/s的網卡,兩個串口,兩個USB接口,支持WDT、4路DI和4路DO,采用12 V供電,支持3G SIM讀卡器。由于該電路板的設計結合了所有必要的輸入和輸出接口,使得2I260A成為一款用于數字標牌和瘦客戶端應用程序的理想多功能一體機控制主板。由于其體積小,2I260A也是小尺寸和低功耗設備,如移動PC或小平板電腦的整個范圍的完美平臺[4]。
由于文章所討論的系統使用了2I260A作為下位機開發系統,所以使用它的DO來控制放大器的增益省去了外部控制電路的搭建,同時也將設備的利用率達到最大化。
1.2 "WinIO簡介
WinIO是由 Yariv Kaplan編寫的動態鏈接庫,它有如下特點:WinIO函數庫通過使用內核模式下的設備驅動程序和其他一些底層編程技巧繞過 Windows安全保護機制,允許Windows 程序直接對 I/O口進行操作;最新版本是3.0,支持32位和64位平臺,并可供多個應用程序同時使用。WinIO允許在Windows NT/2000/XP/2003/Vista/7和2008上直接訪問I/O端口和物理內存[4]。
2 "LabVIEW調用WinIO實現放大器增益控制
2.1 "為什么使用WinIO
其實LabVIEW中已經存在對I/O進行操作的函數,如圖1所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t1.tifgt;
圖1 LabVIEW I/O端口函數
但是,以下幾個因素必須考慮:
由于獲得的資料(以及demo程序)都是用C或VB編寫的,關于I/O具體的地址定義及地址的含義不一定非常清楚,所以使用該I/O端口函數的難度有些大,這方面的資料獲取比較難[5]。
LabVIEW畢竟和其他文本語言(比如C語言)還是有所區別,直接對底層程序的開發還存在一定的限制,比如對內存和指針操作就沒有C語言那么靈活。而且由于操作系統的某些限制,直接編程來進行底層操作可能會遇到很多困難,而使用前人編寫的一些現成的模塊來繞過這些底層細節則會輕松很多,而且程序復雜度大大降低。基于上述幾點,考慮使用WinIO庫來代替I/O端口操作,以減輕工作量。
2.2 "LabVIEW對WinIO的調用
這部分涉及到LabVIEW對DLL的操作[6],屬于LabVIEW的高級應用。下面以InitializeWinIo函數為例介紹如何調用:
第一步:將下載的WinIO.dll放置到和將要調用的VI相同的目錄下;
第二步:新建一個VI,保存VI到上一步的目錄中并打開該VI的程序框圖,在其中添加調用庫函數節點;
第三步:雙擊調用庫函數節點,打開調用庫函數對話框,如圖2所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t2.tifgt;
圖2 "LabVIEW調用庫函數對話框
因為函數原型為bool _stdcall InitializeWinIo(),所以接下來配置該對話框,如圖3和圖4所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t3.tifgt;
圖3 函數選項卡設置
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t4.tifgt;
圖4 參數選項卡設置
單擊確定按鈕,然后完成如圖5所示[6]程序框圖。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t5.tifgt;
圖5 測試InitializeWinIo函數調用是否成功
執行該VI,如果返回值是0,則表示調用成功。其他函數的設置根據函數原型同理設置即可。至此,WinIO函數的調用測試已經完成。
2.3 "使用LabVIEW調用WinIO控制2I260A的DIO
WinIO中的函數調用是有順序的:InstallWinIoDriver函數→InitializeWinIo函數→DIO操作函數→ShutdownWinIo函數[7]。必須按照上面的順序來調用,不然會出現意想不到的結果。
根據博來科技股份有限公司官方網站(http://www.lex.com.tw)提供的2I260A的DIO 操作demo程序的VB版本[8],可以很輕松地知道圖6中的SetDOValue即是操作2I260A的DIO的函數。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t6.tifgt;
圖6 VB代碼截圖(設置DO)
這里只是把VB中WinIO.dll中函數的調用換成LabVIEW庫函數調用,其他語句用LabVIEW標準語句來實現即可[9],如圖7~圖9所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t7.tifgt;
圖7 WriteI2CByte函數的LabVIEW實現
經過測試和驗證,該方法確實可以控制2I260A的DO,效果良好,運行穩定。如需控制DI,方法類似。
2.4 "使用2I260A的DO控制放大器增益
完成對2I260A的DO的控制后,將放大器電路板的繼電器控制端連接到這些DO上,即可控制放大器電路中繼電器的輸出,最多可以控制4個繼電器,在檔位不多的情況下均可滿足,從而達到控制放大器增益的目的。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t8.tifgt;
圖8 SetDOValue函數的LabVIEW實現
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\17t9.tifgt;
圖9 LabVIEW實現DO的操作
放大器部分的電路是由OPA820放大器構成的增益可調節放大器電路。
此處的放大器電路中運放的反饋部分由繼電器連接4個電阻,采用二進制計數的方式進行組合得到步進增益值,因此只需計算出第一個電阻值就可以知道其他阻值了,如需要接通Rn(n=0~3),則將對應的繼電器斷開——即將對應電阻接入電路反饋端。如要得到1.1倍的增益,由A=1+[R1R0],R0 =1 kΩ,計算得到R1=100 Ω,由二進制的特點可以算出R2=2R1=200 Ω,R3=2R2=400 Ω,放大倍數為An=1+[RnR0],得到n=(An-1)×100,再將n值轉換成二進制值對應到繼電器和電阻即可(其中二進制中的“1”對應比特位的電阻應接入電路作為負載,相應的連接到電路的繼電器的兩個接線端為閉合狀態,“0”則相反)。此外,使用DI也可以實現一些其他功能,比如數字信號的采集。這樣可以進一步提高設備的利用率。由于本次未使用到數字輸入信號,所以該部分未做詳細研究。
3 "結 "語
與LabVIEW自帶的I/O端口函數相比,通過使用LabVIEW調用WinIO實現DIO的控制確實大大減少了工作量,并且沒有碰到任何關于底層I/O相關的操作系統權限問題。這種方法完全可以滿足放大器檔位控制的要求,不僅提高了設備整體的利用率和節省了大量的時間,而且效果良好且運行穩定。
將WinIO的每個函數進行LabVIEW封裝后,下次使用時只需直接調用所需功能的VI,比如,設置DO封裝完成后就是一個SetDO.vi,這樣以后每次調用就直接調用該VI即可,就能很方便地實現了模塊化程序的編寫,可謂是一勞永逸,大大提高了工作效率。
參考文獻
[1] 陳錫輝,張銀鴻.LabVIEW 8.2程序設計從入門到精通[M].北京:清華大學出版社,2007.
[2] 王玉偉,裴東興,祖靜.LabVIEW下基于并口的數據通信[J].電子測量與儀器學報,2008(z2):22?24.
[3] 袁軍,譚永東,任俊.利用WinIO實現并口數據通信[J].計算機與現代化,2009(8):49?53.
[4] 張劍平.程控放大器及其精度研究[J].儀器儀表學報,2006(z2):27?29.
[5] 博來科技股份有限公司.2I260A Series[DB/OL]. [2014?07?19].http://www.lex.com.tw/cn/rss/news?2I260A.htm.
[6] Anon. WinIO [DB/OL]. [2014?04?15]. http://baike.baidu.com.
[7] 阮奇楨.我和LabVIEW:一個NI工程師的十年編程經驗[M].北京:北京航空航天大學出版社,2009.
[8] 陳學樹,劉萱.LabVIEW寶典[M].北京:電子工業出版社,2011.
[9] 豈興明,田京京,夏寧.LabVIEW入門與實戰開發100例[M].北京:電子工業出版社,2011.
[10] 張光南,馬勝前.利用VB 6.0實現網絡遠程PC與單片機通信[J].現代電子技術,2008,31(8):150?152.
[11] 博來科技股份有限公司.2I260A Manual [M/CD]. [2013?03?07]. http://www.lex.com.tw/cn/download/Manual?into.html.
[12] 徐曉東,鄭對元,肖武.LabVIEW 8.5常用功能與編程實例精講[M].北京:電子工業出版社,2009.
[13] 趙驍,周斌,趙華.基于LabVIEW的SPI串行總線接口的實現[J].現代電子技術,2014,37(14):138?141.
[14] 謝冰,陳昌鑫,鄭賓.基于LabVIEW的數據采集與信號處理系統設計[J].現代電子技術,2011,34(14):173?175.