,,,
(1. 同濟大學(xué)電子與信息工程學(xué)院,上海 200092,2. 上海宇航系統(tǒng)工程研究所,上海 201109)
Design and Realization of Double-buffer and High-speed SerialCommunication System Based on LabVIEW
SHI Pei1,WU Yuanbing2,ZHANG Zhiming1,YU Youling1
(1.College of Electronics and Information Engineering,Tongji University,Shanghai 200092,China;
2.Aerospace Research System Engineering Shanghai 201109,China)
LabVIEW平臺下雙緩沖高速串口通信系統(tǒng)的設(shè)計與實現(xiàn)
施培1,吳源兵2,張志明1,余有靈1
(1. 同濟大學(xué)電子與信息工程學(xué)院,上海 200092,2. 上海宇航系統(tǒng)工程研究所,上海 201109)
Design and Realization of Double-buffer and High-speed SerialCommunication System Based on LabVIEW
SHI Pei1,WU Yuanbing2,ZHANG Zhiming1,YU Youling1
(1.College of Electronics and Information Engineering,Tongji University,Shanghai 200092,China;
2.Aerospace Research System Engineering Shanghai 201109,China)
摘要:采用多線程機制、雙緩沖和隊列技術(shù),基于LabVIEW平臺和高速RS422串口,在高速通信模式下實現(xiàn)數(shù)據(jù)的實時采集、處理、顯示及存儲。實際項目應(yīng)用表明,系統(tǒng)運行穩(wěn)定,執(zhí)行效率高,具有良好的可移植性和可擴展性,能較好地完成高速串口通信功能。
關(guān)鍵詞:LabVIEW;高速串口通信;多線程技術(shù);雙緩沖技術(shù)
中圖分類號:TP273;TP311
文獻標(biāo)識碼:A
文章編號:1001-2257(2015)03-0017-03
收稿日期:2014-12-17
Abstract:High-speed serial communication system was developed based on LabVIEW and RS422 communication protocol. Multi-threads mechanism,double-buffer technique and queue scheduling in LabVIEW were applied for the real-time data acquisition and processing,GUI display and database storage. Application result indicates the proposed frame can improve the operation efficiency and veracity,expand the program's functions effectively.
作者簡介:施培(1987-),男,上海崇明人,碩士研究生,研究方向為嵌入式系統(tǒng)開發(fā)與應(yīng)用。

Key words:LabVIEW;high-speed serial communication;multithread technique;double-buffer technique
0引言
串口通信是一種使用靈活方便,數(shù)據(jù)傳輸可靠的通信方式,在工業(yè)控制、數(shù)據(jù)采集和實時監(jiān)控中被廣泛的應(yīng)用。高速串口數(shù)據(jù)采集系統(tǒng)的設(shè)計不同于普通串口通信系統(tǒng),在接收到數(shù)據(jù)采集終端或者其他設(shè)備所發(fā)送過來的大量數(shù)據(jù)的同時,需要對已接收到的數(shù)據(jù)進行處理并且實時顯示,通常情況下也要準(zhǔn)確完整地存儲數(shù)據(jù)[1CD*22]。由于數(shù)據(jù)的傳輸速度較快,數(shù)據(jù)量大,如采用傳統(tǒng)的單線程編程方式,常常會出現(xiàn)接收數(shù)據(jù)內(nèi)容不完整或者不正確的情況。某型地面試驗系統(tǒng)中,控制中心機與DSP下位機終端之間采用RS422全雙工通信,傳輸格式采用1位起始位,8位數(shù)據(jù)位,1位停止位,115200bps的傳輸速率,DSP終端每隔10 ms上傳64字節(jié)長度的數(shù)據(jù)幀。設(shè)計要求計算機能完整準(zhǔn)確的接收數(shù)據(jù)并存儲到后臺數(shù)據(jù)庫中(本地數(shù)據(jù)庫Access),同時同步顯示解析后的動態(tài)數(shù)據(jù)。采用多線程技術(shù)則能保證系統(tǒng)的每個環(huán)節(jié)同步工作,節(jié)省大量系統(tǒng)時間完成數(shù)據(jù)讀取、顯示及存儲。
1基于LabVIEW串口通信程序的開發(fā)
LabVIEW是NI(美國國家儀器公司)開發(fā)的一種基于圖形化編程語言的虛擬開發(fā)平臺,它采用的圖形化G語言使應(yīng)用程序的開發(fā)變得簡單方便[1-3]。LabVIEW 軟件提供了豐富的串口通信函數(shù),編程時,首先調(diào)用串口配置函數(shù)完成串口參數(shù)設(shè)置,包括資源分配,設(shè)置波特率、數(shù)據(jù)位、停止位、校驗位等.然后,使用VISA Write函數(shù)發(fā)送數(shù)據(jù),使用VISA Read函數(shù)接收數(shù)據(jù).串口使用完成后,應(yīng)用VISA Close函數(shù)關(guān)閉串口,結(jié)束通信[3CD*24]。
傳統(tǒng)測控系統(tǒng)的工作流程是數(shù)據(jù)采集,分析,顯示,存儲4個任務(wù)在同一線程上按照順序依次執(zhí)行,在一個任務(wù)運行的同時后面其余的任務(wù)就不能同步運行,只能處于等待狀態(tài),因此,常常造成數(shù)據(jù)不能正常處理顯示及存儲。采用多線程技術(shù),當(dāng)程序運行時,操作系統(tǒng)為每個獨立的線程安排CPU時間,單處理器系統(tǒng)以輪回方式按線程的優(yōu)先級提供時間片,每個線程在使用完時間片后交出控制權(quán),系統(tǒng)再將CPU時間片分配給下一個線程,相較于單線程編程方式,多線程技術(shù)極大的提高了系統(tǒng)的執(zhí)行速度。

