久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20923|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計開發(fā)教程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:382152 發(fā)表于 2018-8-2 14:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用VS2010開發(fā)CAN總線上位機的教程
目   次
1              緒論
1.1              研究背景
1.2              研究目的和意義
1.3              國內(nèi)外發(fā)展現(xiàn)狀
1.4              論文結(jié)構(gòu)安排
2              CAN總線協(xié)議分析
2.1              CAN-bus 規(guī)范V2.0 版本
2.2              CAN控制器SJA1000
2.3              本章小結(jié)
3              開發(fā)環(huán)境介紹
3.1              開發(fā)環(huán)境
3.2              CANUSB—Ⅰ/Ⅱ智能CAN接口卡
3.3              本章小結(jié)
4              CAN通信軟件設(shè)計
4.1              驅(qū)動程序安裝
4.2              CAN接口卡函數(shù)庫說明
4.3              界面設(shè)計
4.4              軟件功能實現(xiàn)
4.5              本章小結(jié)
5              測試及發(fā)布
5.1              軟件功能測試
5.2              程序發(fā)布
5.3              本章小結(jié)
結(jié)論
致謝
參考文獻(xiàn)

           
1          緒論
現(xiàn)場總線,就是應(yīng)用于工業(yè)現(xiàn)場,采用總線方式連接多個設(shè)備,用于傳輸工業(yè)現(xiàn)場各種數(shù)據(jù)的一類通信系統(tǒng)[1]。CAN(Controller Area Network)總線是現(xiàn)場總線的一個分支,因其具有很高的可靠性和性能價格比,已經(jīng)成為國際標(biāo)準(zhǔn),在工業(yè)過程監(jiān)控設(shè)備的互連方面得到廣泛應(yīng)用,受到工業(yè)界的廣泛重視,并已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一。
1.1      研究背景
隨著計算機硬件、軟件技術(shù)及集成電路技術(shù)的迅速發(fā)展,工業(yè)控制系統(tǒng)已成為計算機技術(shù)應(yīng)用領(lǐng)域中最具活力的一個分支,并取得了巨大進步。由于對系統(tǒng)可靠性和靈活性的高要求,工業(yè)控制系統(tǒng)的發(fā)展主要表現(xiàn)為:控制多元化,系統(tǒng)面向分散化,即負(fù)載分散、功能分散、危險分散和地域分散。分散式工業(yè)控制系統(tǒng)就是為適應(yīng)這種需要而發(fā)展起來的。這類系統(tǒng)是以微型機為核心,將5C技術(shù)——Computer(計算機技術(shù))、Control(自動控制技術(shù))、Communication(通信技術(shù))、CRT(顯示技術(shù))和Change(轉(zhuǎn)換技術(shù))緊密結(jié)合的產(chǎn)物。它在適應(yīng)范圍、可擴展性、可維護性以及抗故障能力等方面,較之分散型儀表控制系統(tǒng)和集中型計算機控制系統(tǒng)都具有明顯的優(yōu)越性。典型的分散式控制系統(tǒng)有現(xiàn)場設(shè)備、接口與計算設(shè)備以及通信設(shè)備組成,現(xiàn)場總線(Field bus)就是在這種背景下產(chǎn)生的[2]。
1.2      研究目的和意義
從19世紀(jì)發(fā)明汽車以來,人們就一直在乘坐的舒適性、安全性和操控性方面不停地對其進行改革和創(chuàng)新,車上的電子設(shè)備也越來越多。這些電子設(shè)備大多是需要協(xié)同工作的,這就要求各部件之間能互相通信[1]。
為了解決汽車通信問題,CAN—bus應(yīng)運而生,憑借可靠、實時、經(jīng)濟和靈活的特點,CAN總線很快在其他行業(yè)得到廣泛應(yīng)用,特別是在工業(yè)控制領(lǐng)域更是如魚得水。現(xiàn)在CAN—bus總線已經(jīng)成為全球范圍內(nèi)最重要的現(xiàn)場總線之一,甚至引領(lǐng)著現(xiàn)場總線的發(fā)展。
工業(yè)控制系統(tǒng)涉及眾多軟、硬件模塊,給程序的設(shè)計和調(diào)試帶來一定難度。尤其作為上、下位機間聯(lián)系紐帶的CAN總線通信部分,一旦在整個系統(tǒng)運行期間發(fā)生問題,若沒有良好的人機界面和測試手段,將很難及時準(zhǔn)確地找到并排除故障。同樣,在控制系統(tǒng)的研制過程中,為了盡可能地減少故障和縮小故障范圍,也應(yīng)設(shè)計相應(yīng)的測試軟件來具體負(fù)責(zé)CAN總線通信及接口部分的調(diào)試、運行任務(wù)。故此,本課題就如何利用VC設(shè)計CAN總線測試軟件進行介紹。
1.3      國內(nèi)外發(fā)展現(xiàn)狀
自從Bosch與Intel公司于1986年正式發(fā)布CAN—bus通信方式,寶馬(BMW)公司很快于1989年推出第一款使用CAN—bus通信的汽車,從此  CAN—bus開始了其輝煌的歷程:(1)1990年,奔馳公司發(fā)布了第一輛使用CAN—bus的轎車,現(xiàn)在幾乎每一輛新生產(chǎn)的汽車均裝配有CAN—bus網(wǎng)絡(luò);(2)1993年,CAN—bus總線被制定成為國際標(biāo)準(zhǔn)ISO11898(高速應(yīng)用)和ISO11519(低速應(yīng)用);(3)1994年,歐洲成立了CiA廠商協(xié)會,美洲成立了ODVA廠商協(xié)會,專門支持CAN—bus總線的兩大應(yīng)用層協(xié)議——CANopen協(xié)議與DeviceNet協(xié)議[3]。
在CiA的努力推廣下,CAN技術(shù)在汽車電子控制系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)控系統(tǒng)、醫(yī)療儀器、紡織機械、船舶運輸?shù)确矫婢玫搅藦V泛的應(yīng)用。現(xiàn)已有400多家公司加入了CiA,CiA已成為全球應(yīng)用CAN技術(shù)的權(quán)威。
國內(nèi)在CAN總線方面的研究和應(yīng)用于國外相比還存在明顯的差距,體現(xiàn)在兩個方面:(1)國內(nèi)在自主研究和開發(fā)汽車電子CAN網(wǎng)絡(luò)方面尚處于試驗和起步階段,國內(nèi)絕大部分的汽車還沒有采用汽車總線設(shè)計;(2)國內(nèi)汽車合資企業(yè)不少已采用CAN總線技術(shù),但核心技術(shù)掌握在外商手中。為順應(yīng)世界汽車工業(yè)發(fā)展的趨勢,我國也相應(yīng)加強了對CAN總線的研究,并開發(fā)具有自主知識產(chǎn)權(quán)的CAN總線產(chǎn)品。
CAN技術(shù)已應(yīng)用于家用電器和智能樓宇以及小區(qū)建設(shè)中。隨著無線技術(shù)的完善和將無線技術(shù)應(yīng)用到CAN總線系統(tǒng)中研究的不斷深入,可以樂觀地預(yù)計,未來CAN總線技術(shù)的應(yīng)用將無處不在,虛擬的CAN總線即將誕生[5]。
1.4      論文結(jié)構(gòu)安排
本文第一章介紹了CAN總線的研究背景和國內(nèi)外發(fā)展現(xiàn)狀,并介紹本課題研究的目的和意義。第二章簡單介紹了CAN總線通信規(guī)范和SJA1000控制器。第三章簡單介紹了開發(fā)環(huán)境和CAN接口卡。第四章詳細(xì)介紹了軟件的設(shè)計過程,包括驅(qū)動安裝、接口卡函數(shù)庫說明、界面設(shè)計、功能分析與設(shè)計。第五章介紹了軟件的測試及程序的發(fā)布。
2          CAN總線協(xié)議分析2.1      CAN-bus 規(guī)范V2.0 版本
CAN 規(guī)范技術(shù)規(guī)范由兩部分組成:
• A 部分:CAN 的報文格式說明(按CAN1.2 規(guī)范定義)。
• B 部分:標(biāo)準(zhǔn)格式和擴展格式的說明。
2.1.1      CAN的分層結(jié)構(gòu)
在CAN V2.0A里,CAN被細(xì)分為三個層次:對象層、傳輸層、物理層。
而在PartB中,CAN被細(xì)分為兩個層次:數(shù)據(jù)鏈路層(邏輯鏈路控制子層LLC、媒體訪問控制子層MAC)、物理層。
2.1.2      報文傳輸
(1)幀類型
報文傳輸由5種類型的幀所表示和控制,它們分別是數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀和幀間隔,其用途如表2.1所列。

