<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費電子 > 設計應用 > 基于Delphi的車載數(shù)據(jù)顯示界面的設計

          基于Delphi的車載數(shù)據(jù)顯示界面的設計

          ——
          作者:陳俊麟 吳友宇 武漢理工大學 信息工程學院 時間:2007-01-26 來源:《電子元器件應用》 收藏

          引言

          在自動控制、儀表智能化、工業(yè)測控點實時監(jiān)控等領域中,人們經(jīng)常用計算機對生產(chǎn)過程實行實時監(jiān)控,以對下位機采集來的數(shù)據(jù)進行實時數(shù)據(jù)處理,同時產(chǎn)生和傳輸控制信號,在這種特定環(huán)境下,計算機要與過程控制的實時信號相聯(lián)系,為此,使用筆者使用delphi開發(fā)了一個車載數(shù)據(jù)采集顯示系統(tǒng)的界面,從而在基于windows操作系統(tǒng)中實現(xiàn)了下位機與上位機的數(shù)據(jù)通信。

          設計思想和軟件架構

          delphi是一種功能強大的高級編程語言,它具有可視化,面向?qū)ο蟮奶匦?,特別適于在windows環(huán)境下進行圖形界面和用戶程序的編制[1],該顯示系統(tǒng)的下位機以dsp為核心,可實現(xiàn)對重要參數(shù)的檢測、控制,并將采集的數(shù)據(jù)以一定的方式向上位機發(fā)送,從而實現(xiàn)與上位機的數(shù)據(jù)通信,在數(shù)據(jù)傳輸?shù)倪^程中仍然采用串行通信的方式,該軟件的總體設計任務是:

          (1)通過該軟件對串口參數(shù)進行配置,以與下位機形成統(tǒng)一的通訊協(xié)議。

          (2)通過該軟件實時顯示下位機的數(shù)據(jù)采集值,同時調(diào)用和察看存盤的數(shù)據(jù)記錄。

          基于以上任務,該界面的軟件架構模型如圖1所示,該程序由串口通信模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)顯示模塊和數(shù)據(jù)保存模塊四部分組成。

          本文引用地址:http://www.ex-cimer.com/article/21509.htm

          軟件設計

          串口通信模塊的設計

          在delphi環(huán)境下的串口通信實現(xiàn)方法主要有4種,即使用控件(如mscomm)、使用api函數(shù),使用行間匯編asm或在程序中調(diào)用其他串口通程序[2],利用api函數(shù)或行間匯編編寫串口通信程序較為復雜,但優(yōu)點是可以實現(xiàn)功能更強大,應用更廣泛、更復雜的低層次通信程序,mscomm通信控件可以用來提供簡單的串行端口通訊功能,也可以用來創(chuàng)建功能完備、事件驅(qū)動的高級通訊工具,該控件提供了一系列標準通訊命令的使用界面,使用它可以建立與串行端口的連接,并通過串行端口連接到其他通訊設備(例如調(diào)制解調(diào)器),以發(fā)出命令、交換數(shù)據(jù)和監(jiān)視及響應串行連接中發(fā)生的事件和錯誤,因為mscomm控件的屬性較多,應用起來比較方便,所以用該控件編寫串行通信程序相對來說比較簡單,下面介紹本文在程序設計中用到該控件的幾個屬性:

          comm port:設置并返回通信口號。

          comm event:返回通信事件或錯誤。

          input:返回并刪除接收緩沖區(qū)中的數(shù)據(jù),在設計時,該功能無效,而在運行時為只讀。

          inputlen:確定被input屬性讀取的字符數(shù)。

          inputmode:設置并返回被input屬性讀取的數(shù)據(jù)類型,其中cominputmodetext以文本形式返回,而cominputmodetext以本文形式返回,而cominputmodebinary則以二進制形式返回。

          output:向輸出緩沖區(qū)中寫入數(shù)據(jù),在設計時無效,運行時為只讀。

          portopen:設置并返回通信端口開或關的狀態(tài),運行時有效。

          rthreshold:在mscomm控件中設置commevent屬性為commevreceive,并在產(chǎn)生oncomm事件之前,設置并返回要接收的字符數(shù)。

          settings:設置并返回初始化參數(shù),即波特率、奇偶校驗、數(shù)據(jù)位和停止位。

          oncomm事件:當commevent屬性的值變化時產(chǎn)生次事件,以標志發(fā)生了一個通信事件或錯誤。

          mscomm控件有兩種處理通信的方式,即事件驅(qū)動和查詢方式[3],事件驅(qū)動方式是處理端口通信的一種有效方法,它可以利用oncomm事件捕獲并處理通信中發(fā)生的事件或錯誤,實時性較強,而查詢方式是在程序通過查詢commevent屬性的值來判斷通信的過程中的事件或錯誤,這種方式適合于應用程序較小、實時性要求不是很高的系統(tǒng)中,本文采取的是事件驅(qū)動方式,用戶可以在oncomm事件中編寫程序代碼。串口通信的主要步驟有:

          (1)設置通信對象、通信端口以及其他屬性;

          (2)設定通信協(xié)議;

          (3)打開通信端口,進行數(shù)據(jù)的傳送;

          (4)關閉通信端口。

          下位機主要用于將采集上來的數(shù)據(jù)通過pc機上的rs-232接口發(fā)送到上位機,其程序流程如圖2所示。

          數(shù)據(jù)處理模塊的設計

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



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

          數(shù)據(jù)顯示模塊的設計

          在數(shù)據(jù)顯示模塊的設計當中,筆者使用了timer(定時器)這一控件來進行軟件的開發(fā)。因為在軟件設計過程中,定時器所起到的作用是非常大的。timer控件具有enabled(定時器使能屬性)、interval(定時時間間隔)等屬性。使用timer時,首先要將enable置1,然后設定時間間隔,最后在ontimer()事件中添加程序代碼。

          由于車輛狀態(tài)的各種參數(shù)的實時性相當重要,它是駕駛員作出正確操作的根本依據(jù),因此,數(shù)據(jù)的顯示要求是動態(tài)實時地反應車輛的行駛狀況,采用定時器可以每隔一段時間對顯示的數(shù)據(jù)進行一次刷新,從而很好地滿足這一需要[4]。顯示程序的代碼可以全部寫在定時器里面,數(shù)據(jù)顯示的界面分為歡迎界面、整車參數(shù)顯示界面、燃料電池參數(shù)顯示界面、鎳氫電池參數(shù)顯示界面和狀態(tài)信息顯示界面,每一個界面都能實時的反應正確的參數(shù)信息,并回饋給駕駛員每個部分的工作狀態(tài),其中整車參數(shù)顯示界面如圖6所示,燃料電池參數(shù)顯示界面圖如圖7所示。


          數(shù)據(jù)保存模塊的設計

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

          結(jié)束語

          本文給出了基于delphi的車載數(shù)據(jù)顯示系統(tǒng)界面的設計框架和軟件體系結(jié)構,本系統(tǒng)通過串行通信技術來實現(xiàn)下位機和上位機的實時通信,并通過對實時數(shù)據(jù)的處理,顯示和存儲,來達到對汽車行駛狀態(tài)的監(jiān)控,實踐證明:用delphi開發(fā)該系統(tǒng),其人機界面友好,便于操作,移植性強,并具有很好的擴充性??梢韵嘈烹S著工業(yè)信息化和自動化的發(fā)展,這項技術將會應用在更多的領域。



          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();