圖1 數(shù)據(jù)接收程序
由于數(shù)據(jù)采集、處理、顯示和存儲所需的系統(tǒng)資源和運行時間各不相同,和前三者相比較,存儲操作往往耗時更長。在高速大數(shù)據(jù)量情況下,當(dāng)前數(shù)據(jù)記錄在存儲的過程會被后一條數(shù)據(jù)記錄覆蓋,這樣會導(dǎo)致數(shù)據(jù)不能完整正確的存儲。借鑒圖像顯示中的雙緩沖技術(shù),在程序中先開辟2個緩沖區(qū),將接收到的數(shù)據(jù)先存放到一個緩沖區(qū)中,當(dāng)緩沖區(qū)達到一定大小時將數(shù)據(jù)存放到另一個緩沖區(qū)中,同時對第1個緩沖區(qū)中的數(shù)據(jù)進行存儲操作。一旦第2個緩沖區(qū)中的數(shù)據(jù)記錄達到指定的數(shù)量后,再將數(shù)據(jù)存放到第1個緩沖區(qū)中,重復(fù)使用2個緩沖區(qū)進行數(shù)據(jù)的存放和存儲,能夠有效地避免上面遇到的問題。雙緩沖能起到很好的數(shù)據(jù)存儲緩沖作用,在實際工程中能高效地完成數(shù)據(jù)存儲操作。
2高速串口通信程序?qū)崿F(xiàn)
根據(jù)多線程的機制,將數(shù)據(jù)采集、分析顯示、雙緩沖、存儲分配到4個While循環(huán)中,并行的執(zhí)行。每個While循環(huán)采用狀態(tài)機制,循環(huán)之間借助隊列函數(shù)實現(xiàn)“生產(chǎn)者-消費者”架構(gòu)進行數(shù)據(jù)的共享。VISA讀取函數(shù)每隔10 ms讀取一次串口緩沖區(qū),將下位機數(shù)據(jù)終端發(fā)送的數(shù)據(jù)讀取出來,再將數(shù)據(jù)傳輸給后面的數(shù)據(jù)分析顯示循環(huán)和數(shù)據(jù)存儲循環(huán),數(shù)據(jù)接收循環(huán)程序如圖1所示。
當(dāng)使用多線程技術(shù)的同時,必須考慮程序的停止機制,即如何來確保4個不同功能While循環(huán)的同步停止,以便能安全退出整個上位機程序。當(dāng)讀串口循環(huán)接收到64個字節(jié)的數(shù)據(jù)后,將其通過隊列函數(shù)傳遞到數(shù)據(jù)分析循環(huán),按下停止按鈕將讀串口循環(huán)停止,連接在While循環(huán)內(nèi)的釋放隊列引用函數(shù)將前面定義的Data隊列取消,在數(shù)據(jù)處理循環(huán)中的出隊列函數(shù),將無法檢測到Data隊列的引用,從而產(chǎn)生報錯。利用此錯誤可停止數(shù)據(jù)處理While循環(huán),即通過1對隊列函數(shù)(入隊列和出隊列)來控制2個While循環(huán)的停止。系統(tǒng)中其余3個While循環(huán)(數(shù)據(jù)顯示、數(shù)據(jù)處理、數(shù)據(jù)存儲)均通過此機制實現(xiàn)循環(huán)的停止。數(shù)據(jù)顯示循環(huán)和數(shù)據(jù)存儲循環(huán)的后臺程序流程如圖2所示。

