《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 業(yè)界動(dòng)態(tài) > 基于虛擬儀器的綜合測(cè)控系統(tǒng)程序設(shè)計(jì)

基于虛擬儀器的綜合測(cè)控系統(tǒng)程序設(shè)計(jì)

2008-12-09
作者:夏文超1, 戴瑜興1, 周 斌2

  摘? 要: 介紹了使用虛擬儀器技術(shù)及PLC構(gòu)成的綜合測(cè)控系統(tǒng)" title="測(cè)控系統(tǒng)">測(cè)控系統(tǒng),重點(diǎn)闡述了大型多線程LabVIEW程序的構(gòu)建、通訊協(xié)議的算法實(shí)現(xiàn)以及外部函數(shù)的調(diào)用、動(dòng)畫(huà)的顯示等。
  關(guān)鍵詞: 虛擬儀器; PLC; 測(cè)控系統(tǒng); LabVIEW; RS-232

?

  LabVIEW即實(shí)驗(yàn)室虛擬儀器集成環(huán)境,是美國(guó)國(guó)家儀器公司開(kāi)發(fā)的圖形化集成開(kāi)發(fā)環(huán)境" title="開(kāi)發(fā)環(huán)境">開(kāi)發(fā)環(huán)境。它區(qū)別于其他開(kāi)發(fā)環(huán)境,主要采用圖形化編程即G語(yǔ)言編程,其核心是子VI、前面板、數(shù)據(jù)流圖等概念。LabVIEW目前已經(jīng)發(fā)展到8.5版本,提供了與MATLAB、C等外部程序的良好接口,支持ActiveX、DDE、TCP/IP等標(biāo)準(zhǔn)程序接口,采用了面向?qū)ο蟮木幊谭椒ǎδ芊浅?qiáng)大,適用于任何編程任務(wù),并滲入到嵌入式系統(tǒng)、FPGA設(shè)計(jì)等多個(gè)方面,成為一個(gè)獲得廣泛認(rèn)可的圖形化軟件開(kāi)發(fā)環(huán)境。本文介紹一個(gè)使用虛擬儀器技術(shù)在一臺(tái)普通PC上搭建通用多功能檢測(cè)平臺(tái)的應(yīng)用,其集成了多種傳統(tǒng)檢測(cè)功能,同時(shí)具有數(shù)據(jù)分析、存儲(chǔ)、模擬仿真等諸多擴(kuò)展功能,使眾多功能統(tǒng)一在一個(gè)架構(gòu)下,成本低廉且方便管理維護(hù),很好地體現(xiàn)了虛擬儀器低價(jià)靈活功能強(qiáng)大的優(yōu)點(diǎn)。
1 測(cè)控系統(tǒng)總體結(jié)構(gòu)
  本測(cè)控系統(tǒng)主要目的是在一個(gè)架構(gòu)下完成對(duì)工業(yè)生產(chǎn)中的各種元器件的檢測(cè),根據(jù)測(cè)量對(duì)象的不同選用不同的機(jī)械部分,可以應(yīng)用于研發(fā)、質(zhì)保等環(huán)節(jié)。
  系統(tǒng)整體結(jié)構(gòu)如圖1所示,整個(gè)系統(tǒng)由普通PC機(jī)、PLC、機(jī)械/電動(dòng)執(zhí)行件及傳感器搭建組成。傳感器通過(guò)CAN、開(kāi)關(guān)量、模擬量等方式接入PLC,PLC通過(guò)RS232連接PC機(jī)。此系統(tǒng)靈活簡(jiǎn)單,任何一臺(tái)裝上程序的普通PC機(jī)連接PLC就能采集數(shù)據(jù),且成本較低。PLC選用一款國(guó)產(chǎn)的控制器,特點(diǎn)是端口豐富,擁有2個(gè)CAN2.0B端口,1個(gè)RS232/422/485復(fù)用串口,1個(gè)以太網(wǎng)口,6路PWM輸出,4路脈沖輸入以及大量的模擬和數(shù)字端口,價(jià)格低廉,符合本設(shè)計(jì)要求,擴(kuò)展空間廣闊?;具B接的傳感器為Hengsler絕對(duì)編碼器和3B6角度傳感器,使用CANOPEN接口;執(zhí)行件為大扭矩步進(jìn)電機(jī),以PLC的PWM輸出作為其主要控制信號(hào)。