表2.1 幀的類型及用途

幀類型

幀用途

數(shù)據(jù)幀

用于發(fā)送節(jié)點向接受節(jié)點傳送數(shù)據(jù),是使用最多的幀類型

遠(yuǎn)程幀

用于接受節(jié)點向某個發(fā)送節(jié)點請求數(shù)據(jù)

錯誤幀

用于檢測出通信錯誤(如校驗錯誤)時向其他節(jié)點發(fā)送通知

過載幀

用以在先行的和后續(xù)的數(shù)據(jù)幀(或遠(yuǎn)程幀)之間提供一附加的延時

幀間隔

用于將數(shù)據(jù)幀和遠(yuǎn)程幀與前面的幀分離開來

1) 數(shù)據(jù)幀
數(shù)據(jù)幀由7 個不同的位場組成:幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC 場、應(yīng)答場、幀結(jié)尾。數(shù)據(jù)幀各段的功能如表2.2所列。

表2.2 數(shù)據(jù)幀各段的功能

段名

段長度/位

說明

幀起始

1

表示數(shù)據(jù)幀開始,由單個顯性位構(gòu)成,在總線空閑時才允許發(fā)送

仲裁場

標(biāo)準(zhǔn)幀

12

表示該幀的優(yōu)先級,由11位ID碼和1位遠(yuǎn)程幀標(biāo)志位(RTR)組成

擴展幀

32

表示該幀的優(yōu)先級,由29位ID碼、1位替代遠(yuǎn)程幀請求位(SRR)、1位標(biāo)志位擴展位(IDE)和1位遠(yuǎn)程幀標(biāo)志位(RTR)組成

控制場

6

表示數(shù)據(jù)段數(shù)據(jù)長度的編碼和保留位

數(shù)據(jù)場

0—8

數(shù)據(jù)內(nèi)容,每字節(jié)為8位,具體字節(jié)數(shù)在控制段中體現(xiàn)

CRC場

16

檢查幀的傳輸錯誤,范圍包括從幀起始到數(shù)據(jù)段的所有內(nèi)容(不包括填充位)

ACK場

2

其他接受節(jié)點確認(rèn)該幀被正常接收

幀結(jié)束

7

表示數(shù)據(jù)幀結(jié)束