圖2 數(shù)據(jù)顯示和存儲程序流程
在緩沖處理循環(huán)的Initialize狀態(tài)中,首先利用初始化數(shù)組函數(shù)開辟緩沖區(qū)A和緩沖區(qū)B(50行64列的二維數(shù)組),并且初始化數(shù)組指針為0。程序進入Buffer狀態(tài)后,當(dāng)上位機每隔10 ms接收到一幀64個字節(jié)的數(shù)據(jù)后,利用數(shù)組替換子集函數(shù)將數(shù)據(jù)寫入到緩沖區(qū)A中,第1條數(shù)據(jù)替換到緩沖區(qū)A的第1行(組數(shù)指針初始化為0),同時數(shù)組指針自動加1,即第2條數(shù)據(jù)存放到第2行,當(dāng)存放到第50條時(數(shù)組指針為49),標(biāo)志緩沖區(qū)A放滿,切換到緩沖區(qū)B,將后續(xù)數(shù)據(jù)存放到緩沖區(qū)B中,操作與緩沖區(qū)A相同。同時對緩沖區(qū)A中的數(shù)據(jù)進行存儲操作,借助隊列函數(shù)將其傳輸?shù)酱鎯ρh(huán)中進行存儲。這樣就實現(xiàn)接收數(shù)據(jù)的同時又在存儲數(shù)據(jù)。當(dāng)緩沖區(qū)B存滿時,再將數(shù)據(jù)存放到緩沖區(qū)A中,同時對緩沖區(qū)B中的數(shù)據(jù)進行存儲操作。如此依次進行存放和存儲操作,接收雙緩沖機制流程如圖3所示。

圖3 雙緩沖流程
3測試結(jié)果
實際工程項目應(yīng)用中,上位機電腦配置為:Intel Celeron 1.5 GHz主頻,4 G內(nèi)存,500 G硬盤,Windows XP操作系統(tǒng),本地數(shù)據(jù)庫采用Access2007。下位機DSP數(shù)據(jù)終端以10 ms間隔,115200bps速率持續(xù)向上位計算機發(fā)送64個字節(jié)的數(shù)據(jù)幀,利用前述技術(shù)方案在LabVIEW環(huán)境下編程,上位機能夠?qū)崟r接收數(shù)據(jù)、顯示數(shù)據(jù)和存儲數(shù)據(jù),并且在接收和處理數(shù)據(jù)時沒有發(fā)生緩沖區(qū)溢出現(xiàn)象。根據(jù)實驗測試數(shù)據(jù),可以計算得到平均存儲一條數(shù)據(jù)記錄的時間t=4.08 ms。
4結(jié)束語
結(jié)合實際項目,實現(xiàn)基于雙緩沖的高速串口通信程序,能可靠地接收數(shù)據(jù)終端所發(fā)送的數(shù)據(jù),完整準(zhǔn)確地進行顯示和存儲,能夠達到預(yù)先提出的設(shè)計指標(biāo)。進一步的研究方向是提高數(shù)據(jù)傳輸?shù)乃俾?如發(fā)送時間間隔減小或者增大發(fā)送數(shù)據(jù)長度),以達到更好的技術(shù)性能,并引入高性能數(shù)據(jù)庫管理系統(tǒng)(如SQL Sever或Oracle等來提高程序的整體性能)。
參考文獻:
[1]李江全. LabVIEW虛擬儀器從入門到測控應(yīng)用130例. 北京:電子工業(yè)出版社,2013.
[2]蘇岳龍,李貽斌,宋銳. 基于VC++6.0的高速串口通信數(shù)據(jù)采集系統(tǒng).微計算機信息,2005,21(5):147-148.
[3]Bitter R,Mohiuddin T. LabVIEW advanced programming techniques. Boston:CRC Press,2001.
[4]趙奇峰,閔濤,楊黔龍,等. 基于LabVIEW串口數(shù)據(jù)采集系統(tǒng)設(shè)計. 計算機技術(shù)與發(fā)展,2011,21(11):224-226.
[5]徐華中,黃麗萍. 基于LabVIEW和DSP串口的多通道電機參數(shù)采集系統(tǒng).電子測量技術(shù),2011,34(4):66-69.