基于LabVIEW語言的PC機與單片機的串口通信
摘要:設計了一種基于LabVIEW語言的單片機與PC機的串口通信。從軟件實現方案、程序結構、結果檢測等方面介紹了串口通信電路的實現。能精確地再現單片機采集的低頻信號。
串行通信是一種常用的數據傳輸方法,雖然它的傳輸速度慢,但它占用的通信線路少,成本低,在工程的通信方式上仍有重要地位。
目前,串口通信程序的開發,在Windows操作系統下一般用VB、VC、Delphi等編寫。當用VB、VC開發串行通信程序時,開發人員不得不面對非常煩瑣的API函數編程;而Delphi沒有自帶的串口通信控件,在它的幫助文檔里也沒有提及串口通信,這也給編程人員帶來許多不便。
可見,用上述三種文本語言編串口通信程序較為復雜,花費的時間較長。筆者試圖找到一種實現PC機與單片機的串口通信更為簡捷的方法:利用LabVIEW進行開發。
1 軟件實現方案
1.1 應用軟件概述
LabVIEW語言是美國國家儀器(NI)公司開發的一種基于圖形程序的編程語言,利用該語言編寫的模塊化程序,具有良好的界面,簡單、直觀,且易于理解、調試和維護。做成的虛擬儀表可以當作許多儀器設備來使用,其功能完全由用戶編程定義。另外,LabVIEW內還含豐富的數據采集、數據信號分析以及控制等子程序,特別適用于數據采集、通信處理系統。它在信號處理的強大功能方面也是組態軟件不可比擬的(它比用基于文本的語言開發效率可以提高10-15倍)。
虛擬儀器系統中串口通信一般用于傳統儀器控制和緩慢變化信號的采集。而本項目涉及到的紅外探測器所探測的斬波信號僅12Hz,故采用LabVIEW進行串口通信,既經濟實惠又能達到預期目的。
1.2 通信模塊的引入
在LabVIEW中,對串行口進行控制的方式通常有兩種:一是利用LabVIEW功能模塊的Instrument I/O-〉VISA子模塊;二是直接利用LabVIEW功能模塊Instrument I/O-〉Serial子模塊,該程序庫中包含進行串行通信操作的一些功能模塊。這正符合本軟件開發的需要。
1.3 通信模塊的屬性
表1給出了本系統用到的幾個通信模塊的基本屬性的描述。
2 程序結構
本程序主要采用順序結構實現,具體流程如圖1所示:
首先,初始化串口。據實際需要選擇并打開com口,打開串口時根據雙方協議設置波特率、數據位、奇偶校驗位、停止位、緩沖區大小等。如果打開串口無誤,指示燈亮;否則提示串口出錯,并關閉串口。初始化成功后,退出第一楨,進入第二楨。
其次,輸入命令字到串口。因雙方約定單片機輸入的命令字為十六進制的55(ASCⅡ碼字符表示為U),故在程序框圖中輸入的字串若用ASCⅡ碼字符表示為U,用HEX進制表示為55。若寫入的命令字有誤,或寫入串口模塊打不開,出現出錯提示,重新要求打開串口。
第三,延時。因涉及在操作系統的幾層間傳遞信息,加之從主機發送命令到單片機,單片機判斷為正確命令后返回數據給主機是需要一定的時間的,故這一步進行延時等待。延時時間可視情況而定,只要大于單片機回送給主機的時間就行。具體執行時間可由LabVIEW工具菜單欄下的advanced下的profile來確定程序運行時間。若不加以延時程序會有出錯提示。
最后,顯示部分,主要程序代碼如圖2所示。根據需要進行圖形及表格顯示。為能準確計算被測信號的頻率值,使前面板橫軸表示的時間盡可能準確,在顯示圖形Graph前用bundle進行處理。實踐表明:通過這種處理方式,可使被測信號的頻率值誤差在百分之三以內。在數組顯示前用一個重構數組函數將單片機送來的數據構建成一個10行8列的數組,后利用兩層for循環實現數組的行列顯示。
3 結果檢測
該程序經實際運行證明具有較高的運行速度和測量精度。在此筆者僅給出了f=12Hz時的前面板結果顯示圖(圖3):在波形圖中橫軸表示時間(ms),縱軸為實測的單片機的采樣電壓值(單位:v)。因在程序代碼4中進入波形圖的數據本身已經過綁定處理,故得到的為我們熟悉的十進制數據。又因單片機發送數據一般為八位,為檢驗數據的正確性,本文采用另一種顯示方式---表格顯示。表格中的數據是用無符號的八位整形表示,范圍在0到255之間,與波形圖縱軸表示方法不同,必須將之進行換算才可得如波形圖表示的電壓值,其換算方法為:
U = X *2.7/255
式中:X為表格中數據;U為實際電壓值。
從該顯示圖上可推出,實測頻率約為12.195Hz,示波器顯示正確頻率為12Hz,誤差僅為1.625%,實測結果非常接近于理想輸出,符合設計要求。
4 結束語
該通信方式簡單、可靠、穩定,具有很好的可移植性、實時性,可供其它串口通信系統參考。該程序現已用于筆者的實際工作。
文章版權歸西部工控xbgk所有,未經許可不得轉載。