<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 用于卷煙機組的CAN總線(xiàn)實(shí)時(shí)監聽(tīng)器的設計與實(shí)現

用于卷煙機組的CAN總線(xiàn)實(shí)時(shí)監聽(tīng)器的設計與實(shí)現

作者: 時(shí)間:2012-02-22 來(lái)源:網(wǎng)絡(luò ) 收藏

引 言
  
卷煙生產(chǎn)中的主要包括兩大部分,MLP,用于為和檢測系統提供操作和顯示的裝置,它包括一個(gè)工業(yè)PC和一個(gè)監視器。以及下位機SRP,包括傳感器,調節裝置或者檢測裝置。SRP主要包括四種結點(diǎn)1)SPS,2)HIP,3)CIS,4)SRM。和下位機各結點(diǎn)之間的通信是頻繁的,數據對象眾多,數據種類(lèi)也繁多,包括參數上傳,下傳,指令,域數據等等,所以在這之中,難免會(huì )因為操作人員操作失誤或者控制器本身的原因導致錯誤,但錯誤發(fā)生的時(shí)候需要盡快的分析,發(fā)現錯誤,解決錯誤。因此我們需要建立一個(gè)可靠的錯誤判斷機制。本文所討論的CANBUS實(shí)時(shí)監聽(tīng)器正是應這種需求而產(chǎn)生的。工作人員根據實(shí)時(shí)監聽(tīng)器所捕獲的并且友好顯示的線(xiàn)路上的適時(shí)數據便可分析出是哪一方出了問(wèn)題,出了什么類(lèi)型的問(wèn)題。這對安全生產(chǎn),準確控制起了舉足輕重的作用。

(一) 硬件實(shí)現
  
在實(shí)時(shí)監聽(tīng)器的實(shí)現中,我們選擇采用了周立功公司的PCI-9810非智能CAN接口卡作為硬件接口用于接收捕獲上的傳輸數據。如下圖
  
PCI-9810非智能CAN接口卡是具有高性能價(jià)格比的CAN-bus總線(xiàn)通訊適配卡,它使PC機方便的連接到上,實(shí)現CAN2.0B協(xié)議的連接通訊。它是一款采用專(zhuān)用PCI接口轉換芯片設計的非智能型CAN接口卡,即插即用,符合PCI2.1規范。它采用中斷接收方式,可最大限度減輕占用PC的負荷;具有最多8幀的數據緩沖區。另外我們采用了周立功公司提供的Windows驅動(dòng)程序升級版PCI-9810BWDM驅動(dòng)文件將其驅動(dòng)。


(二) 界面軟件實(shí)現
  
界面軟件實(shí)現主要包括四大方面,1)軟件平臺的選擇,2)對硬件接口CAN卡的使用,3)利用接口接收CANBUS線(xiàn)路上數據的實(shí)現,4)所接收數據的處理(主要是判斷和顯示)的實(shí)現。
  
〈1〉軟件平臺的選擇—DELPHI

系統的開(kāi)發(fā)可利用多種程序設計語(yǔ)言,如DELPHI,VB,VC,PB等語(yǔ)言都是面向對象的程序設計語(yǔ)言,但把幾者相比較,DELPHI是唯一一套能夠同時(shí)適用于開(kāi)發(fā)數據庫應用、網(wǎng)絡(luò )及WEB 應用等所有軟件的高效率開(kāi)發(fā)環(huán)境,且第三方控件多,開(kāi)發(fā)比較快,且設計界面比VB,VC,PB 靈活?;谝陨弦蛩?,考慮到所要監聽(tīng)CANBUS線(xiàn)路的傳輸數據信息量大、種類(lèi)多,以及信息之間相對獨立,又有關(guān)系且必須備有優(yōu)良的圖形顯示等特點(diǎn),我們選擇DELPHI作為軟件開(kāi)發(fā)平臺。
  
〈2〉對硬件接口PCI-9810的操作的實(shí)現
  
在DELPHI程序中,我們是通過(guò)調用周立功提供的通用VCI動(dòng)態(tài)鏈接庫來(lái)實(shí)現對硬件接口PCI-9810的操作的,該動(dòng)態(tài)鏈接庫提供了界面軟件能在windows下運行必需的代碼和其他資源,其中主要包括十個(gè)接口函數如設備相關(guān)函數和CAN通訊相關(guān)函數以及相關(guān)的數據結構的定義。把動(dòng)態(tài)鏈接庫文件夾添加到項目文件夾,然后把庫源文件添加到程序代碼的應用文件單元即可實(shí)現對動(dòng)態(tài)鏈接庫的調用,也就實(shí)現了對PCI-9810卡的打開(kāi),關(guān)閉,啟動(dòng),復位,收發(fā)數據等操作。
  
〈3〉CANBUS線(xiàn)路上數據的實(shí)時(shí)接收
  
CANBUS線(xiàn)路上的數據對CAN卡來(lái)說(shuō)有著(zhù)不期性,所以要能對數據實(shí)時(shí),準確的接收,必須要通過(guò)程序實(shí)現一種功能即線(xiàn)路上一旦有數據,就能捕獲。對于此,我們采用的方式是利用多線(xiàn)程。即在程序中專(zhuān)門(mén)開(kāi)辟一個(gè)線(xiàn)程用于對線(xiàn)路的監聽(tīng),接收。
  