2) 遠(yuǎn)程幀
遠(yuǎn)程幀由6 個不同的位場組成:幀起始、仲裁場、控制場、CRC 場、應(yīng)答場、幀結(jié)尾。
3) 錯誤幀
錯誤幀由兩個不同的場組成。第一個場用作為不同站提供的錯誤標(biāo)志的疊加。第二個場是錯誤界定符。錯誤標(biāo)志有兩種形式,主動錯誤標(biāo)志和被動錯誤標(biāo)志。錯誤界定符包括8 個“隱性”的位。
4) 過載幀
過載幀包括兩個位場:過載標(biāo)志和過載界定符。
5) 幀間空間
數(shù)據(jù)幀(或遠(yuǎn)程幀)與其前面幀的隔離是通過幀間空間實現(xiàn)的,無論其前面的幀為何類型(數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀)。所不同的是,過載幀與錯誤幀之前沒有幀間空間,多個過載幀之間也不是由幀間空間隔離的。
(2)發(fā)送器/接收器的定義
發(fā)送器:產(chǎn)生報文的單元被稱之為報文的“發(fā)送器”。此單元保持作為報文發(fā)送器直到總線出現(xiàn)空閑或此單元失去仲裁為止。
接收器:如果有一單元不作為報文的發(fā)送器并且總線也不空閑,則這一單元就被稱之為報文的“接收器”。
2.1.3      報文檢驗
校驗報文是否有效的時間點,對于發(fā)送器與接收器是各不相同的。
對于發(fā)送器:如果直到幀的末尾位均沒有錯誤,則此報文對于發(fā)送器有效。如果報文破損,則報文會根據(jù)優(yōu)先權(quán)自動重發(fā)。為了能夠和其他信息競爭總線,重新傳輸必須在總線空閑時啟動。
對于接收器:如果直到一最后的位(除了幀末尾位)均沒有錯誤,則報文對于接收器有效。
2.1.4      編碼
位流編碼:幀的部分,諸如幀起始、仲裁場、控制場、數(shù)據(jù)場以及CRC序列,均通過位填充的方法編碼。
數(shù)據(jù)幀或遠(yuǎn)程幀(CRC界定符、應(yīng)答場和幀末尾)的剩余位場形式相同,不填充。錯誤幀和過載幀的形式也相同,但并不通過位填充的方法進行編碼。
報文里的位流采用不歸零編碼(NRZ),這就是說,在整個位時間里,位電平要么為“顯性”,要么為“隱性”。
2.1.5      錯誤處理
錯誤檢測:有5種不同的錯誤類型(這5種錯誤不會相互排斥):位錯誤、填充錯誤、CRC錯誤、形式錯誤、應(yīng)答錯誤
錯誤標(biāo)志:檢測到錯誤條件的站通過發(fā)送錯誤標(biāo)志指示錯誤。
2.1.6      故障界定
至于故障界定,單元的狀態(tài)可能為以下三種之一:
錯誤主動:可以正常地參與總線通訊并在錯誤被檢測到時發(fā)出主動錯誤標(biāo)志。
錯誤被動:不允許發(fā)送主動錯誤標(biāo)志。
總線關(guān)閉:不允許在總線上有任何的影響(比如,關(guān)閉輸出驅(qū)動器)。
2.1.7      位定時要求
標(biāo)稱位速率:標(biāo)稱位速率為一理想的發(fā)送器在沒有重新同步的情況下每秒發(fā)送的位數(shù)量。
標(biāo)稱位時間:標(biāo)稱位時間=1/標(biāo)稱位速率
可以把標(biāo)稱位時間劃分成幾個不重疊的時間片段,它們是:同步段、傳播時間段、相位緩沖段1、相位緩沖段2。
2.1.8      報文濾波
在CAN2.0B中,還增加了有關(guān)報文濾波的定義。
報文濾波取決于整個識別符。允許在報文濾波中將任何的識別符位設(shè)置為“不考慮”的可選屏蔽寄存器,可以選擇多組的識別符,使之被映射到隸屬的接收緩沖器里。
如果使用屏蔽寄存器,它的每一個位必須是可編程的,即,他們能夠被允許或禁止報文濾波。屏蔽寄存器的長度可以包含整個識別符,也可以包含部分的識別符。
2.1.9      振蕩器容差
由于給定的最大的振蕩器,其容差為1.58%,因此憑經(jīng)驗可將陶瓷諧振器使用在傳輸率高達(dá)125kbit/s的應(yīng)用罩。
為了滿足CAN協(xié)議的整個總線速度范圍,需要使用晶振。具有最高振蕩準(zhǔn)確度要求的芯片,決定了其他節(jié)點的振蕩準(zhǔn)確度。
2.2      CAN控制器SJA1000
下位機的CAN總線網(wǎng)絡(luò)接口使用Philips公司的SJA1000芯片,SJA1000是一個獨立的CAN控制器,具有一系列先進的功能,適合于多種應(yīng)用,特別在系統(tǒng)優(yōu)化、診斷和維護方面非常重要。
SJA1000具有完成CAN總線通信協(xié)議所要求的全部特性,它與獨立CAN總線控制的PCA82C200完全兼容,并有支持CAN2.0B協(xié)議、擴展接收緩沖器、增強錯誤處理能力和增強驗收濾波功能等新增功能。
SJA1000可以直接進行CAN總線互聯(lián),而PC機作為上位機,是通過USB電纜連接到CAN接口卡上的,這里我們使用的是普創(chuàng)電子的CANUSB—Ⅱ工業(yè)級雙路智能接口卡。該接口卡中的CAN總線數(shù)據(jù)收發(fā)也是由SJA1000CAN控制器和82C250CAN收發(fā)器完成的,主機通過USB電纜來訪問CAN控制器,從而實現(xiàn)數(shù)據(jù)通信。
2.3      本章小結(jié)
本章主要介紹了CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計所涉及的基本知識,包括CAN—bus規(guī)范和CAN控制器SJA1000,有了這些知識,才能保證軟件設(shè)計得以順利開展。
3          開發(fā)環(huán)境介紹3.1      開發(fā)環(huán)境
CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計應(yīng)具有直觀的窗口外觀,豐富、人性化的友好界面,便于操作和維護。而Visual C++6.0編譯器提供了強大的輔助工具集,利用這些工具可以很方便的設(shè)計出本課題所要求的應(yīng)用程序。
利用Visual C++6.0開發(fā)應(yīng)用程序時,主要有兩種方法,一種是利用Windows本身提供的API函數(shù)編程,另一種是直接使用Miscrosoft提供的MFC類庫編程。本課題使用的是MFC類庫編程。
MFC類庫是由Microsoft公司提供的用來編寫Windows應(yīng)用程序的C++類集合,在該類集合封裝了Windows大部分編程對象和與它們相關(guān)的操作。MFC為用戶提供了一個Windows環(huán)境下的應(yīng)用程序框架和創(chuàng)建應(yīng)用程序的組件,使用這個應(yīng)用程序框架和組件,可以輕松地編寫出各種不同的應(yīng)用程序。
在Visual C++6.0中,可以利用MFC AppWizard應(yīng)用程序向?qū)Э焖俚貏?chuàng)建一個標(biāo)準(zhǔn)的Windows應(yīng)用程序框架,只需在此基礎(chǔ)上添加實現(xiàn)特定功能的程序代碼就能編寫出相應(yīng)的Windows應(yīng)用程序。該應(yīng)用程序框架類型中包含了三種最基本、最常用的應(yīng)用程序類型:單文檔、多文檔和基于對話框的應(yīng)用程序。基于對話框應(yīng)用程序功能簡單、結(jié)構(gòu)緊湊,執(zhí)行速度快,程序源代碼少,開發(fā)調(diào)試容易,符合本課題需求,故本課題采用基于對話框應(yīng)用程序。
3.2      CANUSB—Ⅰ/Ⅱ智能CAN接口卡3.2.1      產(chǎn)品概述
CANUSB—Ⅰ/Ⅱ智能CAN接口卡兼容USB1.1和USB2.0總線,帶有1路/2路CAN接口的工業(yè)級智能型CAN數(shù)據(jù)接口卡。采用CANUSB—Ⅰ/Ⅱ智能CAN接口卡,PC可以通過USB總線連接至CAN網(wǎng)絡(luò),構(gòu)成實驗室、工業(yè)控制、智能小區(qū)等CAN網(wǎng)絡(luò)領(lǐng)域中數(shù)據(jù)處理、數(shù)據(jù)采集。
CANUSB—Ⅰ/Ⅱ智能CAN接口卡是CAN產(chǎn)品開發(fā)、CAN數(shù)據(jù)分析的強大工具;同時,具有體積小、即插即用等特點,也是便攜式系統(tǒng)用戶的最佳選擇。
3.2.2      智能CAN接口卡硬件接口描述
CANUSB—Ⅰ/Ⅱ智能CAN接口卡集成2路CAN通道,每一路通道都是獨立的,可以用于連接一個CAN—bus網(wǎng)絡(luò)或者CAN—bus接口的設(shè)備。CANUSB—Ⅰ/Ⅱ智能CAN接口卡布局如下:

圖3.1 CANUSB—Ⅰ/Ⅱ智能CAN接口卡外圍端子

