wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 21812|回復(fù): 4
收起左側(cè)

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

[復(fù)制鏈接]
ID:382152 發(fā)表于 2018-8-2 14:53 | 顯示全部樓層 |閱讀模式
用VS2010開發(fā)CAN總線上位機(jī)的教程
目   次
1              緒論
1.1              研究背景
1.2              研究目的和意義
1.3              國(guó)內(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è)計(jì)
4.1              驅(qū)動(dòng)程序安裝
4.2              CAN接口卡函數(shù)庫說明
4.3              界面設(shè)計(jì)
4.4              軟件功能實(shí)現(xiàn)
4.5              本章小結(jié)
5              測(cè)試及發(fā)布
5.1              軟件功能測(cè)試
5.2              程序發(fā)布
5.3              本章小結(jié)
結(jié)論
致謝
參考文獻(xiàn)

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

表2.1 幀的類型及用途

幀類型

幀用途

數(shù)據(jù)幀

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

遠(yuǎn)程幀

用于接受節(jié)點(diǎn)向某個(gè)發(fā)送節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)

錯(cuò)誤幀

用于檢測(cè)出通信錯(cuò)誤(如校驗(yàn)錯(cuò)誤)時(shí)向其他節(jié)點(diǎn)發(fā)送通知

過載幀

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

幀間隔

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

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

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

段名

段長(zhǎng)度/位

說明

幀起始

1

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

仲裁場(chǎng)

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

12

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

擴(kuò)展幀

32

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

控制場(chǎng)

6

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

數(shù)據(jù)場(chǎng)

0—8

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

CRC場(chǎng)

16

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

ACK場(chǎng)

2

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

幀結(jié)束

7

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

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

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

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

表3.1 CANUSB—Ⅰ/Ⅱ接口卡的CAN—bus信號(hào)分配

引腳

端口

名稱

功能

1

CAN1

CANL1

CANL1信號(hào)線

2

R1-

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

3

PG

屏蔽線

4

R1+

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

5

CANH1

CANH1信號(hào)線

6

CAN0

CANL0

CANL0信號(hào)線

7

R0-

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

8

PG

屏蔽線

9

R0+

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

10

CANH0

CANH0信號(hào)線

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

DWORD ID;//報(bào)文ID

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

BYTE ExternFlag;//是否是擴(kuò)展幀

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

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

BYTE Data[8]; //報(bào)文的數(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);//啟動(dòng)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);//讀取序列號(hào)
其中:
DevIndex  設(shè)備索引號(hào),有一個(gè)設(shè)備時(shí)索引號(hào)為0,有兩個(gè)可以為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時(shí)為無限等待;>0時(shí)等待超時(shí)時(shí)間,以毫秒為單位;
      DevSn  序列號(hào);
      返回值  為1表示操作成功,0表示操作失敗;
4.2.3      接口函數(shù)庫使用方法
首先,把庫函數(shù)文件都放在工作目錄下。總共有四個(gè)文件CAN_TO_USB.h,CAN_TO_USB.lib,SiUSBXp.dll,CAN_TO_USB.dll。
VC調(diào)用動(dòng)態(tài)庫的方法:
(1)在.cpp中包含CAN_TO_USB.h頭文件;
(2)在工程文件中加入CAN_TO_USB.lib文件。
4.2.4      接口函數(shù)庫使用流程

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

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

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

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

控件名

控件ID

標(biāo)題

變量類型

變量名

靜態(tài)文本

IDC_STATIC

設(shè)備序號(hào)

組合框

IDC_COMBO_DEVINDEX

CComboBox

m_ComboDevindex

按鈕

IDC_BUTTON_CONNECT0

連接

按鈕

IDC_BUTTON_CONNECT1

啟動(dòng)通道

按鈕

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é)點(diǎn):0x

編輯框

IDC_EDIT_MASK0

CString

m_EditMask0

靜態(tài)文本

IDC_STATIC

目的節(jié)點(diǎn):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é)點(diǎn)編號(hào):0x

編輯框

IDC_EDIT_MASKZ0

CString

m_EditMaskZ0

靜態(tài)文本

IDC_STATIC

驗(yàn)收碼:源節(jié)點(diǎn):0x

編輯框

IDC_EDIT_CODE0

CString

m_EditCode0

靜態(tài)文本

IDC_STATIC

目的節(jié)點(diǎn):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é)點(diǎn)編號(hào):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é)點(diǎn):0x

編輯框

IDC_EDIT_SENDFRAMEID0

CString

m_EditSendFrmID0

靜態(tài)文本

IDC_STATIC

目的節(jié)點(diǎn):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é)點(diǎn)編號(hào):0x

