CAN匯流排怎麼實現一各節點傳送多各節點接收,應答機制,向大神

2021-03-28 19:37:50 字數 5087 閱讀 3846

1樓:匿名使用者

ack slot只有一個bit,而接下去的ack delimiter始終為隱性(我們可認為是1),當資料到達ack slot的時候,所有的節點都會傳送顯性位(我們可以認為是0),而傳送者在ack這個時間裡保持隱性位(即傳送者在傳送的時候ack slot 為1),這時傳送者會檢測匯流排上的ack時間內的訊號,如果是0,則表示正確,如果是1,表示有錯誤。如果當中有某一個節點在ack slot填入隱性位,則匯流排上同樣還是顯性位電平,故只要匯流排上有一個節點正確接收到資料,則ack slot就會被填入顯性電平;那麼,接收錯誤的節點如何來告知傳送者此次傳送不成功呢?這時候就要用到can的錯誤幀,當一個接收者收到錯誤的資料的時候,它立即開始傳送一個錯誤幀,則接下去匯流排上的訊號就是這個錯誤幀,其它的節點和傳送者也都會收到這個錯誤幀,那所有的節點都知道出錯了,接收者會丟掉此次訊息,而傳送者會試圖重發此次訊息。

這才是ack slot真正的含義。

2樓:勝利之

can匯流排傳送,就是已廣播的形式發出的(多節點接收)。

1、當接收器正確地接收到有效的報文,接收器就會在應答間隙(ack slot )

期間(傳送ack訊號)向傳送器傳送一「顯性」的位以示應答。

2、結束

3、匯流排仲裁

3樓:系叡雋運乾

首先你得保證你的時序正確,其它18b20是否能可靠讀寫,時序沒問題,檢查連線,連線沒問題,那就是它o了。

4樓:匿名使用者

樓主解決了麼?我也很困惑啊

請問can匯流排上一個節點能用兩個id號傳送訊息嗎,會不會用一個id號傳送完,再換個id號就發不出去了/

5樓:匿名使用者

首先我覺得你對can匯流排的理解上有點偏差,can匯流排上傳送的報文是根據報文資訊重要性和實時性來定義優先順序的,其次can匯流排的報文識別符號(也就是你所說的id)都是不同的,這個就是你軟體定義的一個識別符號的報文對應哪些節點要接收。can匯流排節點不存在物理ip地址,它所謂的ip地址(叫識別符號)只是和報文內容有關,如果一個節點要連續傳送兩個不同的報文前提是第二個報文的優先順序比其他節點同時想要傳送的報文高。具體想要了解具體的匯流排競爭規範可以追問~~~·

can 匯流排 上,如果2個節點id號一樣,先後傳送資料後怎麼辨別匯流排上出現了兩個相同id?

6樓:匿名使用者

雖然這樣的應用在can的規範裡沒有明確禁止,但是絕對不建議這樣設計網路規劃,這樣會為後續帶來的諸如升級等十分複雜的問題,也影響網路的穩定。

現在回答補充問題,首先你要明確id是賦給幀的,不是直接給節點的,只是某節點知道自己要接收某個id的幀。匯流排上的節點來說它只管取匯流排上他應該取的id的幀,並不管是誰發的。

即使是遠端幀,發出請求的節點在獲得相應時也僅僅是根據幀id判定,並不影響其他節點的接收。

再回到開始,首先這樣的網路規劃是非常不合理的,等於是網路上出現了a和b兩個對某一幀功能相同的節點,完全沒必要,如果你要更新某個訊號,只需讓a節點重新傳送新的即可,如果更新的訊號是通過b節點模組更新的,也只需先通過b向a傳送一個幀更新某個訊號,然後a再重新傳送更新的幀。

如果你兩個節點關聯同一個幀,以後加入新節點和升級改動網路的時候會多一倍的工作量,而且再遠端幀的響應中,同id多響應很容易出現問題。

總之一句話,我們要從匯流排的角度去看待can,不要從節點的角度出發

7樓:匿名使用者

看了很多有關can匯流排的提問,都在糾結於「你傳送我接收」這種通訊模式的討論,這個實際上是對can匯流排很大的誤解。