2路CAN—bus通道由1個10Pin接線端子引出,接線端子的引腳詳細(xì)定義如下表所示:

表3.1 CANUSB—Ⅰ/Ⅱ接口卡的CAN—bus信號分配

引腳

端口

名稱

功能

1

CAN1

CANL1

CANL1信號線

2

R1-

終端電阻(內(nèi)部連接到CANL1)

3

PG

屏蔽線

4

R1+

終端電阻(內(nèi)部連接到CANH1)

5

CANH1

CANH1信號線

6

CAN0

CANL0

CANL0信號線

7

R0-

終端電阻(內(nèi)部連接到CANL0)

8

PG

屏蔽線

9

R0+

終端電阻(內(nèi)部連接到CANH0)

10

CANH0

CANH0信號線

3.3      本章小結(jié)
本章介紹了CAN總線通信系統(tǒng)上位機通信軟件的開發(fā)環(huán)境和CANUSB—Ⅰ/Ⅱ智能CAN接口卡。為了獲得直觀的窗口外觀,豐富、人性化的友好界面,本課題利用Visual C++6.0下的MFC類庫開發(fā)程序。
4          CAN通信軟件設(shè)計4.1      驅(qū)動程序安裝
CANUSB—Ⅰ/Ⅱ智能CAN接口卡使用USB直接供電并提供智能驅(qū)動安裝包,安裝步驟如下:
點擊產(chǎn)品光盤的“\CANUSB\Drivers”目錄下的安裝包安裝驅(qū)動;
將CANUSB—Ⅰ/Ⅱ智能CAN接口卡通過USB電纜連接到計算機,提示發(fā)現(xiàn)新硬件,選擇自動安裝軟件即可。
4.2      CAN接口卡函數(shù)庫說明4.2.1      函數(shù)庫數(shù)據(jù)結(jié)構(gòu)定義
(1)初始化CAN數(shù)據(jù)類型
typedef struct _INIT_CONFIG
{   DWORD  AccCode;//驗收碼
DWORD  AccMask;//屏蔽碼
DWORD  Reserved;//保留
UCHAR  Filter;//濾波方式
UCHAR  Baudrate;//波特率
UCHAR  Mode;//模式

} VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;

(2)CAN信息幀的數(shù)據(jù)類型
typedef struct _VCI_CAN_OBJ

{  BYTE CANIndex;//接受的數(shù)據(jù)幀來自哪個通道 =0時CAN0通道 =1時CAN1通道

DWORD ID;//報文ID

BYTE SendType;//發(fā)送幀類型,=0時為正常發(fā)送,=1時為自發(fā)自收,只有在此幀為發(fā)送幀時有意義。

BYTE ExternFlag;//是否是擴展幀

BYTE RemoteFlag;//是否是遠(yuǎn)程幀

BYTE DataLen; //數(shù)據(jù)長度(<=8,即Data的長度

BYTE Data[8]; //報文的數(shù)據(jù)

}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
4.2.2      接口函數(shù)說明
①BOOL __stdcall VCI_OpenDevice(DWORD DevIndex);//打開設(shè)備
②BOOL __stdcall VCI_CloseDevice(DWORD DevIndex);//關(guān)閉設(shè)備
③BOOL __stdcall VCI_InitCAN(DWORD DevIndex,DWORD CANIndex,PVCI_INIT_CONFIG InitConfig);//初始化CAN
④BOOL __stdcall VCI_StartCAN(DWORD DevIndex ,DWORD CANIndex);//啟動CAN設(shè)備
⑤BOOL __stdcall VCI_ResetCAN(DWORD DevIndex ,DWORD CANIndex);//復(fù)位CAN設(shè)備
⑥BOOL __stdcall VCI_Transmit(DWORD DevIndex ,DWORD CANIndex, VCI_CAN_OBJ *SendData );//發(fā)送一幀數(shù)據(jù)
⑦DWORD __stdcall VCI_Receive(DWORD DevIndex ,PVCI_CAN_OBJ pReceive , DWORD Len , DWORD WaitTime);//接收數(shù)據(jù)
⑧BOOL __stdcall VCI_ReadDevSn(DWORD DevIndex, PCHAR DevSn);//讀取序列號
其中:
DevIndex  設(shè)備索引號,有一個設(shè)備時索引號為0,有兩個可以為0或1;

     CANIndex  第幾路CAN;

      InitConfig  初始化參數(shù)結(jié)構(gòu);
      SendData指向信息幀結(jié)構(gòu)體;
      pReceive用來接收的數(shù)據(jù)幀結(jié)構(gòu)體數(shù)組的首指針;
      Len       讀取多少幀的數(shù)據(jù);
      WaitTime  =0時為無限等待;>0時等待超時時間,以毫秒為單位;
      DevSn  序列號;
      返回值  為1表示操作成功,0表示操作失敗;
4.2.3      接口函數(shù)庫使用方法
首先,把庫函數(shù)文件都放在工作目錄下。總共有四個文件CAN_TO_USB.h,CAN_TO_USB.lib,SiUSBXp.dll,CAN_TO_USB.dll。
VC調(diào)用動態(tài)庫的方法:
(1)在.cpp中包含CAN_TO_USB.h頭文件;
(2)在工程文件中加入CAN_TO_USB.lib文件。
4.2.4      接口函數(shù)庫使用流程

圖4.1  接口函數(shù)庫使用流程

4.3      界面設(shè)計
CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計目標(biāo)是對CAN總線的運行狀態(tài)和通信能力進行有效的測試,要求能正確識別CAN設(shè)備并打開CAN通道,可封裝CAN報文進行發(fā)送,可接收CAN數(shù)據(jù)幀,并能對數(shù)據(jù)幀進行解析,在數(shù)據(jù)列表中顯示報文的相關(guān)參數(shù)信息(如:幀ID、幀格式、幀類型、DLC值以及幀數(shù)據(jù)等參數(shù)),并具有過濾功能。具體有以下幾個功能模塊:設(shè)備連接、設(shè)備啟動、設(shè)備復(fù)位、幀封裝與發(fā)送、幀接收與解析以及清除顯示。
4.3.1      界面布局設(shè)計
打開MFC App Wizard(exe)創(chuàng)建一個基于對話框的應(yīng)用程序,項目名為Test。打開對話框,按照軟件功能要求用控件編輯器添加相應(yīng)控件,設(shè)置控件屬性,打開類向?qū)В瑸榻缑嫔细骺丶砑訉?yīng)的成員變量。設(shè)計完成后的界面如圖3所示。表4.1列出了CAN0通道各個控件屬性及成員變量的設(shè)置。

圖4.2  CAN總線通信系統(tǒng)上位機通信軟件界面設(shè)計

表4.1  CAN0通道控件屬性及成員變量的設(shè)置

