基于Delphi的車載數據顯示界面的設計
引言
在自動控制、儀表智能化、工業測控點實時監控等領域中,人們經常用計算機對生產過程實行實時監控,以對下位機采集來的數據進行實時數據處理,同時產生和傳輸控制信號,在這種特定環境下,計算機要與過程控制的實時信號相聯系,為此,使用筆者使用delphi開發了一個車載數據采集顯示系統的界面,從而在基于windows操作系統中實現了下位機與上位機的數據通信。
設計思想和軟件架構
delphi是一種功能強大的高級編程語言,它具有可視化,面向對象的特性,特別適于在windows環境下進行圖形界面和用戶程序的編制[1],該顯示系統的下位機以dsp為核心,可實現對重要參數的檢測、控制,并將采集的數據以一定的方式向上位機發送,從而實現與上位機的數據通信,在數據傳輸的過程中仍然采用串行通信的方式,該軟件的總體設計任務是:
(1)通過該軟件對串口參數進行配置,以與下位機形成統一的通訊協議。
(2)通過該軟件實時顯示下位機的數據采集值,同時調用和察看存盤的數據記錄。
基于以上任務,該界面的軟件架構模型如圖1所示,該程序由串口通信模塊、數據處理模塊、數據顯示模塊和數據保存模塊四部分組成。

軟件設計
串口通信模塊的設計
在delphi環境下的串口通信實現方法主要有4種,即使用控件(如mscomm)、使用api函數,使用行間匯編asm或在程序中調用其他串口通程序[2],利用api函數或行間匯編編寫串口通信程序較為復雜,但優點是可以實現功能更強大,應用更廣泛、更復雜的低層次通信程序,mscomm通信控件可以用來提供簡單的串行端口通訊功能,也可以用來創建功能完備、事件驅動的高級通訊工具,該控件提供了一系列標準通訊命令的使用界面,使用它可以建立與串行端口的連接,并通過串行端口連接到其他通訊設備(例如調制解調器),以發出命令、交換數據和監視及響應串行連接中發生的事件和錯誤,因為mscomm控件的屬性較多,應用起來比較方便,所以用該控件編寫串行通信程序相對來說比較簡單,下面介紹本文在程序設計中用到該控件的幾個屬性:
comm port:設置并返回通信口號。
comm event:返回通信事件或錯誤。
input:返回并刪除接收緩沖區中的數據,在設計時,該功能無效,而在運行時為只讀。
inputlen:確定被input屬性讀取的字符數。
inputmode:設置并返回被input屬性讀取的數據類型,其中cominputmodetext以文本形式返回,而cominputmodetext以本文形式返回,而cominputmodebinary則以二進制形式返回。
output:向輸出緩沖區中寫入數據,在設計時無效,運行時為只讀。
portopen:設置并返回通信端口開或關的狀態,運行時有效。
rthreshold:在mscomm控件中設置commevent屬性為commevreceive,并在產生oncomm事件之前,設置并返回要接收的字符數。
settings:設置并返回初始化參數,即波特率、奇偶校驗、數據位和停止位。
oncomm事件:當commevent屬性的值變化時產生次事件,以標志發生了一個通信事件或錯誤。
mscomm控件有兩種處理通信的方式,即事件驅動和查詢方式[3],事件驅動方式是處理端口通信的一種有效方法,它可以利用oncomm事件捕獲并處理通信中發生的事件或錯誤,實時性較強,而查詢方式是在程序通過查詢commevent屬性的值來判斷通信的過程中的事件或錯誤,這種方式適合于應用程序較小、實時性要求不是很高的系統中,本文采取的是事件驅動方式,用戶可以在oncomm事件中編寫程序代碼。串口通信的主要步驟有:
(1)設置通信對象、通信端口以及其他屬性;
(2)設定通信協議;
(3)打開通信端口,進行數據的傳送;
(4)關閉通信端口。
下位機主要用于將采集上來的數據通過pc機上的rs-232接口發送到上位機,其程序流程如圖2所示。

數據處理模塊的設計
數據處理模塊的主要任務是將從下位機上接收到的數據進行分類,并對數據進行分割和轉化,以得到需要的數據,在下位機和上位機的通信過程中數據是按照一定的通信協議進行封裝和傳輸的,下位機把數據以16進制的數組形式向上發送,其數據幀的封裝格式如圖3所示,一幀數據包括10個字節,其中id號占2個字節,每個data占一個字節,id號代表了數據的類型含義,data則代表具體的數據值,圖4是具體傳輸的數值模式。

因此,在程序設計中,必須將id號和數據進行分離,以分別讀出它們各自的數值,然后根據id的數值對相應的數據進行分類和轉化,以變成所需要的數據,并附值給相應的變量,從而在后面的顯示模塊設計中合理地使用這些變量來達到正確顯示數據的功能,其程序流程圖如圖5所示。

數據顯示模塊的設計
在數據顯示模塊的設計當中,筆者使用了timer(定時器)這一控件來進行軟件的開發。因為在軟件設計過程中,定時器所起到的作用是非常大的。timer控件具有enabled(定時器使能屬性)、interval(定時時間間隔)等屬性。使用timer時,首先要將enable置1,然后設定時間間隔,最后在ontimer()事件中添加程序代碼。
由于車輛狀態的各種參數的實時性相當重要,它是駕駛員作出正確操作的根本依據,因此,數據的顯示要求是動態實時地反應車輛的行駛狀況,采用定時器可以每隔一段時間對顯示的數據進行一次刷新,從而很好地滿足這一需要[4]。顯示程序的代碼可以全部寫在定時器里面,數據顯示的界面分為歡迎界面、整車參數顯示界面、燃料電池參數顯示界面、鎳氫電池參數顯示界面和狀態信息顯示界面,每一個界面都能實時的反應正確的參數信息,并回饋給駕駛員每個部分的工作狀態,其中整車參數顯示界面如圖6所示,燃料電池參數顯示界面圖如圖7所示。


數據保存模塊的設計
在該界面的設計過程中,還有一個數據保存模塊。該模塊的功能是將車上重要的行駛參數和狀態參數保存到計算機的硬盤里,也可以通過usb接口用移動硬盤將數據從計算機里讀出,以方便工作人員和研究人員對數據的察看和分析,從而對汽車的性能和控制作進一步的改善,因為汽車在行駛過程中下位機與上位機的通信數據量非常大,如果每接收到一組數據,就將數據往文件里寫一次,那么對資源的開銷太大,而且會降低軟件的運行效率,所以,本文采用定時方式,即每隔一段時間存儲一次數據,即對數據的存儲過程是在定時器里完成的,這樣,每次汽車啟動時,就可在系統里建立一個文本文件,并設置文件的存儲路徑,然后每隔一段時間向這個本文文件里寫一次數據,數據的保存格式遵循通信協議里數據幀的格式,在程序的設計過程中,調用api函數即可實現數據的存儲,其程序流程圖如圖8所示。

結束語
本文給出了基于delphi的車載數據顯示系統界面的設計框架和軟件體系結構,本系統通過串行通信技術來實現下位機和上位機的實時通信,并通過對實時數據的處理,顯示和存儲,來達到對汽車行駛狀態的監控,實踐證明:用delphi開發該系統,其人機界面友好,便于操作,移植性強,并具有很好的擴充性。可以相信隨著工業信息化和自動化的發展,這項技術將會應用在更多的領域。
評論