?

  系統(tǒng)的核心是PC機(jī)與PLC的協(xié)同工作。在工作時(shí)PC機(jī)與PLC進(jìn)行雙向?qū)Φ仁酵ㄐ?,都可以向?qū)Ψ街鲃?dòng)發(fā)數(shù)據(jù)。PC機(jī)負(fù)責(zé)人機(jī)交互" title="人機(jī)交互">人機(jī)交互、數(shù)據(jù)分析存儲(chǔ)以及根據(jù)收到的信息進(jìn)行一些邏輯判斷,向PLC發(fā)送各種數(shù)據(jù)及命令。PLC負(fù)責(zé)將收到的命令轉(zhuǎn)換成具體的動(dòng)作,收集現(xiàn)場(chǎng)信息傳給PC,以及實(shí)現(xiàn)安全保護(hù)的邏輯判斷。
2 主機(jī)程序總體結(jié)構(gòu)
  程序主要結(jié)構(gòu)如圖2所示。主循環(huán)由2個(gè)線程組成,一個(gè)負(fù)責(zé)監(jiān)視通信;一個(gè)負(fù)責(zé)邏輯分析以及人機(jī)交互。通信線程包括數(shù)據(jù)收包解包、幀打包發(fā)送。人機(jī)交互線程包括面板操作響應(yīng)、數(shù)據(jù)分析及畫(huà)圖演示、發(fā)送命令、響應(yīng)PLC的請(qǐng)求等。線程間通信通過(guò)LabVIEW中有互斥保護(hù)機(jī)制的隊(duì)列類(lèi)型(queue)交換數(shù)據(jù),避免不同線程同時(shí)搶占公共資源或讀寫(xiě)順序混亂產(chǎn)生錯(cuò)誤。線程內(nèi)部不同子循環(huán)間通過(guò)“通知/消息”結(jié)構(gòu)(notifier)交換有時(shí)間性要求的數(shù)據(jù)。最后為正常退出的處理程序,進(jìn)行設(shè)置存盤(pán)等操作。數(shù)據(jù)的存儲(chǔ)與讀取使用ACCESS數(shù)據(jù)庫(kù)。

?

3 LabVIEW主要程序設(shè)計(jì)" title="程序設(shè)計(jì)">程序設(shè)計(jì)
3.1用戶登錄驗(yàn)證

  登錄驗(yàn)證界面程序完成用戶合法性及權(quán)限驗(yàn)證。在啟動(dòng)時(shí)隱藏程序主界面,彈出登錄驗(yàn)證界面。登錄程序首先讀取數(shù)據(jù)庫(kù)用戶信息,然后進(jìn)入單循環(huán)event case結(jié)構(gòu),等待登錄事件觸發(fā),進(jìn)行驗(yàn)證。訪問(wèn)數(shù)據(jù)庫(kù)使用LabSQL模塊完成。圖3所示為等待登錄事件觸發(fā)的程序,圖4中程序完成對(duì)用戶信息數(shù)據(jù)庫(kù)userinfo.mdb的一次訪問(wèn)。

?


3.2 PC機(jī)與PLC通信設(shè)計(jì)
3.2.1 模塊概述
  通信模塊的正??煽窟\(yùn)行是整個(gè)測(cè)控系統(tǒng)安全工作的基礎(chǔ)。如果不定義數(shù)據(jù)包不加處理地直接收發(fā)信息,則有可能因?yàn)槭瞻l(fā)雙方收發(fā)時(shí)間的不協(xié)調(diào)而導(dǎo)致連續(xù)的誤判。這在主從式低速通信的情況下可以通過(guò)問(wèn)答形式避免,但在雙向通信的情況下,隨著數(shù)據(jù)量的增加錯(cuò)誤風(fēng)險(xiǎn)也大大增加,可能導(dǎo)致危險(xiǎn)的機(jī)械動(dòng)作,因此需要一定的機(jī)制避免這種情況的發(fā)生。最理想的方法是利用TCP/IP協(xié)議,但PLC中RS232通信模塊沒(méi)有此協(xié)議,因此自行編制了一個(gè)底層通信協(xié)議以保證通信的可靠和效率。圖5為基本通信過(guò)程。