控件名

控件ID

標(biāo)題

變量類型

變量名

靜態(tài)文本

IDC_STATIC

設(shè)備序號

組合框

IDC_COMBO_DEVINDEX

CComboBox

m_ComboDevindex

按鈕

IDC_BUTTON_CONNECT0

連接

按鈕

IDC_BUTTON_CONNECT1

啟動通道

按鈕

IDC_BUTTON_RESETCAN0

復(fù)位CAN

按鈕

IDC_BUTTON_SEND0

發(fā)送

按鈕

IDC_BUTTON_CLEAR0

清除顯示

組框

IDC_STATIC

初始化CAN0參數(shù)

靜態(tài)文本

IDC_STATIC

濾波方式:

組合框

IDC_COMBO_FILTERTYPE0

CComboBox

m_ComboFilterType0

靜態(tài)文本

IDC_STATIC

波特率:

組合框

IDC_COMBO_BAUDRATE0

CComboBox

m_ComboBaudrate

靜態(tài)文本

IDC_STATIC

模式:

組合框

IDC_COMBO_MODE0

CComboBox

m_ComboMode0

靜態(tài)文本

IDC_STATIC

屏蔽碼:源節(jié)點:0x

編輯框

IDC_EDIT_MASK0

CString

m_EditMask0

靜態(tài)文本

IDC_STATIC

目的節(jié)點:0x

編輯框

IDC_EDIT_MASKM0

CString

m_EditMaskM0

靜態(tài)文本

IDC_STATIC

響應(yīng)標(biāo)示符:

組合框

IDC_COMBO_MASKX0

CComboBox

m_ComboMaskX0

靜態(tài)文本

IDC_STATIC

功能碼:0x

編輯框

IDC_EDIT_MASKG0

CString

m_EditMaskG0

靜態(tài)文本

IDC_STATIC

資源節(jié)點編號:0x

編輯框

IDC_EDIT_MASKZ0

CString

m_EditMaskZ0

靜態(tài)文本

IDC_STATIC

驗收碼:源節(jié)點:0x

編輯框

IDC_EDIT_CODE0

CString

m_EditCode0

靜態(tài)文本

IDC_STATIC

目的節(jié)點:0x

編輯框

IDC_EDIT_CODEM0

CString

m_EditCodeM0

靜態(tài)文本

IDC_STATIC

響應(yīng)標(biāo)示符:

組合框

IDC_COMBO_CODEX0

CComboBox

m_ComboCodeX0

靜態(tài)文本

IDC_STATIC

功能碼:0x

編輯框

IDC_EDIT_CODEG0

CString

m_EditCodeG0

靜態(tài)文本

IDC_STATIC

資源節(jié)點編號:0x

編輯框

IDC_EDIT_CODEZ0

CString

m_EditCodeZ0

靜態(tài)文本

IDC_STATIC

發(fā)送數(shù)據(jù)幀

靜態(tài)文本

IDC_STATIC

發(fā)送格式:

組合框

IDC_COMBO_SENDTYPE0

CComboBox

m_ComboSendType0

靜態(tài)文本

IDC_STATIC

幀類型:

組合框

IDC_COMBO_SENDFRAMETYPE0

CComboBox

m_ComboSendFrmType0

靜態(tài)文本

IDC_STATIC

幀格式:

組合框

IDC_COMBO_SENDFRAMEFORMAT0

CComboBox

m_ComboSendFrmFmt0

靜態(tài)文本

IDC_STATIC

數(shù)據(jù)

編輯框

IDC_EDIT_SENDDATA0

CString

m_EditSendData0

靜態(tài)文本

IDC_STATIC

幀ID:源節(jié)點:0x

編輯框

IDC_EDIT_SENDFRAMEID0

CString

m_EditSendFrmID0

靜態(tài)文本

IDC_STATIC

目的節(jié)點:0x

編輯框

IDC_EDIT_SENDFRAMEIDM0

CString

m_EditSendFrmIDM0

靜態(tài)文本

IDC_STATIC

響應(yīng)標(biāo)示符:

組合框

IDC_COMBO_SENDFRAMEIDX0

CComboBox

m_ComboSendFrmIDX0

靜態(tài)文本

IDC_STATIC

功能碼:0x

編輯框

IDC_EDIT_SENDFRAMEIDG0

CString

m_EditSendFrmIDG0

靜態(tài)文本

IDC_STATIC

資源節(jié)點編號:0x

編輯框

IDC_EDIT_SENDFRAMEIDZ0

CString

m_EditSendFrmIDZ0

組框

IDC_STATIC

信息

列表框

IDC_LIST_INFO0

CListBox

m_ListInfo0

CAN1通道各個控件屬性及成員變量設(shè)置同CAN0通道,就不再贅述。
4.3.2      對話框初始化
在CTestDlg類的OnInitDialog()函數(shù)中添加代碼, 在對話框初始化的時候被調(diào)用,響應(yīng)WM_INITDIALOG消息,用于完成除基本的創(chuàng)建之外的額外的初始化工作。將額外的初始化代碼在這個函數(shù)中實現(xiàn)。
(1)組合框初始化
組合框的設(shè)置以控件IDC_COMBO_FILTERTYPE0為例。要求控件IDC_COMBO_FILTERTYPE0能下拉顯示兩種濾波方式:單濾波和雙濾波,默認(rèn)顯示單濾波。故在OnInitDialog()函數(shù)中添加以下代碼:
//濾波方式的添加
m_ComboFilterType0.AddString("單濾波");
m_ComboFilterType0.AddString("雙濾波");
//設(shè)置第0行內(nèi)容為顯示的內(nèi)容,即濾波方式默認(rèn)為單濾波
m_ComboFilterType0.SetCurSel(0);
其他組合框以相同方式按要求設(shè)置。
(2)編輯框初始化
編輯框的設(shè)置以控件IDC_EDIT_MASK0為例。控件IDC_EDIT_MASK0顯示的是屏蔽碼的源節(jié)點,默認(rèn)顯示“ff”。故在OnInitDialog()函數(shù)中添加以下代碼:
m_EditMask0="ff";
其他編輯框以相同方式按要求設(shè)置。
(3)要求啟動時CAN默認(rèn)未連接,未啟動,故在OnInitDialog()函數(shù)中添加以下代碼:
bConnectCAN=FALSE; //啟動時CAN默認(rèn)未連接
bStartCAN=FALSE; //啟動時CAN默認(rèn)關(guān)閉
(4)要求設(shè)備未連接時不能啟動設(shè)備,默認(rèn)禁用啟動通道按鈕,故在OnInitDialog()函數(shù)中添加以下代碼:
GetDlgItem(IDC_BUTTON_CONNECT1)->EnableWindow(FALSE);
(5)更新對話框內(nèi)容,把變量中的數(shù)據(jù)輸出到控件,故在OnInitDialog()函數(shù)中添加以下代碼:
  UpdateData(false);