關(guān)于多線(xiàn)程
  
在32位的windows系統中,系統可以同時(shí)運行多個(gè)進(jìn)程,一個(gè)調入內存并準備執行的應用程序稱(chēng)為一個(gè)進(jìn)程,它由裝入內存的程序代碼和操作系統及由此創(chuàng )建的應用程序執行環(huán)境組成,進(jìn)程就是應用程序的運行實(shí)例。每個(gè)進(jìn)程都有自己私有的虛擬地址空間和動(dòng)態(tài)分配的內存,以及文件,線(xiàn)程和其它模塊。每個(gè)進(jìn)程都有一個(gè)主線(xiàn)程,但可以建立另外的線(xiàn)程。進(jìn)程中的線(xiàn)程是并行執行的,每個(gè)線(xiàn)程占用CPU的時(shí)間由系統來(lái)劃分,可以把線(xiàn)程看成是操作系統分配CPU時(shí)間的基本實(shí)體。每個(gè)進(jìn)程也可以同時(shí)執行多個(gè)線(xiàn)程并由系統不停地在各個(gè)線(xiàn)程之間切換。
  
多線(xiàn)程的DELPHI實(shí)現
  
雖然Windows 提供了比較多的多線(xiàn)程設計的API 函數,但是直接使用API 函數一方面極其不方便,而且使用不當還容易出錯。為避免這個(gè)問(wèn)題,我們采用了DEPHI所提供的方法即繼承TThread類(lèi)產(chǎn)生線(xiàn)程對象。TThread由DELPHI的VCL類(lèi)庫提供用于線(xiàn)程編程。在Tthread類(lèi)中封裝了windows中關(guān)于線(xiàn)程機制的API函數,繼承TThread類(lèi)產(chǎn)生的線(xiàn)程對象就代表了實(shí)際程序中的一個(gè)線(xiàn)程。線(xiàn)程對象通過(guò)封裝使用線(xiàn)程所需的內容大大簡(jiǎn)化了多線(xiàn)程問(wèn)題的處理。另外,在DELPHI中,Tthread在Classes單元中聲明,直接從Tobject繼承下來(lái)的,因此,它不是組件。Tthread是個(gè)抽象類(lèi),所以不能創(chuàng )建Tthread的實(shí)例,而只能創(chuàng )建其派生類(lèi)的實(shí)例。在本程序中利用Ttread類(lèi)來(lái)編寫(xiě)多線(xiàn)程的步驟如下
  
(1)從Tthread類(lèi)派生出一個(gè)新的線(xiàn)程類(lèi)。即建立的TreceiveThread。
  
(2)創(chuàng )建線(xiàn)程對象。即在Types里面定義thread1:TreceiveThread。
  
(3)在DELPHI自動(dòng)生成的用于保存派生類(lèi)代碼的新的單獨的文件中重載Execute過(guò)程,在該過(guò)程中將對CAN線(xiàn)路上的數據實(shí)時(shí)接收并調用對接收到的數據進(jìn)行處理的基本顯示和分類(lèi)顯示函數。在Execute過(guò)程中使用了repeat…..until語(yǔ)句來(lái)判斷過(guò)程是否結束。
  
(4)如果Execute過(guò)程執行完畢,則該線(xiàn)程就結束了,并釋放線(xiàn)程占用的??臻g。
  
〈4〉對所接收的數據進(jìn)行處理
  
對數據的實(shí)時(shí)處理包括兩方面:1)將接收到的數據楨按照接收數據的數據結構完全顯示,這包括楨類(lèi)型,楨格式,楨ID,楨數據等等。2)將數據進(jìn)行更深一層的分析判斷出數據的真實(shí)含義,并將其填入對應的文本框或者畫(huà)出對應的狀態(tài)圖等等。
  
(1)對于第一種基本顯示,我們采用的是用DELPHI提供的listbox控件進(jìn)行
  
滾動(dòng)顯示,listbox的容量足夠本顯示的需要,另外,我們還添加了一個(gè)按鈕控件用于按照操作人員的需要隨時(shí)清除listbox里面的內容。
  
(2)對于第二種分類(lèi)顯示。對于不同的數據,我們將用不同的分析處理方法進(jìn)行顯示。根據數據的現實(shí)含義,主要分為1)上,下傳參數。2)域請求和域數據,3)下傳指令和上傳消息。下面將分別介紹處理方法:

1 利用數據庫系統進(jìn)行上,下傳參數的顯示
  
在CAN線(xiàn)路上傳輸的參數不僅多達近200種,而且有上傳和下傳之分,可見(jiàn)所要顯示的量之大,加上上下傳的參數有著(zhù)相同的數據結構,所以我們采用查詢(xún)預先建立好的數據庫的方法來(lái)進(jìn)行顯示。
  
關(guān)于數據庫系統數據庫系統為我們提供了一種把與我們的工作和生活緊密相關(guān)的信息集合在一起的方法。它還提供了在某個(gè)集中的地方存儲和維護這些信息的方法。數據庫系統主要由三大部分組成:數據庫管理系統,數據庫應用程序,數據庫。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>