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

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

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

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

?

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

?

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

?

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

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

?


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

?


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

?


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

?


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

?


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

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

?


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


參考文獻(xiàn)
[1] ?楊樂平,,李海濤,,楊磊.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)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。