本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,更具體地說(shuō),涉及一種CAN自動(dòng)路由系統(tǒng)和方法。
背景技術(shù):
由于現(xiàn)有車(chē)輛前裝CAN網(wǎng)絡(luò)的設(shè)計(jì)越來(lái)越復(fù)雜,各ECU節(jié)點(diǎn)單元也越來(lái)越多,各ECU獨(dú)立單元需要對(duì)CAN網(wǎng)絡(luò)進(jìn)行對(duì)應(yīng)的設(shè)計(jì)。目前汽車(chē)產(chǎn)業(yè)更加產(chǎn)業(yè)化、智能化。其CAN網(wǎng)絡(luò)設(shè)計(jì)應(yīng)用越來(lái)越廣泛。而在整個(gè)CAN網(wǎng)絡(luò)中如何更好更快去找尋自己的ECU單元(CAN ID),如何能輕松訪(fǎng)問(wèn)并發(fā)送數(shù)據(jù),在用戶(hù)數(shù)據(jù)多包發(fā)送更為突出,而現(xiàn)有系統(tǒng)未能整體去實(shí)現(xiàn)CAN網(wǎng)絡(luò)的應(yīng)用層、鏈路層,導(dǎo)致需要開(kāi)發(fā)CAN網(wǎng)絡(luò)的廠家設(shè)計(jì)上比較困難,獨(dú)立去做的復(fù)雜度相對(duì)高,通過(guò)CAN網(wǎng)絡(luò)路由功能可實(shí)現(xiàn)應(yīng)用層輕松使用CAN網(wǎng)絡(luò),能快速實(shí)現(xiàn)網(wǎng)絡(luò)的開(kāi)發(fā),最終可實(shí)現(xiàn)產(chǎn)品的快速開(kāi)發(fā)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題在于,針對(duì)現(xiàn)有技術(shù)的上述缺陷,提供一種CAN自動(dòng)路由系統(tǒng)和方法。
本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:提供一種CAN自動(dòng)路由系統(tǒng),包括:硬件模塊、硬件驅(qū)動(dòng)模塊、自動(dòng)鏈路模塊和自動(dòng)路由模塊;所述硬件模塊、所述硬件驅(qū)動(dòng)模塊、所述自動(dòng)鏈路模塊和所述自動(dòng)路由模塊依次 連接;所述硬件模塊連接于鏈路層,用于為數(shù)據(jù)傳輸提供硬件基礎(chǔ);所述自動(dòng)鏈路模塊用于標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù)接收或發(fā)送;所述自動(dòng)路由模塊用于用戶(hù)注冊(cè),并根據(jù)所述硬件驅(qū)動(dòng)模塊和所述自動(dòng)鏈路模塊的工作狀態(tài)生成相應(yīng)的描述符;所述硬件驅(qū)動(dòng)模塊用于根據(jù)所述描述符驅(qū)動(dòng)所述硬件模塊接收或發(fā)送數(shù)據(jù)。
在本發(fā)明的CAN自動(dòng)路由系統(tǒng)中,所述自動(dòng)路由模塊還用于在所述硬件驅(qū)動(dòng)模塊和所述自動(dòng)鏈路模塊的工作狀態(tài)正常的情況時(shí)生成成功描述符;在所述硬件驅(qū)動(dòng)模塊和所述自動(dòng)鏈路模塊的工作狀態(tài)不正常或產(chǎn)生錯(cuò)誤時(shí)生成錯(cuò)誤描述符。
在本發(fā)明的CAN自動(dòng)路由系統(tǒng)中,
所述自動(dòng)路由模塊還用于直接將需要發(fā)送的所述數(shù)據(jù)發(fā)送至所述自動(dòng)鏈路模塊;所述自動(dòng)鏈路模塊還用于根據(jù)所述數(shù)據(jù)的長(zhǎng)度大小,對(duì)所述數(shù)據(jù)進(jìn)行分包發(fā)送。
在本發(fā)明的CAN自動(dòng)路由系統(tǒng)中,
用戶(hù)發(fā)送所述數(shù)據(jù)的接口為:can_write(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要發(fā)送的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)發(fā)送數(shù)據(jù)的長(zhǎng)度。
在本發(fā)明的CAN自動(dòng)路由系統(tǒng)中,
所述自動(dòng)鏈路模塊還用于自動(dòng)鏈路接收所述數(shù)據(jù),并將所述數(shù)據(jù)發(fā)送到所述自動(dòng)路由模塊;所述自動(dòng)路由模塊還用于把接收到的數(shù)據(jù)通過(guò)所述描述符與ECU節(jié)點(diǎn)信息對(duì)應(yīng)進(jìn)行數(shù)據(jù)發(fā)送。
在本發(fā)明的CAN自動(dòng)路由系統(tǒng)中,
用戶(hù)發(fā)送所述數(shù)據(jù)的接口為:can_read(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要接收的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)接收數(shù)據(jù)的長(zhǎng)度。
本發(fā)明還提供一種CAN自動(dòng)路由方法,涉及上述的CAN自動(dòng)路由系統(tǒng),包括步驟:
S1、開(kāi)啟所述硬件模塊,系統(tǒng)初始化;
S2、用戶(hù)通過(guò)所述自動(dòng)路由模塊進(jìn)行注冊(cè),再通過(guò)所述自動(dòng)鏈路模塊接收或發(fā)送標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù);
S3、所述自動(dòng)路由模塊根據(jù)所述硬件驅(qū)動(dòng)模塊和所述自動(dòng)鏈路模塊的工作狀態(tài)生成相應(yīng)的描述符;所述硬件驅(qū)動(dòng)模塊根據(jù)所述描述符驅(qū)動(dòng)所述硬件模塊接收或發(fā)送數(shù)據(jù)。
在本發(fā)明的CAN自動(dòng)路由方法中,所述步驟S3還包括:
判斷所述硬件驅(qū)動(dòng)模塊和所述自動(dòng)鏈路模塊的工作狀態(tài)是否正常;若是,則生成成功描述符;若否,則生成錯(cuò)誤描述符。
在本發(fā)明的CAN自動(dòng)路由方法中,所述步驟S3還包括:
所述自動(dòng)路由模塊直接將需要發(fā)送的所述數(shù)據(jù)發(fā)送至所述自動(dòng)鏈路模塊;所述自動(dòng)鏈路模塊根據(jù)所述數(shù)據(jù)的長(zhǎng)度大小,對(duì)所述數(shù)據(jù)進(jìn)行分包發(fā)送;
用戶(hù)發(fā)送所述數(shù)據(jù)的接口為:can_write(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要發(fā)送的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)發(fā)送數(shù)據(jù)的長(zhǎng)度。
在本發(fā)明的CAN自動(dòng)路由方法中,所述步驟S3還包括:
所述自動(dòng)鏈路模塊自動(dòng)鏈路接收所述數(shù)據(jù),并將所述數(shù)據(jù)發(fā)送到所述自 動(dòng)路由模塊;所述自動(dòng)路由模塊把接收到的數(shù)據(jù)通過(guò)所述描述符與ECU節(jié)點(diǎn)信息對(duì)應(yīng)進(jìn)行數(shù)據(jù)發(fā)送;
用戶(hù)發(fā)送所述數(shù)據(jù)的接口為:can_read(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要接收的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)接收數(shù)據(jù)的長(zhǎng)度。
實(shí)施本發(fā)明的的CAN自動(dòng)路由系統(tǒng)和方法具有以下有益效果:自動(dòng)實(shí)現(xiàn)底層CAN網(wǎng)絡(luò)協(xié)議的鏈路層協(xié)議,可進(jìn)行有效的封裝,開(kāi)發(fā)者不需要關(guān)心底層鏈路如何實(shí)現(xiàn),大大節(jié)省了開(kāi)發(fā)時(shí)間。自動(dòng)實(shí)現(xiàn)各ECU單元(CAN ID尋址)的自動(dòng)路由供功能,讓用戶(hù)/開(kāi)發(fā)者像網(wǎng)絡(luò)編程一樣簡(jiǎn)單。讓用戶(hù)/開(kāi)發(fā)者實(shí)現(xiàn)硬件的無(wú)關(guān)性,只關(guān)注應(yīng)用層的開(kāi)發(fā)設(shè)計(jì),達(dá)到硬件無(wú)關(guān)性。
附圖說(shuō)明
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,附圖中:
圖1是本發(fā)明CAN自動(dòng)路由系統(tǒng)的系統(tǒng)方框圖;
圖2是本發(fā)明CAN自動(dòng)路由方法的流程方框圖。
具體實(shí)施方式
本發(fā)明針對(duì)的是在現(xiàn)有技術(shù)中未能整體去實(shí)現(xiàn)CAN網(wǎng)絡(luò)的應(yīng)用層、鏈路層,導(dǎo)致需要開(kāi)發(fā)CAN網(wǎng)絡(luò)的廠家設(shè)計(jì)上比較困難,獨(dú)立去做的復(fù)雜度相對(duì)高的問(wèn)題,提供一種CAN自動(dòng)路由系統(tǒng)和方法,能夠自動(dòng)實(shí)現(xiàn)底層CAN網(wǎng)絡(luò)協(xié)議的鏈路層協(xié)議,可進(jìn)行有效的封裝,開(kāi)發(fā)者不需要關(guān)心底層鏈路如何實(shí)現(xiàn),大大節(jié)省了開(kāi)發(fā)時(shí)間。自動(dòng)實(shí)現(xiàn)各ECU單元(CAN ID尋址)的自動(dòng)路由 供功能,讓用戶(hù)/開(kāi)發(fā)者像網(wǎng)絡(luò)編程一樣簡(jiǎn)單。讓用戶(hù)/開(kāi)發(fā)者實(shí)現(xiàn)硬件的無(wú)關(guān)性,只關(guān)注應(yīng)用層的開(kāi)發(fā)設(shè)計(jì),達(dá)到硬件無(wú)關(guān)性。
為了對(duì)本發(fā)明的技術(shù)特征、目的和效果有更加清楚的理解,現(xiàn)對(duì)照附圖詳細(xì)說(shuō)明本發(fā)明的具體實(shí)施方式。
如圖1所示,CAN(Controller Area Network),中文名稱(chēng)為控制器局域網(wǎng)絡(luò),通常稱(chēng)為CAN bus,即CAN總線(xiàn)。是目前在國(guó)際上應(yīng)用最廣泛的開(kāi)放式現(xiàn)場(chǎng)總線(xiàn)之一。CAN網(wǎng)絡(luò)廣泛應(yīng)用于工業(yè)現(xiàn)場(chǎng)。汽車(chē)CAN網(wǎng)絡(luò)通訊目前成為車(chē)輛最穩(wěn)定的局域網(wǎng)通訊系統(tǒng),承載著汽車(chē)各ECU控制單元的控制與通訊。
本發(fā)明提供了一種CAN自動(dòng)路由系統(tǒng),包括:硬件模塊10、硬件驅(qū)動(dòng)模塊20、自動(dòng)鏈路模塊30和自動(dòng)路由模塊40;
硬件模塊10、硬件驅(qū)動(dòng)模塊20、自動(dòng)鏈路模塊30和自動(dòng)路由模塊40依次連接;在本發(fā)明的一優(yōu)選實(shí)施例中,硬件模塊10通常包括CAN網(wǎng)絡(luò)硬件部分,如CAN控制器、收發(fā)器等。
硬件模塊10連接于鏈路層,用于為數(shù)據(jù)傳輸提供硬件基礎(chǔ);系統(tǒng)初始化時(shí),通常首先要打開(kāi)CAN網(wǎng)絡(luò)設(shè)備,包括啟用硬件模塊10。
自動(dòng)鏈路模塊30用于標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù)接收或發(fā)送;對(duì)CAN底層網(wǎng)絡(luò)的數(shù)據(jù)的鏈路實(shí)現(xiàn),主要針對(duì)數(shù)據(jù)多包收發(fā)的自動(dòng)化實(shí)現(xiàn)。
自動(dòng)路由模塊40用于用戶(hù)注冊(cè),并根據(jù)硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)生成相應(yīng)的描述符;實(shí)現(xiàn)系統(tǒng)自動(dòng)路由功能,用戶(hù)只需要?jiǎng)討B(tài)注冊(cè)一個(gè)ECU單元,即CAN ID網(wǎng)絡(luò)節(jié)點(diǎn),CAN自動(dòng)路由模塊就自動(dòng)實(shí)現(xiàn)數(shù)據(jù)的收發(fā)功能。
硬件驅(qū)動(dòng)模塊20用于根據(jù)描述符驅(qū)動(dòng)硬件模塊10接收或發(fā)送數(shù)據(jù)。硬 件驅(qū)動(dòng)模塊20提供了標(biāo)準(zhǔn)的CAN網(wǎng)絡(luò)數(shù)據(jù)接收發(fā)空,CAN網(wǎng)絡(luò)參數(shù)設(shè)置接口,如CAN網(wǎng)絡(luò)的波特率等接口。
進(jìn)一步地,自動(dòng)路由模塊40還用于在硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)正常的情況時(shí)生成成功描述符。即在硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)正常的情況時(shí)自動(dòng)路由模塊40自動(dòng)分派路由接口,并成功返回自動(dòng)鏈路描述符fd到用戶(hù),即系統(tǒng)中唯一動(dòng)態(tài)分派的路由成功標(biāo)識(shí)符,相當(dāng)于套接字描述符。在硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)不正常或產(chǎn)生錯(cuò)誤時(shí)生成錯(cuò)誤描述符。
當(dāng)用戶(hù)需要發(fā)送接收CAN數(shù)據(jù)時(shí),直接操作申請(qǐng)的描述符,并用自動(dòng)路由模塊40成功分派的描述符調(diào)用接口進(jìn)行收發(fā)CAN數(shù)據(jù)。自動(dòng)路由模塊40還用于直接將需要發(fā)送的數(shù)據(jù)發(fā)送至自動(dòng)鏈路模塊30;自動(dòng)鏈路模塊30還用于根據(jù)數(shù)據(jù)的長(zhǎng)度大小,對(duì)數(shù)據(jù)進(jìn)行分包發(fā)送。通常自動(dòng)鏈路模塊30根據(jù)數(shù)據(jù)的長(zhǎng)度大小,按照CAN標(biāo)準(zhǔn)鏈路層協(xié)議對(duì)數(shù)據(jù)進(jìn)行分包發(fā)送,實(shí)現(xiàn)標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù)發(fā)送。
用戶(hù)發(fā)送數(shù)據(jù)的接口為:can_write(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要發(fā)送的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)發(fā)送數(shù)據(jù)的長(zhǎng)度。
自動(dòng)鏈路模塊30還用于自動(dòng)鏈路接收數(shù)據(jù),并將數(shù)據(jù)發(fā)送到自動(dòng)路由模塊40;當(dāng)用戶(hù)需要接收數(shù)據(jù)時(shí),只有用戶(hù)成功注冊(cè)的描述符對(duì)應(yīng)的有效CAN ID才能被有效接收,否則無(wú)法接收到底層的對(duì)應(yīng)用戶(hù)數(shù)據(jù)。自動(dòng)路由模塊40還用于把接收到的數(shù)據(jù)通過(guò)描述符與ECU節(jié)點(diǎn)信息對(duì)應(yīng)進(jìn)行數(shù)據(jù)發(fā)送。即把接收的數(shù)據(jù)通過(guò)描述符與CAN ID的對(duì)應(yīng)關(guān)系進(jìn)行數(shù)據(jù)分發(fā),發(fā)送到對(duì)應(yīng)的 用戶(hù),實(shí)現(xiàn)CAN數(shù)據(jù)的接收。
用戶(hù)發(fā)送數(shù)據(jù)的接口為:can_read(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要接收的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)接收數(shù)據(jù)的長(zhǎng)度。
如圖2所示,本發(fā)明還提供了一種CAN自動(dòng)路由方法,包括上述的CAN自動(dòng)路由系統(tǒng),包括步驟:
S1、開(kāi)啟硬件模塊10,系統(tǒng)初始化;通常首先要打開(kāi)CAN網(wǎng)絡(luò)設(shè)備。在本發(fā)明的一優(yōu)選實(shí)施例中,硬件模塊10通常包括CAN網(wǎng)絡(luò)硬件部分,如CAN控制器、收發(fā)器等。
S2、用戶(hù)通過(guò)自動(dòng)路由模塊40進(jìn)行注冊(cè),再通過(guò)自動(dòng)鏈路模塊30接收或發(fā)送標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù);對(duì)CAN底層網(wǎng)絡(luò)的數(shù)據(jù)的鏈路實(shí)現(xiàn),主要針對(duì)數(shù)據(jù)多包收發(fā)的自動(dòng)化實(shí)現(xiàn)。
S3、自動(dòng)路由模塊40根據(jù)硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)生成相應(yīng)的描述符;硬件驅(qū)動(dòng)模塊20根據(jù)描述符驅(qū)動(dòng)硬件模塊10接收或發(fā)送數(shù)據(jù)。實(shí)現(xiàn)系統(tǒng)自動(dòng)路由功能,用戶(hù)只需要?jiǎng)討B(tài)注冊(cè)一個(gè)ECU單元,即CAN ID網(wǎng)絡(luò)節(jié)點(diǎn),CAN自動(dòng)路由模塊就自動(dòng)實(shí)現(xiàn)數(shù)據(jù)的收發(fā)功能。硬件驅(qū)動(dòng)模塊20提供了標(biāo)準(zhǔn)的CAN網(wǎng)絡(luò)數(shù)據(jù)接收發(fā)空,CAN網(wǎng)絡(luò)參數(shù)設(shè)置接口,如CAN網(wǎng)絡(luò)的波特率等接口。
進(jìn)一步地,
判斷硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)是否正常;若是,則生成成功描述符;若否,則生成錯(cuò)誤描述符。通常在硬件驅(qū)動(dòng)模塊20和自動(dòng)鏈路模塊30的工作狀態(tài)正常的情況時(shí)自動(dòng)路由模塊40自動(dòng)分派路由接口, 并成功返回自動(dòng)鏈路描述符fd到用戶(hù),即系統(tǒng)中唯一動(dòng)態(tài)分派的路由成功標(biāo)識(shí)符,相當(dāng)于套接字描述符。
進(jìn)一步地,步驟S3還包括:
當(dāng)用戶(hù)需要發(fā)送接收CAN數(shù)據(jù)時(shí),直接操作申請(qǐng)的描述符,并用自動(dòng)路由模塊40成功分派的描述符調(diào)用接口進(jìn)行收發(fā)CAN數(shù)據(jù)。自動(dòng)路由模塊40直接將需要發(fā)送的數(shù)據(jù)發(fā)送至自動(dòng)鏈路模塊30;自動(dòng)鏈路模塊30根據(jù)數(shù)據(jù)的長(zhǎng)度大小,對(duì)數(shù)據(jù)進(jìn)行分包發(fā)送;通常自動(dòng)鏈路模塊30根據(jù)數(shù)據(jù)的長(zhǎng)度大小,按照CAN標(biāo)準(zhǔn)鏈路層協(xié)議對(duì)數(shù)據(jù)進(jìn)行分包發(fā)送,實(shí)現(xiàn)標(biāo)準(zhǔn)的CAN鏈路層數(shù)據(jù)發(fā)送。
用戶(hù)發(fā)送數(shù)據(jù)的接口為:can_write(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要發(fā)送的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)發(fā)送數(shù)據(jù)的長(zhǎng)度。
進(jìn)一步地,步驟S3還包括:
自動(dòng)鏈路模塊30自動(dòng)鏈路接收數(shù)據(jù),并將數(shù)據(jù)發(fā)送到自動(dòng)路由模塊40;當(dāng)用戶(hù)需要接收數(shù)據(jù)時(shí),只有用戶(hù)成功注冊(cè)的描述符對(duì)應(yīng)的有效CAN ID才能被有效接收,否則無(wú)法接收到底層的對(duì)應(yīng)用戶(hù)數(shù)據(jù)。自動(dòng)路由模塊40把接收到的數(shù)據(jù)通過(guò)描述符與ECU節(jié)點(diǎn)信息對(duì)應(yīng)進(jìn)行數(shù)據(jù)發(fā)送;即把接收的數(shù)據(jù)通過(guò)描述符與CAN ID的對(duì)應(yīng)關(guān)系進(jìn)行數(shù)據(jù)分發(fā),發(fā)送到對(duì)應(yīng)的用戶(hù),實(shí)現(xiàn)CAN數(shù)據(jù)的接收。
用戶(hù)發(fā)送數(shù)據(jù)的接口為:can_read(fd,buf,len);
其中,fd為系統(tǒng)自動(dòng)分派的有效描述符;buf為用戶(hù)需要接收的數(shù)據(jù)緩沖區(qū)地址;len為用戶(hù)接收數(shù)據(jù)的長(zhǎng)度。
綜上,本發(fā)明自動(dòng)實(shí)現(xiàn)底層CAN網(wǎng)絡(luò)協(xié)議的鏈路層協(xié)議,可進(jìn)行有效的封裝,開(kāi)發(fā)者不需要關(guān)心底層鏈路如何實(shí)現(xiàn),大大節(jié)省了開(kāi)發(fā)時(shí)間。自動(dòng)實(shí)現(xiàn)各ECU單元CAN ID尋址的自動(dòng)路由供功能,讓用戶(hù)/開(kāi)發(fā)者像網(wǎng)絡(luò)編程一樣簡(jiǎn)單。讓用戶(hù)/開(kāi)發(fā)者實(shí)現(xiàn)硬件的無(wú)關(guān)性,只關(guān)注應(yīng)用層的開(kāi)發(fā)設(shè)計(jì),達(dá)到硬件無(wú)關(guān)性。
上面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行了描述,但是本發(fā)明并不局限于上述的具體實(shí)施方式,上述的具體實(shí)施方式僅僅是示意性的,而不是限制性的,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的啟示下,在不脫離本發(fā)明宗旨和權(quán)利要求所保護(hù)的范圍情況下,還可做出很多形式,這些均屬于本發(fā)明的保護(hù)之內(nèi)。