4.4      軟件功能實現(xiàn)4.4.1      設(shè)備連接
要求點擊“連接”按鈕,上位機通信軟件與CANUSB—Ⅰ/Ⅱ智能CAN接口卡連接,并且顯示連接成功與否。若連接失敗,彈出警告框“打開設(shè)備失敗!”,若連接成功,分別在列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“CAN0連接成功”“CAN1連接成功”。
在TestDlg.h頭文件里添加變量:
public:
  int m_devnum;   //設(shè)備序號
int m_cannum;   //can通道編號
  void CAN0ShowInfo(CString str, int code);//CAN0接收顯示控制函數(shù)
雙擊“連接”按鈕,系統(tǒng)自動添加消息響應(yīng)函數(shù)OnButtonConnect0(),添加代碼,實現(xiàn)用戶單擊“連接”按鈕,完成設(shè)備的連接功能。
定義初始化CAN的數(shù)據(jù)類型的結(jié)構(gòu)體:VCI_INIT_CONFIG init_config;
如果CAN已經(jīng)打開,調(diào)用VCI_CloseDevice(m_devnum)函數(shù)關(guān)閉設(shè)備。調(diào)用GetCurSel()函數(shù)獲取設(shè)備序號:devnum=m_ComboDevindex.GetCurSel();
如果(VCI_OpenDevice(devnum))==0,則設(shè)備打開失敗,調(diào)用MessageBox函數(shù)彈出消息框,警告“打開設(shè)備失敗!”,否則CAN0和CAN1連接成功,分別在列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示。
此時,按鈕IDC_BUTTON_CONNECT0的標(biāo)題“連接”變?yōu)椤皵嚅_”,“啟動通道”按鈕變?yōu)橛行В侍砑右韵麓a:
GetDlgItem(IDC_BUTTON_CONNECT0)->SetWindowText("斷開");
GetDlgItem(IDC_BUTTON_CONNECT1)->EnableWindow(TRUE);

圖4.3  設(shè)備連接流程圖

4.4.2      設(shè)備啟動
要求點擊“啟動通道”按鈕,CAN0通道和CAN1通道同時啟動,并顯示啟動成功與否。若啟動通道失敗,彈出消息框,發(fā)出警告,若啟動通道成功,分別在列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“CAN0啟動成功”“CAN1啟動成功”。
雙擊“啟動通道”按鈕,系統(tǒng)自動添加消息響應(yīng)函數(shù)OnButtonConnect1(),添加代碼,實現(xiàn)用戶單擊“啟動通道”按鈕,完成通道CAN0和CAN1的啟動功能。
如果VCI_InitCAN(m_devnum,0,&init_config)!=true,則通道CAN0初始化失敗,如果VCI_InitCAN(m_devnum,1,&init_config)!=true,則通道CAN1初始化失敗,并立即調(diào)用VCI_CloseDevice(m_devnum)函數(shù),關(guān)閉設(shè)備
如果VCI_StartCAN(m_devnum,0)!=true,則通道CAN0啟動失敗,如果VCI_StartCAN(m_devnum,1)!=true,則通道CAN1啟動失敗,并立即調(diào)用VCI_CloseDevice(m_devnum)函數(shù),關(guān)閉設(shè)備。如果通道CAN0和CAN1啟動成功,則禁用啟動通道按鈕:
GetDlgItem(IDC_BUTTON_CONNECT1)->EnableWindow(FALSE);

圖4.4  設(shè)備啟動流程圖

4.4.3      設(shè)備復(fù)位
要求點擊“復(fù)位CAN0”按鈕,復(fù)位通道CAN0,點擊“復(fù)位CAN1”按鈕,復(fù)位通道CAN1,成功則分別在列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“復(fù)位成功”,失敗則列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“復(fù)位失敗”。
CAN0通道:
雙擊“復(fù)位CAN0”按鈕,系統(tǒng)自動添加消息響應(yīng)函數(shù)OnButtonResetcan0(),添加代碼,實現(xiàn)用戶單擊“復(fù)位CAN0”按鈕,完成通道CAN0的復(fù)位功能。
如果VCI_ResetCAN(m_devnum,0)==1,則復(fù)位成功,否則,復(fù)位失敗,將結(jié)果顯示在列表框IDC_LIST_INFO0內(nèi)。
CAN1通道的復(fù)位功能設(shè)置如CAN0通道,在此就不再贅述。

圖4.5  CAN0通道復(fù)位流程圖

4.4.4      幀封裝與發(fā)送
(1)幀封裝
報文標(biāo)識符指定了數(shù)據(jù)通訊中的源節(jié)點 MACID 和目標(biāo)節(jié)點MACID,并指示了報文的功能以及所要訪問的資源節(jié)點。報文標(biāo)識符被分為SrcMACID (源節(jié)點地址)、DestMACID(目標(biāo)節(jié)點地址)、ACK 位、FuncID(功能碼)和Source ID(資源節(jié)點地址)5 個部分,如表4.2示。

表4.2 iCAN標(biāo)識符分配

幀標(biāo)識符

ID28

ID27

ID26——ID21

ID20

ID19

ID18——ID13

00

SrcMACID

(源節(jié)點地址)

00

DestMACID

(目標(biāo)節(jié)點地址)

ID12

ID11——ID8

ID7——ID0

RTR

ACK

FUNC ID(功能碼)

SourceID(資源節(jié)點地址)

0

SrcMACID (源節(jié)點地址):發(fā)送iCAN 報文的節(jié)點地址,占用標(biāo)識符位ID28~ID21,SrcMACID 的高2 位固定為0,數(shù)值范圍為0x00-0x3F。
DestMACID (目標(biāo)節(jié)點地址):接收iCAN 報文節(jié)點地址,占用標(biāo)識符位ID20~ID13,DestMACID 的高2 位固定為0,數(shù)值范圍為0x00-0x3F。當(dāng)DestMACID 的值為0xFF時,表示本次發(fā)送的幀是廣播幀。
ACK(相應(yīng)標(biāo)識符):分配1 位,占用標(biāo)識符位ID12。該位用于區(qū)分幀類型為命令幀還是響應(yīng)幀,并說明是否需要應(yīng)答本幀。

表4.3相應(yīng)標(biāo)志位

ACK

含義

0

用于命令幀,本幀需要應(yīng)答,但對于廣播幀,此值無意義

1

用于響應(yīng)幀,本幀不需要應(yīng)答;或不需要應(yīng)答的命令幀(如廣播幀)

