基于CAN總線的modbus通信設(shè)計(jì)_第1頁(yè)
基于CAN總線的modbus通信設(shè)計(jì)_第2頁(yè)
基于CAN總線的modbus通信設(shè)計(jì)_第3頁(yè)
基于CAN總線的modbus通信設(shè)計(jì)_第4頁(yè)
基于CAN總線的modbus通信設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于CAN總線的modbus通信設(shè)計(jì) 摘要:CAN總線是由德國(guó)BOSCH公司開發(fā)了的,其主要用于汽車計(jì)算機(jī)控制系統(tǒng),而在工業(yè)控制領(lǐng)域較少適用,在工業(yè)領(lǐng)域用的最多的是RS485總線。CAN總線較RS485總線具有網(wǎng)絡(luò)各節(jié)點(diǎn)之間的數(shù)據(jù)通信實(shí)時(shí)性強(qiáng),開發(fā)周期短,已形成國(guó)際標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線等優(yōu)點(diǎn)。因此CAN總線是比較有前途的現(xiàn)場(chǎng)總線之一,在工業(yè)控制領(lǐng)域代替RS485是有可能的。 為了能簡(jiǎn)單地應(yīng)用CAN總線代替RS485總線,如果采用比如CANopen等協(xié)議使得設(shè)備變得復(fù)雜化,那么有沒有簡(jiǎn)單點(diǎn)的協(xié)議?很多做過(guò)工業(yè)設(shè)備的工程師都熟悉MODBUS協(xié)議,在RS485總線上跑的最多的協(xié)議就是MODBUS,如果我們?cè)贑AN總線上運(yùn)行MODBUS協(xié)議,那么做過(guò)RS485的工程師就能很快地轉(zhuǎn)移過(guò)來(lái),減少了開發(fā)難度。所以本文就以CAN總線上跑MODBUS協(xié)議為目的對(duì)數(shù)據(jù)網(wǎng)絡(luò)層協(xié)議進(jìn)行設(shè)計(jì)。 概念:MODBUS有主從概念,CAN總線支持多主,在這里我們把主機(jī)叫做客戶端,從機(jī)叫做服務(wù)器。在CAN總線上采用客戶端服務(wù)器的概念。 在進(jìn)行協(xié)議介紹前先對(duì)CANMODBUS進(jìn)行簡(jiǎn)單的介紹。 MODBUS:閱讀過(guò)MODBUS協(xié)議的人都知道m(xù)odbus有ASCII和RTU模式,其中RTU模式用的較多,一個(gè)數(shù)據(jù)包在網(wǎng)絡(luò)上傳輸我們必須知道包的開始和結(jié)束,在RTU模式中數(shù)據(jù)包是以至少3.5個(gè)字符的靜默時(shí)間開始和結(jié)束的,如果信息結(jié)束前存在超過(guò)1.5個(gè)字符以上的間隔時(shí)間則出錯(cuò)。為了檢測(cè)這些時(shí)間間隔,在程序上將變得很被動(dòng)。ASCII雖然有專用的開始結(jié)束標(biāo)志符,但是ASCII需要把一個(gè)字節(jié)數(shù)據(jù)傳換為兩個(gè)字符發(fā)送所以其效率低。所以還是得采用RTU模式,但得根據(jù)CAN總線的特點(diǎn)解決數(shù)據(jù)包開始結(jié)束標(biāo)志的定義。 CAN總線:CAN總線的數(shù)據(jù)傳輸是以幀為單位的,一個(gè)幀包含標(biāo)識(shí)符、數(shù)據(jù)段CRC等,標(biāo)識(shí)符表示該幀的發(fā)送優(yōu)先級(jí),數(shù)據(jù)段包含實(shí)際的數(shù)據(jù),數(shù)據(jù)長(zhǎng)度從1到8字節(jié),CRC對(duì)該幀進(jìn)行校驗(yàn),因?yàn)閹邪藬?shù)據(jù)校驗(yàn)功能,所以在CAN上跑modbus就不需要再對(duì)數(shù)據(jù)進(jìn)行CRC校驗(yàn)。在這里我們看到CAN總線是有優(yōu)先級(jí)這個(gè)概念,但是沒有出現(xiàn)像modbus這樣有地址的概念,CAN總線上標(biāo)識(shí)符段表示的是該幀的優(yōu)先級(jí),它面向的是數(shù)據(jù),而modbus面向的是設(shè)備,每個(gè)數(shù)據(jù)包中都有地址,如果我們把地址放在CAN幀的數(shù)據(jù)段中那么所有設(shè)備都必須接收每一幀,然后對(duì)數(shù)據(jù)進(jìn)行解析,如果網(wǎng)絡(luò)負(fù)載比較大的是時(shí)候,這對(duì)設(shè)備不利。CAN控制器一般都能對(duì)特定的標(biāo)識(shí)符段進(jìn)行過(guò)濾,那么我們?yōu)槭裁床荒馨褬?biāo)識(shí)符段作為設(shè)備的地址,然后設(shè)備對(duì)特定的標(biāo)識(shí)符進(jìn)行過(guò)濾,這樣就減少了設(shè)備的負(fù)擔(dān)。但是如果標(biāo)識(shí)符段作為目的地址,那么CAN總線上就不能有兩個(gè)主機(jī),應(yīng)為CAN總線規(guī)定不能有兩個(gè)相同標(biāo)識(shí)符的幀同時(shí)發(fā)送。既然標(biāo)識(shí)符符不能作為目的地址,那么就實(shí)現(xiàn)不了設(shè)備對(duì)數(shù)據(jù)的過(guò)濾。我的解決辦法是把幀的標(biāo)識(shí)符段分為兩部分,一部分為發(fā)送方地址,另一部分為接收方地址,其中接收方地址在標(biāo)識(shí)符的高端。這樣我們就能通過(guò)表標(biāo)識(shí)符段知道這幀數(shù)據(jù)是誰(shuí)發(fā)給誰(shuí)的,對(duì)于接收方它通過(guò)設(shè)置過(guò)濾器只接收表識(shí)符高端數(shù)據(jù)為自己地址的幀,這樣就解決了CAN總線中地址的概念。這個(gè)地址還表示的設(shè)備的優(yōu)先級(jí),地址越小優(yōu)先級(jí)就越高,接收方地址和發(fā)送方地址就決定這幀的發(fā)送優(yōu)先級(jí)。標(biāo)識(shí)符段分為標(biāo)準(zhǔn)幀和擴(kuò)展幀,標(biāo)準(zhǔn)幀的標(biāo)識(shí)符為11bit,擴(kuò)展幀的標(biāo)識(shí)符為29bit,按照接收方地址加發(fā)送方地址的分配方法標(biāo)準(zhǔn)幀的地址范圍為0~31,共計(jì)32個(gè)地址,如果用擴(kuò)展幀的來(lái)分配地址范圍為0~16383,共計(jì)16384個(gè)地址。標(biāo)識(shí)符接收方地址發(fā)送方地址 因?yàn)橐粠疃嗄馨l(fā)送8字節(jié)數(shù)據(jù),因此要發(fā)送超過(guò)8字節(jié)的數(shù)據(jù)就必須使用多幀,為了能適應(yīng)多任務(wù)環(huán)境,我們?cè)诎褞臄?shù)據(jù)段的前兩自己數(shù)據(jù)用作特殊用途:第一字節(jié)表示幀數(shù)據(jù)的ID,其bit7為1:表示服務(wù)器返回的數(shù)據(jù)幀,為0:表示客戶端請(qǐng)求的數(shù)據(jù)幀;第二字節(jié)表示著一幀在這個(gè)數(shù)據(jù)包中的相對(duì)為位置,其bit7為1:表示這是最后一幀,因此我們可以根據(jù)這一幀就能計(jì)算出此次要傳輸?shù)臄?shù)據(jù)字節(jié)數(shù),有這兩字節(jié)的數(shù)據(jù)我們就能把一個(gè)數(shù)據(jù)包分成多個(gè)幀發(fā)送出去,然后在接收方根據(jù)這兩字節(jié)的信息把數(shù)據(jù)包從新組裝。由第二字節(jié)信息我們可以計(jì)算出一次能傳輸?shù)臄?shù)據(jù)包的大小為128*6=768字節(jié)。你也許會(huì)問(wèn),那個(gè)ID數(shù)據(jù)有什么用,為了支持多任務(wù)處理,一個(gè)客服端可能有多個(gè)任務(wù)同時(shí)把數(shù)據(jù)發(fā)送到同一個(gè)服務(wù)器,這個(gè)ID就是區(qū)分不同任務(wù)的,客戶端發(fā)送到的時(shí)候分配一個(gè)空閑的ID然后以此ID把數(shù)據(jù)發(fā)送出去。服務(wù)器接受到同一個(gè)客服端發(fā)來(lái)的不同ID的數(shù)據(jù)包,那么服務(wù)器就根據(jù)ID的不同分別處理;回復(fù)客戶端時(shí)把ID的最高位置1,然后發(fā)送回去,客服端收到發(fā)回復(fù)后根據(jù)ID把數(shù)據(jù)分發(fā)給對(duì)應(yīng)的任務(wù)。一個(gè)設(shè)備可以是客戶端也可以是服務(wù)器,還可以包含兩者,那么CAN接收服務(wù)程序就必須明確接收到的數(shù)據(jù)是自己收到的回復(fù)還是別人的請(qǐng)求,因此ID的最高位就是區(qū)分?jǐn)?shù)據(jù)方向的。在這里規(guī)定ID為0表示無(wú)效ID,故ID的取值范圍為1到127。因此能同時(shí)區(qū)分同一個(gè)設(shè)備的127個(gè)不同數(shù)據(jù)包。在回頭想想采用了這個(gè)結(jié)構(gòu)后也就解決了MODBUS數(shù)據(jù)包的開始和結(jié)束的問(wèn)題。那么MODBUS就可也在CAN總線上運(yùn)行了。在CAN總線上已經(jīng)包含了地址和CRC數(shù)據(jù),因此MODBUS上就不在需要地址段和CRC段。另外一個(gè)幀中包含6個(gè)數(shù)據(jù),因此大多數(shù)MODBUS數(shù)據(jù)包都能夠通過(guò)一幀發(fā)送出去?;贚PC2292的CAN通信程序設(shè)計(jì)CAN驅(qū)動(dòng)層:CAN驅(qū)動(dòng)層主要做的工作是初始化設(shè)備,收發(fā)數(shù)據(jù),下面是集CAN功能函數(shù)的結(jié)構(gòu)體typede

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論