馬 敏,楊勝偉
(中國民航大學(xué) 電子信息與自動化學(xué)院,天津 300300)
在很多工業(yè)控制中都會用到上位機(jī)與下位機(jī)之間的通信,兩者之間經(jīng)常使用串口來實現(xiàn)數(shù)據(jù)交換[1]。為了上位機(jī)與下位機(jī)之間快速、高效的通信,需要根據(jù)兩者之間的通信協(xié)議在上位機(jī)設(shè)計相應(yīng)的串口通信程序[2]。LabVIEW提供與遵從GPIB、VXI、RS232和RS485協(xié)議的硬件及數(shù)據(jù)采集卡通信的全部功能,還內(nèi)置了支持TCP/IP、ActiveX等軟件標(biāo)準(zhǔn)的庫函數(shù)。其圖形化編程語言環(huán)境,簡單直觀,相較傳統(tǒng)的文本語言串口通信程序開發(fā),極大節(jié)省程序開發(fā)時間,可以完成各種各樣的編程任務(wù)。因此利用LabVIEW實現(xiàn)PC機(jī)與MCU的串口通信是一種更為簡捷的方法。本文采用LabVIEW實現(xiàn)了與下位機(jī)的串口通信,并設(shè)計了多氣體監(jiān)測系統(tǒng),實現(xiàn)了數(shù)據(jù)的采集、顯示與存儲。
整個數(shù)據(jù)通信系統(tǒng)配置由帶LabVIEW監(jiān)控程序的PC機(jī)、USB通訊電纜、智能控制器構(gòu)成。在下位機(jī)系統(tǒng)中,由各傳感器將采集到的參數(shù)傳遞給STM8處理器進(jìn)行處理,并通過串口模塊與上位機(jī)交互。在上位機(jī)系統(tǒng)中,由LabVIEW編寫的串口程序與下位機(jī)實現(xiàn)整個系統(tǒng)的通信并對傳遞的信號進(jìn)行處理。系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
STM8L151是一種具有超低功耗特性的功能強大的單片機(jī),STM8L151片內(nèi)有1個通用串行同步/異步模塊USART1,支持通用異步協(xié)議 (UART協(xié)議)和同步協(xié)議(SPI協(xié)議),通信方式為通用異步接收/發(fā)送(UART)。主機(jī)為PC機(jī)時,通過RS-485接口實現(xiàn)主機(jī)與從機(jī)的通信。電路原理圖如圖2所示。
圖2 系統(tǒng)串口硬件電路Fig.2 System serial port hardware circuit
本文設(shè)計的通信系統(tǒng)采用主從式的UART通信協(xié)議,在此協(xié)議模式下MCU為從機(jī),帶LabVIEW監(jiān)控程序的PC機(jī)為主機(jī)[3]。STM8將各路采集的數(shù)據(jù)以一定的數(shù)據(jù)格式存儲到一個數(shù)據(jù)幀中,當(dāng)收到上位機(jī)指令時此數(shù)據(jù)幀通過串口發(fā)送至PC,采用LabVIEW軟件對串口收到的數(shù)據(jù)進(jìn)行采集、顯示、處理和存儲。
本系統(tǒng)采用通用RS485總線,所有控制板連接在1條RS485總線上;下位機(jī)在通信中處于從站的地位,上位PC機(jī)處于主站地位。工作時采用指令/應(yīng)答的通信方式,每一種指令幀對應(yīng)著一種應(yīng)答幀。當(dāng)針對某臺從機(jī)發(fā)送指令時,所有的從機(jī)都能監(jiān)聽到該指令,但只有地址匹配的從機(jī)才真正接收主機(jī)指令然后作出相應(yīng)的響應(yīng),地址不匹配的從機(jī)不予以應(yīng)答,僅處于偵測狀態(tài)。
所有通信都以“打包”方式發(fā)生。1個報文就是1個簡單的字符串 (每個字符8位),1個報文中最多可含255個字節(jié)。組成這個報文的字節(jié)構(gòu)成標(biāo)準(zhǔn)異步串行數(shù)據(jù),8位數(shù)據(jù)位,1位停止位,偶校驗的方式傳遞。
1幀完整的消息包含1個地址字節(jié)、1個命令字節(jié)、1個數(shù)據(jù)長度字節(jié)、N個數(shù)據(jù)字節(jié)及2個校驗字節(jié),其中校驗域為16位CRC校驗方式下生成的CRC16校驗碼。其格式如表1所示。
表1 幀格式Tab.1 Frame format
每一幀消息的發(fā)送都要以3.5個字符時間以上的停頓間隔開始;因此,當(dāng)系統(tǒng)檢測到當(dāng)前一個字節(jié)與上一個字節(jié)的間隔時間大于3.5個T約于3.5 ms時,自動將這一個字節(jié)做為一個消息幀的開始。
當(dāng)接收到第一個字節(jié)(地址),每個設(shè)備都進(jìn)行解碼以判斷是否發(fā)往自己的。在最后一個傳輸字符之后,同樣至少3.5個字符時間以上的停頓間隔來表明一幀消息的結(jié)束。一個新的消息可在此停頓后開始。
整個消息幀必須連續(xù)的發(fā)送。如果在幀完成之前的2個字節(jié)間有超過3.5個字符時間的停頓時間,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個新消息的地址域。同樣地,如果一個新消息在小于3.5個字符時間內(nèi)接著前個消息開始,接收的設(shè)備將認(rèn)為它是前一消息的延續(xù)。這將導(dǎo)致通信錯誤,因為在校驗時值肯定是錯誤的。
從機(jī)的地址是一個字節(jié),范圍為1~255(0xFF)。主機(jī)通過將要聯(lián)絡(luò)的從機(jī)的地址放入消息中的地址域來選通從機(jī)。當(dāng)從機(jī)發(fā)送回應(yīng)消息時,它把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個設(shè)備作出回應(yīng)。
當(dāng)消息從主機(jī)發(fā)往從機(jī)時,功能代碼將使從機(jī)知道需要執(zhí)行哪些具體的任務(wù)。對于不同的命令,從機(jī)將做不同的應(yīng)答;如果操作正確,對于查詢性質(zhì)的指令,從機(jī)將返回一條帶有指定的信息的消息;對于操作性質(zhì)的指令,從機(jī)在完成指定操作后,將返回一個空數(shù)據(jù)(即數(shù)據(jù)長度字節(jié)為0)的消息到主機(jī),以確認(rèn)操作成功;如果通信異常,從機(jī)將返回一個包括異常碼在內(nèi)的異常響應(yīng)。
LabVIEW提供了功能強大的VISA(virtual in strument software architecture)庫,VISA 作為 LabVIEW程序中驅(qū)動程序間相互通信的底層功能模塊,可連接不同標(biāo)準(zhǔn)的I/O設(shè)備,是一個用來在串口通信設(shè)備、VXI設(shè)備、GPIB設(shè)備及其他基于計算機(jī)設(shè)備間通信的函數(shù)庫[4]。
1)VISA resource name:VISA 資源名稱,即串口號。
2)VISA Configure Serial Port節(jié)點。該節(jié)點完成串口參數(shù)的設(shè)置,包括串口資源分配、波特率、數(shù)據(jù)位、停止位、校驗位等,波特率默認(rèn)值為9600,數(shù)據(jù)比特默認(rèn)為8位。該節(jié)點位于儀器I/O面板的Serial中。
3)VISA Write節(jié)點。如果初始化沒有問題,就可以使用這個節(jié)點發(fā)送數(shù)據(jù)。它是指將輸出緩沖區(qū)中的數(shù)據(jù)發(fā)送VISA resource name指定的串口。
4)VISA Bytes at Serial Port節(jié)點。此節(jié)點用來查詢VISA resource name指定的串口接收緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),通常將此節(jié)點放到VISA Write之后用來得到串口字節(jié)數(shù)。
5)VISA Read節(jié)點。此節(jié)點的作用是將VISA resource name指定的串口接收緩沖區(qū)中的數(shù)據(jù)讀取指定字節(jié)數(shù)的數(shù)據(jù)到計算機(jī)內(nèi)存中。
6)在某些特殊情況下,需要設(shè)置串口接收/發(fā)送緩沖區(qū)的大小,此時可以使用VISA Set I/O Buffer Size;而使用VISA Flush I/O Buffer則可以清空接收與發(fā)送緩沖區(qū)。在串口使用結(jié)束后,使用VISA Close結(jié)束與VISA resource name指定的串口之間的會話。
圖3 程序流程Fig.3 Program flow chart
1)數(shù)據(jù)轉(zhuǎn)換
在LabVIEW平臺控制的串行通信過程中,數(shù)據(jù)格式是以字符串的格式組成的,字符串中的每個字符實際上對應(yīng)我們熟悉的ASCII字符,即計算機(jī)能夠識別的數(shù)據(jù)代碼是ASCII代碼,所以在傳送到串口發(fā)送數(shù)據(jù)之前要經(jīng)過代碼轉(zhuǎn)換,這就意味著以十進(jìn)制、二進(jìn)制、十六進(jìn)制表示的數(shù)據(jù)必須轉(zhuǎn)化為ASCII字符串才能進(jìn)行傳送和接收[5]。程序如圖4所示。
圖4 16進(jìn)制轉(zhuǎn)化為ASCII碼Fig.4 Hexadecimal into ASCII
2)數(shù)據(jù)校驗
本設(shè)計采用CRC16的數(shù)據(jù)校驗,保證通信數(shù)據(jù)的可靠性。CRC16包含2個字節(jié),低字節(jié)在前,高字節(jié)在后[6]。CRC16碼由發(fā)送設(shè)備計算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計算接收到信息的CRC16碼,比較計算得到的CRC16碼是否與接收到的相符,如果兩者不相符,則表明出錯。
圖5CRC校驗Fig.5 Cyclic redundancy check
3)數(shù)據(jù)處理與顯示
當(dāng)LabVIEW接收到串口傳來的數(shù)據(jù)時,先截取第一個字符判斷地址,再截取第二個字符判斷功能命令。然后將接收到的數(shù)據(jù)轉(zhuǎn)化為數(shù)值顯示出來,并設(shè)置了報警閾值。
4)數(shù)據(jù)保存
在工業(yè)生產(chǎn)和科學(xué)實驗過程中,人們往往通過對歷史數(shù)據(jù)分析、比較才挖掘到有用信息,并利用這些信息進(jìn)一步地設(shè)計方案或?qū)嶒?。所以,串口調(diào)試軟件的數(shù)據(jù)的存儲顯得格外有意義,尤其采用時間命名文件,保存為.xls或.txt格式,這一點就顯得尤為突出。本上位機(jī)軟件能夠?qū)崟r存儲接收到的數(shù)據(jù),并且以便于事后分析的格式完整存儲,其存儲數(shù)據(jù)可以直接導(dǎo)入MabLAB等軟件經(jīng)行分析。
圖6 數(shù)據(jù)處理及存儲程序Fig.6 Data processing and storage program
為了測試系統(tǒng)的可靠性,使用上述氣體采集系統(tǒng)對某實驗室的氣體濃度進(jìn)行監(jiān)測,首先配置VISA參數(shù),波特率9600,數(shù)據(jù)位為8位,偶校驗。然后打開功能命令開關(guān),選擇氣體類型,氣體單位和數(shù)值量程,最后讀取數(shù)據(jù)。圖7為測試時的主界面,部分?jǐn)?shù)據(jù)如圖8所示。
圖7 系統(tǒng)上位機(jī)主界面Fig.7 PC interface
圖8 部分采集的數(shù)據(jù)Fig.8 Partial data
本文采用STM8串口作為數(shù)據(jù)發(fā)送端,Lab-VIEW作為數(shù)據(jù)接收端,實現(xiàn)了對多氣體傳感器的實時數(shù)據(jù)采集,能夠正確地顯示出各通道采集數(shù)據(jù)的實時波形。本系統(tǒng)具有成本低,操作簡單,界面友好,功能豐富,可移植性強,可擴(kuò)展性強等特點。在實現(xiàn)以上功能的基礎(chǔ)上,以后可以對該平臺進(jìn)一步擴(kuò)展,如成本的降低,硬件系統(tǒng)性能的提高,更高速的通信方式,用戶界面的完善,遠(yuǎn)程控制等方面,使平臺更加實用方便。
[1]呂向鋒,高洪林,馬亮,等.基于LabVIEW串口通信的研究[J].國外電子測量技術(shù),2009,28(12):27-30.
[2]王定遠(yuǎn),胡吉朝,李嬡.基于MScomm32和LabVIEW的串口通信技術(shù)[J].國外電子測量技術(shù),2006,25(4):61-64.
[3]張杰,張軼,王曉剛,等.基于USB串口的LabVIEW與MSP430通信實現(xiàn)[J].自動化與儀表,2011,26(3):38-41.
[4]崔牧凡.基于LabVIEW和FPGA的串口通信系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用,2012,32(S2):82-84.
[5]趙梅,胡天亮,張倩,等.基于LabVIEW的AMT數(shù)據(jù)采集系統(tǒng)設(shè)計與研究[J].山東大學(xué)學(xué)報:工學(xué)版,2011,41(6):70-74.
[6]陳金平,王生澤,吳文英.基于LabVIEW的CRC檢錯碼校驗方法[J].自動化儀表,2004,25(5):74-76.