FunctionID(功能碼):分配4 位,占用標(biāo)識符位ID11~ID8,功能碼用于指示iCAN 報文需要實現(xiàn)的功能,接收報文的節(jié)點根據(jù)報文中的功能碼進行相應(yīng)的處理。
Source ID(資源節(jié)點地址):用于指示所要訪問的從站內(nèi)部資源的起始地址,分配8 位,占用標(biāo)識符位ID7~ID0。
分別輸入源節(jié)點、目的節(jié)點、響應(yīng)標(biāo)示符、功能碼、資源節(jié)點地址,要求對報文進行封裝后發(fā)送。
以源節(jié)點為例,占用標(biāo)識符位ID28~ID21,故處理程序如下:
memcpy(&szFrameID[0],(LPCTSTR)m_EditSendFrmID0,m_EditSendFrmID0.GetLength());//拷貝m_EditSendFrmID0所指內(nèi)存內(nèi)容到&szFrameID[0]所指的內(nèi)存地址上
CAN0strtodata((unsigned char*)szFrameID,&FrameID[0],1,0);//字符串轉(zhuǎn)換為數(shù)據(jù)串
ExtendID |= (FrameID[0]&0x3f)<<21;//左移21位
其他以相同方式處理,報文就封裝在FrameID[0]中。
(2)發(fā)送
要求點擊“發(fā)送”按鈕,發(fā)送數(shù)據(jù),結(jié)果分別顯示在列表框IDC_LIST_INFO0和IDC_LIST_INFO1內(nèi)。
CAN0通道:
雙擊“發(fā)送”按鈕,系統(tǒng)自動添加消息響應(yīng)函數(shù)OnButtonSend0(),添加代碼,實現(xiàn)用戶單擊“發(fā)送”按鈕,完成發(fā)送通道CAN0數(shù)據(jù)的功能。
如果bStartCAN==FALSE,則通道未啟動,不能發(fā)送數(shù)據(jù),彈出消息框,警告“請啟動設(shè)備!”。
調(diào)用VCI_Transmit(m_devnum,0,&frameinfo)函數(shù)判斷發(fā)送狀態(tài),如果為真,則發(fā)送成功,在列表框IDC_LIST_INFO0內(nèi)顯示封裝好的幀ID和“設(shè)備0 通道CAN0 發(fā)送成功”,否則顯示“設(shè)備0 通道CAN0 發(fā)送失敗”。
CAN1通道的發(fā)送功能設(shè)置同CAN0通道,在此就不再贅述。

圖4.6  CAN0通道發(fā)送流程

4.4.5      幀接收與解析
(1)接收
要求CAN0和CAN1通道能接收到對方通道或自己發(fā)出的數(shù)據(jù)。
CAN0通道:
在TestDlg.h頭文件里定義CAN0接收線程執(zhí)行函數(shù):
static UINT CAN0ReceiveThread(void *param);
在TestDlg.cpp內(nèi)添加CAN0接收線程執(zhí)行函數(shù)
UINT CTestDlg::CAN0ReceiveThread(void *param){}并在其中添加代碼,完成數(shù)據(jù)接收功能。
定義CAN信息幀數(shù)據(jù)類型的結(jié)構(gòu)體:VCI_CAN_OBJ frameinfo[50];
獲取序列號:bSn=VCI_ReadDevSn(dlg->m_devnum,DevSn);
獲取數(shù)據(jù)長度:Len=VCI_Receive(dlg->m_devnum,frameinfo,50,200);
如果Len<=0,則沒有接收到數(shù)據(jù),否則,接收到數(shù)據(jù)。
如果frameinfo.CANIndex==0,則CAN0通道接收數(shù)據(jù),否則,CAN1通道接收數(shù)據(jù)。如果frameinfo.ExternFlag==0,則幀類型為標(biāo)準(zhǔn)幀,否則,為擴展幀。如果frameinfo.RemoteFlag==0,則幀格式為數(shù)據(jù)幀,否則,為遠(yuǎn)程幀。

圖4.7  CAN0接收數(shù)據(jù)流程圖

(2)幀解析
  • 源節(jié)點封裝后的幀ID右移21位輸出的即為源節(jié)點,程序如下:
tmpstr.Format("源節(jié)點:%02x ",(frameinfo.ID>>21)&0x3f);
  • 目的節(jié)點:封裝后的幀ID右移13位輸出的即為目的節(jié)點,程序如下:
tmpstr.Format(" 目的節(jié)點:%02x ",(frameinfo.ID>>13)&0x3f);
  • 響應(yīng)標(biāo)示符:封裝后的幀ID右移12位輸出的即為響應(yīng)標(biāo)示符如果為1則為響應(yīng)幀,為0則為命令幀,程序如下:
if((frameinfo.ID>>12)&0x01)
              str+=" 響應(yīng)幀";
else            
              str+=" 命令幀";
  • 功能碼:封裝后的幀ID右移8位輸出的即為功能碼,程序如下:
tmpstr.Format("  function ID:%02x  ",(frameinfo.ID>>8)&0x0f);
  • 資源節(jié)點編號:封裝后的幀ID最后8位即為功能碼,程序如下:
tmpstr.Format("  source ID:%02x  ",frameinfo.ID&0xff);

圖4.8  幀解析效果圖

4.4.6      清除顯示
要求點擊“清除顯示”按鈕,列表框IDC_LIST_INFO0和IDC_LIST_INFO1內(nèi)的內(nèi)容全部清除。
CAN0通道:
雙擊“清除顯示”按鈕,系統(tǒng)自動添加消息響應(yīng)函數(shù)OnButton Clear0(),添加代碼,實現(xiàn)用戶單擊“清除顯示”按鈕,完成列表框IDC_LIST_INFO0內(nèi)的內(nèi)容全部清除功能。
添加以下代碼,清除CAN0列表顯示項:
m_ListInfo0.ResetContent();
4.5      本章小結(jié)
本章具體介紹了CAN通信軟件的設(shè)計,第一部分介紹了CANUSB—Ⅰ/Ⅱ智能CAN接口卡的驅(qū)動安裝方法;第二部分介紹了CAN接口卡函數(shù)庫;第三部分介紹了軟件的界面設(shè)計,包括界面的布局、控件屬性及成員變量的設(shè)置,和對話框的初始化;第四部分詳細(xì)介紹了軟件功能的實現(xiàn),包括設(shè)備連接、啟動、復(fù)位、幀封裝與發(fā)送、幀接收與解析和清除顯示六個部分功能的實現(xiàn)方法。
5          測試及發(fā)布5.1      軟件功能測試
將CANUSB—Ⅰ/Ⅱ智能CAN接口卡連至PC的USB接口槽,運行上位機軟件,測試功能。
5.1.1      基本功能測試
執(zhí)行程序,如圖輸入數(shù)據(jù),測試各項功能是否能正常運行。