?


3.2.2? 通信協(xié)議
  對(duì)于雙方的上層應(yīng)用程序,數(shù)據(jù)幀定義如下:每一幀開(kāi)頭包括2字節(jié)表示幀類(lèi)型及幀意義,第三字節(jié)開(kāi)始為數(shù)據(jù)及參數(shù),長(zhǎng)度可變,如無(wú)參數(shù)和數(shù)據(jù)則填空。重要的數(shù)據(jù)在發(fā)送后需要得到確認(rèn)。應(yīng)用程序?qū)⑿枰l(fā)送的幀寫(xiě)到寫(xiě)緩沖隊(duì)列中,等待打包程序處理后發(fā)送。接收到的包經(jīng)過(guò)對(duì)應(yīng)的解包程序后送到讀緩沖隊(duì)列中給程序使用。
  打包處理過(guò)程如圖6所示,程序接收到應(yīng)用程序要發(fā)送的數(shù)據(jù)幀后,將幀中的數(shù)據(jù)位進(jìn)行裁減及拼接處理,將原數(shù)據(jù)位中每7位數(shù)據(jù)分成一組,最高位補(bǔ)0,作為數(shù)據(jù)包中的1字節(jié)數(shù)據(jù),犧牲1位的效率表示原數(shù)據(jù)。這樣做是因?yàn)榘慕Y(jié)尾有一字節(jié)“FE”作為包結(jié)束標(biāo)志,避免數(shù)據(jù)位中出現(xiàn)與結(jié)束位相同的字節(jié)。幀頭的幀類(lèi)型幀意義2 字節(jié)數(shù)據(jù)同樣也不能出現(xiàn)和結(jié)束位一樣的字節(jié)“FE”。完成后再對(duì)前面所有位進(jìn)行累加然后模128,結(jié)果作為1字節(jié)校驗(yàn)位。在包的最后是一字節(jié)“FE”表示包結(jié)束。使用“FE”而不是“FF”可以避免此重要的結(jié)束字8位為全“1”,增強(qiáng)抗干擾性。解包程序?yàn)槠淠孢^(guò)程。由于上述處理都是數(shù)據(jù)移位的過(guò)程,所以占用資源很少,執(zhí)行效率非常高,PLC端也能承受這種開(kāi)銷(xiāo)。

?


  LabVIEW中打包子程序" title="子程序">子程序主要部分如圖7所示。中間case結(jié)構(gòu)為打包算法的實(shí)現(xiàn):取出幀中數(shù)據(jù)位拼接到一個(gè)Unsigned Integer64單元中,接著按位取出,每7位一組作為1字節(jié),得到包數(shù)據(jù)位,再進(jìn)行累加和校驗(yàn),與幀頭2位及結(jié)束位組合便得到數(shù)據(jù)包。

?


3.2.3 通信監(jiān)視線程
  通信監(jiān)視線程的接口主要是3個(gè)FIFO隊(duì)列,即Wbuf、combuf、databuf,隊(duì)列元素為供上層程序使用的幀,以LabVIEW中簇(Bundle)的形式存在。Wbuf表示待發(fā)送數(shù)據(jù),combuf表示收到的命令幀,databuf表示收到的數(shù)據(jù)幀。程序不斷地掃描Wbuf隊(duì)列、RS232硬件接收緩沖區(qū)。當(dāng)Wbuf中有元素時(shí),依次取出所有元素,并對(duì)每個(gè)元素即待發(fā)的幀調(diào)用打包程序進(jìn)行數(shù)據(jù)位、校驗(yàn)位及結(jié)束位的處理,再把處理結(jié)果拼接成數(shù)組轉(zhuǎn)換成字符串后送給串口寫(xiě)模塊發(fā)送。當(dāng)RS232硬件接收緩沖區(qū)中掃描到數(shù)據(jù)時(shí),線程將數(shù)據(jù)讀到一個(gè)數(shù)組中并掃描。當(dāng)出現(xiàn)結(jié)束字時(shí)就把結(jié)束字以前的所有數(shù)據(jù)當(dāng)成一個(gè)包拿出來(lái),進(jìn)行驗(yàn)證判定解包,將不正確結(jié)果丟棄,正確結(jié)果放入combuf、databuf隊(duì)列中,并及時(shí)反映在前面板。當(dāng)數(shù)組中沒(méi)有結(jié)束字時(shí)則不做處理,等待下一次數(shù)據(jù)。如果數(shù)組超過(guò)一定長(zhǎng)度還沒(méi)收到結(jié)束字則視同錯(cuò)誤包丟棄處理。通信狀態(tài)燈顯示通信工作狀態(tài)。