can匯流排通訊介質就是一高一低兩條線,根據兩線之間的電壓差來判斷當前傳送的訊號是0或1,所有節點都並聯到這兩根線上,從can的基本通訊來說(can 2.0b,或者iso11898),所有節點都是沒有地址這個說法的,大家要傳送資訊,只需往兩根線上加電壓。從can的鏈路層可以看出,如果兩個相同id的can幀同時發出來的話,那就只能看誰先發誰就有優先權。

單從這裡是看不出這個can幀來自哪個節點的。

那為什麼大家會看到很多can協議都會提到「地址」的概念呢?那是因為can 2.0a或b以及iso11898只定義了can的基本協議,對於很多應用場合是遠遠不夠,所以各個廠家根據各個行業的應用又制定高層協議(也叫上層協議),就是在can 2.

0和iso11898的基礎之上,對can的id重新進行了包裝,比如sae j1939協議就對擴充套件幀的29位id進行重新定義,將其中其中兩個位元組定義為pf和ps,合成為pgn,還有一個位元組定義為sa,就是源地址。這樣j1939發出來的can幀裡面就有所謂的源地址的說法,這樣在樓主所說的這個情形就可以分辨出來這個can幀的**了。

另外在j1939協議的網路裡,可以通過傳送地址請求幀,讓所有節點都傳送一次地址宣告幀,從而獲得當前網路中有多少個節點存在,各自的地址是多少。如果有兩個節點的地址有衝突,需要制定地址的仲裁機制來解決。

8樓:匿名使用者

can匯流排上的每個節點傳送的幀資訊都有自己的id,接收節點會根據這個id來判斷是不是給自己的資訊。因為id是人為定義的,做系統時不會出現有相同id的情況。

9樓:匿名使用者

沒有看到實際情形不好說明白,一般想象應該是這樣的:對於操作應該物件可以很方便的觀察到電源的共給迴路,把這個去除之外,餘下的應該就是通訊線路,多觀察

can匯流排通訊接收到的id不完全正確。求助!!!

10樓:匿名使用者

匯流排沒有那麼智慧,實際上a1 a2 a3三個節點都可以接收到匯流排上的資料,只是在接收的同時,三個節點硬體上的過濾器(一般通過軟體在這個地方設定節點各自的arbitration id)會根據各自設定的arbitration id與匯流排上接收到的id做出比較,比較一致則對該幀資訊作出迴應,接收不一致則會捨棄該幀資訊等待接收新的資訊。

型號一樣不代表id就是一樣的。can匯流排各個節點之間進行通訊是根據各個節點不同id對資料幀進行接收反應的。匯流排上每個節點的id都是不同的,這個可以通過軟體上程式設計設定,有些儀器上好像也可以自己通過手動寫進去。

11樓:牛xx的小

can擴充套件幀最多支援29位id,那麼你的id不能超過29,最大id也就是1fff fffff 傳送時將id<<3,接收進再還原即可!

大神,你好!我有幾個關於can匯流排的問題問你,比如說的匯流排電平值怎麼確定的?仲裁失敗的報文怎麼處理?

12樓:匿名使用者

你好,偶然間發現有人找我,很榮幸。大神愧不敢當,只是接觸過一些can匯流排方面的東西,可以互相**一下。

can匯流排是一種雙絞線,他的電平值是一種差分電壓,也就是說匯流排電平值是雙絞線兩根線電平的差值,一般制定can協議的時候會定義好,如果差分電壓高於某個值(自己定義)就表示當前匯流排是顯性狀態,用邏輯0表示。

只要匯流排空閒,任何單元都可以開始傳送報文。如果2 個或2 個以上的單元同時開始傳送報文,那麼就會有匯流排訪問衝突。通過使用識別符的位形式仲裁可以解決這個衝突。

仲裁的機制確保資訊和時間均不會損失。當具有相同識別符的資料幀和遠端幀同時初始化時,資料幀優先於遠端幀。仲裁期間,每一個傳送器都對傳送位的電平與被監控的匯流排電平進行比較。