圖5.1  程序軟件功能測試

經(jīng)測試,各項功能運行正常。
5.1.2      非法輸入限制
對于編輯框,若輸入非法字符,則彈出消息框“非法字符,請重新輸入!”的警告,如下圖所示:

圖5.2  非法輸入警告

5.2      程序發(fā)布
一個程序除了.exe以外,還需要用到很多其他外部資源,這樣程序使用起來很不方便,程序打包就是將這些所有資源放到一個安裝程序中,這樣只要下載并運行這個安裝程序,就可以讓安裝程序釋放目標(biāo)程序及所有這些資源,方便使用。
Inno Setup是一個免費的安裝制作軟件,小巧、簡便、精美是其最大的特點。用Inno Setup對已經(jīng)制作好的工程進行打包步驟如下:
  • 將已經(jīng)調(diào)試完成的工程,生成發(fā)行版(release);
  • 安裝好Inno Setup Compiler漢化版,啟動軟件,使用腳本設(shè)計向?qū)?/font>創(chuàng)建一個新腳本文件完成安裝程序的制作,過程如下圖所示:

圖5.3  應(yīng)用程序信息

圖5.4  應(yīng)用程序文件夾

圖5.5  應(yīng)用程序文件

圖5.6  應(yīng)用程序圖標(biāo)

圖5.7  應(yīng)用程序文檔

圖5.8  安裝語言

圖5.9  編譯設(shè)置

圖5.10  Inno Setup 預(yù)處理器

圖5.11  完成向?qū)?/font>

圖5.12  編譯腳本

  • 雙擊Setup圖標(biāo),進行嘗試安裝,安裝成功后,在開始菜單欄出現(xiàn)運行和卸載快捷方式可以運行軟件和卸載軟件

圖5.13  安裝成功效果圖

5.3      本章小結(jié)
本章對已經(jīng)編寫完成的程序進行功能測試,主要測試連接設(shè)備、啟動通道、復(fù)位、發(fā)送和接收功能,并能實現(xiàn)幀的封裝和解析,測試無誤后進行程序發(fā)布,方便使用。

結(jié)論


畢業(yè)設(shè)計是本科學(xué)習(xí)階段一次非常難得的理論與實際相結(jié)合的機會,通過這次CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計,我從對CAN總線相關(guān)技術(shù)一無所知到有了一點了解,鞏固了曾經(jīng)學(xué)過的知識,鍛煉了理論與實際結(jié)合解決實際問題的能力,同時也提高了我查閱文獻(xiàn)資料的能力,使自己有了全方位的提高,豐富了自己的經(jīng)驗。
本文主要完成了以下的研究:
1、對CAN總線的研究背景、發(fā)展現(xiàn)狀及本課題的研究目的和意義進行了論述。
2、簡單分析了CAN2.0協(xié)議和CAN控制器SJA1000。
3、介紹了本課題的開發(fā)環(huán)境和CANUSBⅠ/Ⅱ只能CAN接口卡。
4、基于VC++設(shè)計CAN通信軟件,并實現(xiàn)了以下功能:
①正確識別CAN設(shè)備并打開CAN通道;
②可封裝CAN報文進行發(fā)送;
③可接收CAN數(shù)據(jù)幀,并能對接收的數(shù)據(jù)幀進行解析:在數(shù)據(jù)列表中顯示報文的相關(guān)參數(shù)信息(如:幀ID、幀格式、幀類型、DLC值以及幀數(shù)據(jù)等參數(shù));
④具有過濾功能,可不顯示指定的協(xié)議幀。
5、對軟件功能進行測試,并發(fā)布軟件。

由于自身水平所限,畢業(yè)設(shè)計必定還有很多不足和欠缺考慮的地方,也感到自身知識的貧乏,希望在日后的努力中能夠更加完善。



致謝


本人的畢業(yè)設(shè)計一直是在李艷老師的悉心指導(dǎo)下進行的。李老師治學(xué)嚴(yán)謹(jǐn),要求嚴(yán)格,學(xué)識淵博,為人親切。從課題的選定、方案的確定、實際的設(shè)計到論文的寫作,李老師都給予了無微不至的關(guān)懷。在整個畢業(yè)設(shè)計過程中,李艷老師時時以高標(biāo)準(zhǔn)要求,嚴(yán)格安排時間,并為我指明大方向,使我少走很多彎路。在遇到問題時,李艷老師也耐心指導(dǎo),循循善誘,讓我能夠獨立思考,順利地完成我的畢業(yè)設(shè)計。在此表示誠摯的感謝和由衷的敬意。
此外,我還要感謝許多同學(xué)在整個過程中的幫助和配合。
最后,再次對關(guān)心、幫助我的老師同學(xué)表示衷心的感謝!

完整的Word格式文檔51黑下載地址:
CAN總線通信系統(tǒng)上位機通信軟件的設(shè)計.doc (842 KB, 下載次數(shù): 113)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:382152 發(fā)表于 2018-8-2 15:13 | 只看該作者
這個可以
回復(fù)

使用道具 舉報

板凳
ID:287275 發(fā)表于 2018-9-15 07:19 | 只看該作者
不錯的東西,正好需要
回復(fù)

使用道具 舉報

地板
ID:767030 發(fā)表于 2020-6-1 23:25 來自手機 | 只看該作者
好東西!收了!
回復(fù)

使用道具 舉報

5#
ID:850129 發(fā)表于 2020-11-27 11:32 | 只看該作者
最近正好在開發(fā)can通信上位機軟件
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品久久久久秋霞不卡 | 久久久看 | 视频一区二区在线观看 | 久久免费观看视频 | 国产高清视频在线观看 | 欧美精品一区在线 | 成人免费淫片aa视频免费 | 欧美日韩视频在线播放 | 精品国产精品国产偷麻豆 | 极品在线| 精品一区二区三区在线视频 | 久久成人精品 | 午夜欧美一区二区三区在线播放 | 在线观看中文字幕av | 精品久久香蕉国产线看观看亚洲 | 亚洲国产精品激情在线观看 | 91综合网| a视频在线| 免费观看一级特黄欧美大片 | 狠狠操网站 | 久久久久久免费毛片精品 | 不卡一区 | 欧美乱大交xxxxx另类电影 | 国产亚洲一级 | www国产亚洲精品久久网站 | 欧美影院| 有码一区 | 国产999精品久久久久久 | 日韩不卡一区二区三区 | 久久久久久国产精品mv | av网站免费看 | 国产精品日本一区二区在线播放 | 久久欧美精品 | 久久成人国产 | 91文字幕巨乱亚洲香蕉 | 黄色一级电影免费观看 | 国产精品久久久久久久久久久久午夜片 | 成人久久 | 国产高清一区 | 一区二区在线视频 | 欧美日韩一区精品 |