3.3 界面響應(yīng)線程
  界面響應(yīng)線程主要負(fù)責(zé)對(duì)用戶界面操作的響應(yīng),根據(jù)規(guī)則向PLC發(fā)送信息并應(yīng)答PLC請(qǐng)求,顯示工作情況等。此線程主要由兩個(gè)循環(huán)組成,第一個(gè)循環(huán)專門(mén)掃描用戶操作進(jìn)行響應(yīng),采用事件結(jié)構(gòu)(event case)編程,響應(yīng)事件程序都放在event case結(jié)構(gòu)中。case中實(shí)現(xiàn)控件響應(yīng)、系統(tǒng)設(shè)置、測(cè)量數(shù)據(jù)、數(shù)據(jù)分析畫(huà)圖顯示、數(shù)據(jù)存儲(chǔ)等功能。每一個(gè)需要響應(yīng)的事件或?qū)崿F(xiàn)的功能形成一個(gè)case,以“插件”的形式存在,便于修改。子case調(diào)用子程序,收發(fā)相應(yīng)數(shù)據(jù),并在前面板以字符串或動(dòng)畫(huà)的形式產(chǎn)生回應(yīng)。用戶在前面板進(jìn)行操作后產(chǎn)生一個(gè)事件,程序便會(huì)調(diào)用相應(yīng)事件處理程序進(jìn)行處理。另一個(gè)循環(huán)監(jiān)視收到的命令數(shù)據(jù),進(jìn)行應(yīng)答或形成LabVIEW中用于同步交換數(shù)據(jù)的通知(Notifier)發(fā)給需要的子程序。這個(gè)循環(huán)同時(shí)負(fù)責(zé)處理緊急事件如緊急停止等。
3.4 不規(guī)則界面設(shè)計(jì)
  LabVIEW標(biāo)準(zhǔn)生成矩形窗口,沒(méi)有很好的方法實(shí)現(xiàn)不規(guī)則窗口,給界面設(shè)計(jì)帶來(lái)一些限制,因此需要借助外部程序。微軟標(biāo)配的user32.dll中函數(shù)SetLayeredWindowAttributes能使窗體中指定顏色部分變成透明。將VI前面板背景色作為參數(shù)傳給此函數(shù), 同時(shí)設(shè)置好VI的Window Appearance屬性,便能隱藏背景,顯示定制界面。圖8完成此外部函數(shù)的調(diào)用,圖9為不規(guī)則的登錄窗口顯示效果。

?


3.5 數(shù)據(jù)處理
3.5.1 數(shù)據(jù)分析及存儲(chǔ)
  通過(guò)插入C語(yǔ)言、Matlab語(yǔ)言節(jié)點(diǎn)編制程序及調(diào)用LabVIEW數(shù)據(jù)分析模塊完成分析、模擬仿真功能。每種功能同樣以“插件”形式作為子功能存在于event case結(jié)構(gòu)中,系統(tǒng)完成一次檢測(cè)或分析后對(duì)ACCESS數(shù)據(jù)庫(kù)進(jìn)行操作,過(guò)程大致與登錄系統(tǒng)相同,不再贅述。