如果電平相同,則這個單元可以繼續傳送。如果傳送的是一隱性電平而監控視到一顯性電平,那麼該單元就失去了仲裁必須退出傳送狀態。仲裁競爭失敗的節點,必須等匯流排空閒時,參與下一次仲裁競爭,直至競爭成功才能把報文傳送出去。

51微控制器運用can匯流排的通訊協議 急!!!!!!!!!!

13樓:匿名使用者

首先canbus是問答式的通訊方式報文最大長度11char1仲裁場(共12位)

bit10 bit9 bit8 bit7 bit6功能編碼

bit5 bit4 bit3

目的地址

bit2 bit1 bit0

源插地址

rtr遠端幀

2.控制場

ide r0 dl3 dl2 dl1 dl00 0 資料長度

3.資料場

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

資料幀資料(最長8組)

應答時仲裁場目的地址源地址交換,就是目的地址就是你回答的詢問報文中的原地址,當然原地址就是你地址 485匯流排的通訊距離也在300m以上!485的通訊協議比較靈活!可以自己定值問答式協議!

可參考通訊中常用的同步頭+資料長度+效驗的格式自己設計,

例如:採用0xeb 0x90 同步頭

可以給你一份我做過的協議!自己分析一下!不明白給我發郵件!llzyong@sohu.***

14樓:匿名使用者

15樓:匿名使用者

到這了看看把

很全 不知道.看看高手怎麼回答?

16樓:匿名使用者

can線不要太長.可能出的問題就是出在你的線問題上,最多就1米的資料傳輸.還有就是add-模組地址編碼。

如果要解決的話就測到自身故障時,將切斷輸出,退出通訊,並向上位機報警,同時發出聲光報警.自訂can高層協議問題,解決的辦法就是:規範can2.

0a規定標準的資料幀有11位識別符號,使用者可以自行規定其含義,將所需要的資訊包含在內。在充電機系統中,每一個節點都有一個唯一的地址,地址碼和模組一一對應,通過撥碼開關設定,匯流排上資料的傳送也是根據地址進行的。由於本系統規模較小,節點數少於32個,因此為每個模組分配一個5位的地址碼,同一系統中地址碼不得重複,系統初始化時由外部引腳讀入。

將識別符號id9-id5定義為源地址,id4-id0定義為目的地址,本協議中從模組的目的地址全填0,表示資料是廣播資料,所有節點都可接收,主模組中目的地址根據要進行通訊目的模組的地址確定

這樣的情況出現還不好的話,兄弟.換了吧.沒有辦法了,

17樓:匿名使用者

我做過最多就1米的資料傳輸,沒有做過300米的

18樓:百度使用者

到這了看看把很全

19樓:匿名使用者

不知道.看看高手怎麼回答?

can匯流排在所有節點的優先順序都是唯一的,所以每次都會讓高優先

帶來的問題 如果高優先順序的一直髮送,低優先順序的報文無法傳送,通訊上不會有問題,對應用的影響較大。解決 控制所有報文的傳送時間間隔。讓所有報文都有機會發出。can匯流排報文的優先順序是如何確定的?詳細解答 樓上對了一半 只有摩托羅拉格式 是id越小優先順序越高 英特爾格式 反之 由傳送資料的報文中...

旅遊景區各節點簡介要怎麼寫

抓住最特色的部分 重點渲染一下 突出亮點 不要面面俱到 最吸引人的景點 關於旅行學習的句子 1 金錢決定旅行的長度,眼界決定旅行的寬度,心靈決定旅行的深度。2 要麼讀書,要麼旅行,身體和靈魂,必須有一個在路上。豆瓣 3 能夠走路,是世上最美之事。何處皆能去得,何樣景緻皆能見得。心中有些微煩悶,腹中有...

我們一般使用的CAN匯流排是CAN2 0A還是CAN2 0B

通常使用can2.0a,匯流排裝置過多使用can2.0b 什麼是can2.0?30 我們在bai做那套系統的時候,參考du了can bus的思想,zhi 但是最後全dao都是自己做的 除了回232 485轉換以外 直接答用串列埠線把所有的微控制器串聯起來,形成匯流排型網路。此外,我們的網路是單工的,...