編輯框

IDC_EDIT_SENDFRAMEIDZ0

CString

m_EditSendFrmIDZ0

組框

IDC_STATIC

信息

列表框

IDC_LIST_INFO0

CListBox

m_ListInfo0

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

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

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

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

4.4.3      設(shè)備復(fù)位
要求點(diǎn)擊“復(fù)位CAN0”按鈕,復(fù)位通道CAN0,點(diǎn)擊“復(fù)位CAN1”按鈕,復(fù)位通道CAN1,成功則分別在列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“復(fù)位成功”,失敗則列表框IDC_LIST_INFO0和IDC_LIST_INFO1顯示“復(fù)位失敗”。
CAN0通道:
雙擊“復(fù)位CAN0”按鈕,系統(tǒng)自動(dòng)添加消息響應(yīng)函數(shù)OnButtonResetcan0(),添加代碼,實(shí)現(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)幀封裝
報(bào)文標(biāo)識(shí)符指定了數(shù)據(jù)通訊中的源節(jié)點(diǎn) MACID 和目標(biāo)節(jié)點(diǎn)MACID,并指示了報(bào)文的功能以及所要訪問的資源節(jié)點(diǎn)。報(bào)文標(biāo)識(shí)符被分為SrcMACID (源節(jié)點(diǎn)地址)、DestMACID(目標(biāo)節(jié)點(diǎn)地址)、ACK 位、FuncID(功能碼)和Source ID(資源節(jié)點(diǎn)地址)5 個(gè)部分,如表4.2示。

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

幀標(biāo)識(shí)符

ID28

ID27

ID26——ID21

ID20

ID19

ID18——ID13

00

SrcMACID

(源節(jié)點(diǎn)地址)

00

DestMACID

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

ID12

ID11——ID8

ID7——ID0

RTR

ACK

FUNC ID(功能碼)

SourceID(資源節(jié)點(diǎn)地址)

0

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

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

ACK

含義

0

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

1

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

FunctionID(功能碼):分配4 位,占用標(biāo)識(shí)符位ID11~ID8,功能碼用于指示iCAN 報(bào)文需要實(shí)現(xiàn)的功能,接收?qǐng)?bào)文的節(jié)點(diǎn)根據(jù)報(bào)文中的功能碼進(jìn)行相應(yīng)的處理。
Source ID(資源節(jié)點(diǎn)地址):用于指示所要訪問的從站內(nèi)部資源的起始地址,分配8 位,占用標(biāo)識(shí)符位ID7~ID0。
分別輸入源節(jié)點(diǎn)、目的節(jié)點(diǎn)、響應(yīng)標(biāo)示符、功能碼、資源節(jié)點(diǎn)地址,要求對(duì)報(bào)文進(jìn)行封裝后發(fā)送。
以源節(jié)點(diǎn)為例,占用標(biāo)識(shí)符位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位
其他以相同方式處理,報(bào)文就封裝在FrameID[0]中。
(2)發(fā)送
要求點(diǎn)擊“發(fā)送”按鈕,發(fā)送數(shù)據(jù),結(jié)果分別顯示在列表框IDC_LIST_INFO0和IDC_LIST_INFO1內(nèi)。
CAN0通道:
雙擊“發(fā)送”按鈕,系統(tǒng)自動(dòng)添加消息響應(yīng)函數(shù)OnButtonSend0(),添加代碼,實(shí)現(xiàn)用戶單擊“發(fā)送”按鈕,完成發(fā)送通道CAN0數(shù)據(jù)的功能。
如果bStartCAN==FALSE,則通道未啟動(dòng),不能發(fā)送數(shù)據(jù),彈出消息框,警告“請(qǐng)啟動(dòng)設(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通道能接收到對(duì)方通道或自己發(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];
獲取序列號(hào):bSn=VCI_ReadDevSn(dlg->m_devnum,DevSn);
獲取數(shù)據(jù)長(zhǎng)度: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)幀,否則,為擴(kuò)展幀。如果frameinfo.RemoteFlag==0,則幀格式為數(shù)據(jù)幀,否則,為遠(yuǎn)程幀。

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

(2)幀解析
  • 源節(jié)點(diǎn)封裝后的幀ID右移21位輸出的即為源節(jié)點(diǎn),程序如下:
tmpstr.Format("源節(jié)點(diǎn):%02x ",(frameinfo.ID>>21)&0x3f);
  • 目的節(jié)點(diǎn):封裝后的幀ID右移13位輸出的即為目的節(jié)點(diǎn),程序如下:
tmpstr.Format(" 目的節(jié)點(diǎn):%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é)點(diǎn)編號(hào):封裝后的幀ID最后8位即為功能碼,程序如下:
tmpstr.Format("  source ID:%02x  ",frameinfo.ID&0xff);

圖4.8  幀解析效果圖

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

圖5.1  程序軟件功能測(cè)試

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

圖5.2  非法輸入警告

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

圖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),進(jìn)行嘗試安裝,安裝成功后,在開始菜單欄出現(xiàn)運(yùn)行和卸載快捷方式可以運(yùn)行軟件和卸載軟件

圖5.13  安裝成功效果圖

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

結(jié)論


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

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



致謝


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

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

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:382152 發(fā)表于 2018-8-2 15:13 | 顯示全部樓層
這個(gè)可以
回復(fù)

使用道具 舉報(bào)

ID:287275 發(fā)表于 2018-9-15 07:19 | 顯示全部樓層
不錯(cuò)的東西,正好需要
回復(fù)

使用道具 舉報(bào)

ID:767030 發(fā)表于 2020-6-1 23:25 來自觸屏版 | 顯示全部樓層
好東西!收了!
回復(fù)

使用道具 舉報(bào)

ID:850129 發(fā)表于 2020-11-27 11:32 | 顯示全部樓層
最近正好在開發(fā)can通信上位機(jī)軟件
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
国产精品99视频| 国产91在线播放精品91| 欧美性三三影院| 亚洲国产视频a| 国产精品美女久久久久久2018| 99久久精品情趣| 成人一道本在线| 成人av午夜电影| 成人av网站在线观看| 成人99免费视频| 久久综合999| 国产欧美一区二区精品性| 国产喂奶挤奶一区二区三区| 国产拍欧美日韩视频二区| 中文子幕无线码一区tr| 综合中文字幕亚洲| 一区二区理论电影在线观看| 樱桃国产成人精品视频| 亚洲va欧美va人人爽| 日韩欧美999| 69堂成人精品免费视频| 亚洲第一福利网| 亚洲少妇激情视频| 久久精品影视伊人网| 欧美激情精品久久久| 日本一本a高清免费不卡| 成人免费福利在线| 国精产品一区二区| 宅男一区二区三区| 国产成人生活片| 精品www久久久久奶水| 午夜免费看毛片| 在线精品视频播放| fc2ppv在线播放| 国产黄色免费视频| 天天舔天天干天天操| 国产女人av| 人人天天夜夜| 日韩精品视频无播放器在线看| 岛国在线视频| 白浆视频在线观看| 色悠久久久久综合先锋影音下载| 精品国产一区二区三区久久久樱花| 亚洲欧美在线专区| 久久99久久久久| 国产三级一区二区| 久久不见久久见国语| 成人在线免费观看91| 国产欧美欧美| 国产成人精品午夜视频免费| 国产精品免费久久| 欧美中文字幕亚洲一区二区va在线 | 黄色动漫免费看| 午夜影院免费| 日韩精品卡一| 亚洲精品观看| 欧美私人啪啪vps| 国产激情一区二区三区桃花岛亚洲| 国产精品欧美经典| 欧美性xxxxxxxx| 伊人青青综合网站| 国产一区在线播放| 91蜜桃传媒精品久久久一区二区| 男人的天堂导航| 亚洲乱码国产乱码精品天美传媒| 久久这里只有精品23| 欧美熟妇精品一区二区| 最新一区二区三区| www.国产.com| sedog在线观看| 1024免费在线视频| 91精品一区| 国产精品v日韩精品v欧美精品网站 | 小说区图片区综合久久亚洲| av激情网站| av蜜臀在线| 狠狠综合久久av一区二区蜜桃 | 国产成人中文字幕| 一区二区三区在线视频看| 四季av一区二区三区| 亚洲最大成人网站| 在线观看免费观看在线| 污黄视频在线观看| av黄色在线观看| 日韩成人精品| 亚洲一区图片| 国产精品久久久久天堂| 精品国产一区二区三区久久久蜜月 | 欧美成aaa人片免费看| 国产一区免费在线| www欧美激情| 久草视频免费在线播放| 久久午夜宅男免费网站| 三级国产在线观看| 日韩精品一区国产| 日本成人中文字幕在线视频| 亚洲不卡一区二区三区| 久久综合九色九九| 色大师av一区二区三区| 精品国产一区在线| 性中国xxx极品hd| 污污网址在线观看| 欧美电影院免费观看| 日韩成人伦理电影在线观看| 亚洲不卡在线观看| 欧美—级a级欧美特级ar全黄| 亚洲一区二区高清视频| 捆绑凌虐一区二区三区| 国产suv精品一区二区69| 免费人成短视频在线观看网站 | 亚洲精品91在线| 日本人妻丰满熟妇久久久久久| 免费特级黄毛片| 欧美三区四区| 三级影片在线观看欧美日韩一区二区| 亚洲天堂精品视频| 亚洲性夜色噜噜噜7777| 激情视频在线观看一区二区三区| 久久99爱视频| 91黑人精品一区二区三区| 九一免费看片| 日韩免费福利视频| 老鸭窝毛片一区二区三区| 香港成人在线视频| 88国产精品欧美一区二区三区| 男人添女荫道口女人有什么感觉| 极品美妇后花庭翘臀娇吟小说| 欧美日韩亚洲第一页| 嫩草在线视频| 亚洲国产精品久久久天堂| 国产精品欧美极品| 色综合色综合网色综合| 一二三在线视频| 五月婷婷六月香| 国产在线精品一区二区不卡| 黑人极品ⅴideos精品欧美棵| 国语对白精品一区二区| 亚洲午夜视频在线观看| 久久久噜噜噜久久久| 蜜臀av色欲a片无码精品一区 | 精品淫伦v久久水蜜桃| 成人污视频在线观看| 亚洲第一精品久久忘忧草社区| 国产一区在线免费| 国产又黄又粗视频| 国产精品一区二区三区高清在线| 九九精品调教| 美女国产一区二区三区| 欧美一区二区三区性视频| 亚洲一区二区三区视频| 亚洲免费观看在线| 影音先锋中文字幕第一页| 亚洲第一图区| 日韩中文字幕一区二区三区| 制服丝袜在线91| 欧美一区1区三区3区公司| 国产性生活大片| 操你啦视频分享| 免费日本黄色| 免费亚洲电影| 国产美女在线精品| 日韩精品中文字| 亚洲不卡中文字幕| 久久久国产精品成人免费| 原千岁中文字幕| 色狮一区二区三区四区视频| 精品国产91久久久久久| 亚洲a一级视频| 国产亚洲精品精品精品| 4hu最新网址| 任你躁在线精品免费| 久久精品日韩一区二区三区| 欧美精品福利在线| 美女在线视频一区二区| 先锋资源中文字幕| 成人av三级| 91视频91自| 国产综合在线视频| 女人扒开双腿让男人捅 | 亚洲a一区二区三区| 一本色道久久综合精品竹菊| 成人3d动漫一区二区三区91| 一级片一级片一级片| 96久久久久久| 极品日韩av| 亚洲高清一二三区| 免费看又黄又无码的网站| 亚洲国产精彩视频| 中文字幕在线官网| 久久亚洲综合色| 日韩av电影院| 中文字幕人妻一区二区三区在线视频| av影音在线| 99久久精品网| 欧美成人在线直播| 成人午夜视频在线观看免费| 精品黑人一区二区三区在线观看 | 国产精久久久久| 成年人福利网站| 欧美aaaa视频| 欧美一区午夜视频在线观看| 国产树林野战在线播放| 午夜精品久久久久久久99老熟妇 | 波多野结衣 在线| 免费在线观看羞羞视频| **女人18毛片一区二区| 欧美tickling网站挠脚心| 东北少妇不带套对白| 亚洲一二三四2021不卡| 欧美日韩中出| 亚洲综合另类小说| 日本不卡一区二区三区视频| 国产精品视频无码| 高清av一区二区三区| 亚洲免费观看高清完整版在线| 91精品婷婷国产综合久久蝌蚪| 国产乡下妇女做爰毛片| 亚洲婷婷噜噜| 国产精品久久久久久久久免费丝袜| 成人在线一区二区| 亚洲另类在线观看| 啊啊啊久久久| 亚洲卡通欧美制服中文| 欧美激情论坛| 国产 欧美 精品| 亚洲综合网狠久久| 欧美日本一区二区在线观看| 国产成a人亚洲精v品在线观看| 香蕉久久一区二区三区| 成人线上播放| 91精品国产91久久综合桃花| 黄色国产小视频| www操操操| 久久国产福利| 欧美一级大片在线观看| 免费成人深夜夜行网站| 日本三级视频在线播放| 久久中文娱乐网| 国产乱人伦精品一区二区| 一二三四区视频| 亚洲福利合集| 日韩一区二区三区免费看| 欧美床上激情在线观看| 91香蕉视频污在线观看| 久热国产在线| 国产精品国产a| 性欧美大战久久久久久久免费观看 | 欧美日韩黄色网| 91麻豆国产福利在线观看宅福利| 中文字幕视频一区| 亚洲国产成人不卡| 波多野结衣久久高清免费| 日韩精品影视| www.欧美精品| 久久精品在线观看视频| 欧美bbbxxxxx| 欧美视频二区36p| 各处沟厕大尺度偷拍女厕嘘嘘| 女人色在线免费视频| 免费亚洲视频| 国产精品扒开腿做| 九九热最新视频| 91欧美日韩在线| 亚洲毛片在线观看.| 亚洲第一香蕉网| av在线免费网址| 亚洲一区二区三区影院| 成人毛片一区二区| 男女羞羞网站| 99免费精品视频| 天堂资源在线亚洲视频| 国产福利资源| 美女诱惑一区二区| 91超碰rencao97精品| 污视频网站免费观看| 香蕉综合视频| 国产高清在线不卡| 国产国语亲子伦亲子| 日韩精品首页| 91精品国产91久久| 国产精品一品二区三区的使用体验| 九九视频精品全部免费播放| 久久国产精品首页| 久久精品国产成人av| 果冻天美麻豆一区二区国产| 亚洲天堂影视av| 九九热国产精品视频| 欧美午夜三级| 精品久久久久久久久久| 99日在线视频| 日本电影全部在线观看网站视频 | 国产剧情一区二区| 欧美亚洲另类久久综合| 一个人看的www免费观看视频| 美女在线一区二区| 欧美久久电影| www.女人的天堂.com| 91蜜桃网址入口| 高清无码视频直接看| 日本中文视频| 1区2区3区精品视频| 北条麻妃av高潮尖叫在线观看| 青青久草在线| 久久久亚洲综合| 男人揉女人奶房视频60分 | 国产91在线看| 在线码字幕一区| 国产黄色一级电影| 国产精品美女一区二区| 黑森林精品导航| aaa大片在线观看| 欧美日韩aaa| 欧美激情精品久久久久久免费| 国产成人毛片| 深夜精品寂寞黄网站在线观看| 日韩电影在线观看一区二区| 精品一区不卡| 国产99久久精品一区二区| 最近免费中文字幕在线第一页 | 在线观看一区不卡| 天天久久综合网| 伊人久久综合一区二区| 国产视频丨精品|在线观看| 日本三级午夜理伦三级三| 国产欧美日韩| 国产精品无av码在线观看| 欧美性猛交xxxx免费看蜜桃| 成人精品国产福利| ww国产内射精品后入国产| 国产黄色免费在线观看| 欧美日本在线视频| 劲爆欧美第一页| 99久久亚洲精品蜜臀| 国产精品国产一区二区| 极品色影院av| 亚洲综合色区另类av| 国产肉体xxxx裸体784大胆| 激情五月综合婷婷| 性欧美xxxx视频在线观看| 男人午夜影院| 9人人澡人人爽人人精品| 妞干网在线免费视频| wwww亚洲| 色yeye香蕉凹凸一区二区av| 欧美一级一区二区三区| 激情久久久久久久久久久久久久久久| 在线观看污视频| 黄色免费网站在线观看| 亚洲白拍色综合图区| 无码人妻精品一区二区三区蜜桃91| 激情欧美亚洲| 一区二区视频在线免费| 韩国三级av在线免费观看| 日韩一区二区三区观看| 黄色av一区二区| 人人狠狠综合久久亚洲| 日韩网站在线免费观看| av美女在线观看| 精品国产欧美成人夜夜嗨| 久热中文字幕| 国产精品精品国产色婷婷| 日本免费福利视频| 久久99视频| 国产精品嫩草在线观看| 中文字幕视频在线免费| 日韩女优制服丝袜电影| 怡红院成永久免费人全部视频| 狂野欧美性猛交xxxx巴西| 97在线国产视频| 国产美女精品写真福利视频| 欧美精品激情视频| 奇米影视888狠狠狠| 精品久久久久久中文字幕| 校园春色 亚洲| 伊人久久成人| 国产av麻豆mag剧集| 日韩电影免费观看高清完整版| 88xx成人精品| 妞干网2018| 日韩免费在线观看| 亚洲精品成av人片天堂无码 | 免费看涩涩视频软件| 欧美日韩国产一中文字不卡| 久久综合久久鬼| 全部av―极品视觉盛宴亚洲| 国产成人精品视频ⅴa片软件竹菊| 欧美色网在线| 国产精品稀缺呦系列在线| 国产性一级片| 亚洲精品动漫100p| 五月婷婷综合久久| 一区精品在线播放| 永久免费观看片现看| 国内激情久久| 免费h视频在线观看| 日本亚洲欧洲色| 美女一级全黄| 亚洲国产精品va| 免费在线观看国产黄| 天天影视色香欲综合网老头|