3.5.2 作圖及動(dòng)畫(huà)演示
  普通要求的數(shù)據(jù)顯示調(diào)用LabVIEW提供的Plot Multi-XY模塊即可完成。此模塊接收一組數(shù)據(jù)包,每個(gè)包中含有一組坐標(biāo)數(shù)據(jù),對(duì)應(yīng)一條將被繪制的曲線。特殊要求可通過(guò)自行編制畫(huà)圖程序完成。動(dòng)畫(huà)演示部分通過(guò)自行編制畫(huà)圖程序在前面板的Picture容器中繪圖完成。被繪制的圖形是受控的可以運(yùn)動(dòng)變化的圖形。繪圖子程序根據(jù)主程序傳遞的參數(shù)計(jì)算并繪制應(yīng)顯示的圖形,參數(shù)不斷地改變從而形成顯示圖形的不斷改變,從而形成動(dòng)畫(huà)。

  繪圖過(guò)程如下:如圖10所示,程序初始化時(shí),繪圖程序從BMP文件中讀取需要繪制的子圖像及背景。背景是靜止圖形,程序運(yùn)行中一般不更新,子圖像是需要運(yùn)動(dòng)變化的圖像。讀取到的子圖像是一個(gè)個(gè)矩形圖像,和其他圖像拼接時(shí)會(huì)有互相掩蓋現(xiàn)象。將讀到的圖像進(jìn)行掩碼處理使不需要的地方成為透明色,這時(shí)子圖像可以進(jìn)行拼接。當(dāng)需要繪圖時(shí),主程序首先通過(guò)參數(shù)的形式告訴繪圖程序需要繪制的圖形情況,繪圖程序根據(jù)參數(shù)進(jìn)行運(yùn)算,將輸入數(shù)據(jù)轉(zhuǎn)換成繪圖需要的具體參數(shù),如運(yùn)動(dòng)點(diǎn)位置、子圖形大小等。在得到繪制圖形需要的所有參數(shù)后,程序?qū)D形按要求以不同角度貼到指定位置,同時(shí)調(diào)用函數(shù)直接繪制矩形圓形等圖形填充其他位置。由于LabVIEW中圖形以左上角為原點(diǎn),x從左到右y從上到下增大,不方便位置運(yùn)算,因此需要給繪圖子程序傳入Picture容器高度進(jìn)行坐標(biāo)系轉(zhuǎn)換。圖11為一次繪圖過(guò)程,通過(guò)多次類(lèi)似過(guò)程,得到最終的圖形顯示在前面板上。

?


4 程序編譯執(zhí)行效果
  程序脫離開(kāi)發(fā)環(huán)境后運(yùn)行效果理想,集成實(shí)現(xiàn)了多項(xiàng)測(cè)量功能,界面精美友好,在普通PC上運(yùn)行流暢。圖12為程序整體編譯后的主程序界面。
  本測(cè)量系統(tǒng)通過(guò)1臺(tái)普通PC機(jī)與PLC通信,利用PC機(jī)的靈活性,以較低的成本集成實(shí)現(xiàn)了多種測(cè)量子功能,充分發(fā)揮了虛擬儀器的優(yōu)勢(shì),同時(shí)子功能以插件的形式存在,從而使得擴(kuò)展空間非常廣大。本文介紹了應(yīng)用于測(cè)控系統(tǒng)的大型LabVIEW程序的結(jié)構(gòu)及設(shè)計(jì)方法,使用了多線程、動(dòng)畫(huà)等技術(shù),完成了傳統(tǒng)儀器所沒(méi)有的功能,使一臺(tái)PC機(jī)變成了多功能測(cè)控中心。由此可見(jiàn)虛擬儀器具有十分強(qiáng)大的功能,必將得到更為廣泛的應(yīng)用。


參考文獻(xiàn)
[1] ?楊樂(lè)平,李海濤,楊磊.LabVIEW程序設(shè)計(jì)與應(yīng)用.北京:電子工業(yè)出版社,2004.
[2] ?National Instruments Corporation. LabVIEW development?guidelines, April 2003 Edition. Part Number 321393D-01
[3] ?National Instruments Corporation. LabVIEW Function and?VI reference manual, January 1998 Edition. Part Number?321526B-01.
[4] ?NORMA D. Using LabVIEW to Creat Multithreaded VIs?for Maximum performance and reliability[DB/OL].
?www.ni.com

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。