CAN匯流排仲裁問題,節點同時向匯流排發資料,只能收到節

2021-03-03 23:36:59 字數 4834 閱讀 3404

1樓:巨集一點

仲裁是對優先順序進行管理,高優先先發,地優先後發。仲裁不會導致報文丟失。

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

2樓:匿名使用者

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

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

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

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

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

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

3樓:匿名使用者

看了很多有關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協議的網路裡,可以通過傳送地址請求幀,讓所有節點都傳送一次地址宣告幀,從而獲得當前網路中有多少個節點存在,各自的地址是多少。如果有兩個節點的地址有衝突,需要制定地址的仲裁機制來解決。

4樓:匿名使用者

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

5樓:匿名使用者

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

can匯流排通訊中,如果是多節點通訊。多通訊中遇到了問題。問題在補充中: 50

6樓:匿名使用者

首先,can匯流排不分主機,最多是整車廠在網路規劃的時候定義了一個功能比較多的節點,各家車廠不一樣(如閘道器),或者類似powermaster。但是can本身協議裡是不存在主、從的。

其次,樓上說的仲裁延時的問題,can協議本身是考慮到這個問題的,當然按他的方法通過協議延時可以解決,但是既然can協議已經給了我們解決方法那肯定是更科學更有效的,具體的去看can的仲裁吧,你需要一個節點的報文傳送不存在延時,只需要給它分配一個優先順序很高的id即可,當然這得從網路規劃的角度出發,不是這麼簡單說說的。

回到你的問題,你說的主機請求資料,在can中只能是遠端幀(一個遠端標誌位為1,資料場為空的幀),當這個幀出現在匯流排上時,擁有這個id資料的節點就要傳送這個同id的完整幀(遠端幀標誌位為0)。但是只能有一個節點接受這個遠端幀的請求。

這裡強調一個概念,同一個id的幀只能由一個節點傳送,不然可想而知匯流排上都是衝突。

你補充問一下,你想實現什麼效果吧

7樓:匿名使用者

讀can控制器的接收緩衝區的資料即可。注意,要是你下面的節點很多,建議對每一個節點回複資料的時間做一個簡單的協議延時(如根據每個從節點的id來延時),不然匯流排仲裁的時間會很長,影響通訊效率;另外是你的主機處理接收緩衝區的速度要足夠快,不然可能會丟資料(匯流排溢位)。

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

8樓:匿名使用者

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

這才是ack slot真正的含義。

9樓:勝利之

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

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

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

2、結束

3、匯流排仲裁

10樓:系叡雋運乾

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

11樓:匿名使用者

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

can匯流排中 如果有多個節點傳送相同的id, 將會出現什麼樣的錯誤?

12樓:勝利之

會出現仲裁錯誤,因為仲裁是監測id的。如果兩個及以上的節點同時傳送id值一樣的報文,但是資料域內容如果不同,那麼這些節點本身可能認為發生出錯。

從應用層協議的含義上說,id通常包含節點地址等資訊,所以一般不要相同,否則不能區分。

關於can匯流排的id號,遠端幀,有一些問題,迷茫的要死,求高手解答

13樓:匿名使用者

問題1: can資料域都是事先定義好了的,必然會包含can.bin的資料,node b只需要響應遠端幀即可正確迴應node a想要的資料了。

問題2: 不是節點優先順序不同,而是資料幀的優先順序不同,每個資料幀的仲裁域中包含id,優先順序就是比較id的大小。兩個節點同時傳送資料幀和遠端幀,也是靠正常的仲裁機制來判斷髮送順序的,沒有衝突。

如果某一時刻資料幀和遠端幀的id相同,那麼資料幀的優先順序高於遠端幀。

問題3: 問題2 已回答。

14樓:匿名使用者

1.你可以不發遠端幀,發資料幀,然後在資料部分指定要求的檔案。或者發遠端幀,但是遠端幀id的謀幾位規定為要求的檔案號

15樓:小連

我們工作一年多,遠端幀在實際是沒有應用的。

三個問題結合到一起回答

首先說下什麼是遠端幀,最新iso11898 -2015版,frame that requests the tran**ission of a dedicated data frame   請求專用資料幀傳輸的幀。a傳送給b一幀遙控幀報文(同時c/d/e都會收到,但不作處理),b會發給a一幀資料幀報文。(幀的結構如下圖,資料幀比遙控幀多一個資料段)

id是一般是主機廠自定義,比如 $0-500是 資料幀id 500-600是遠端幀id 600-700診斷id(實際用不到遠端幀,都是資料幀)。非同時傳送時誰先發出,誰先發;同時發出時,id越小優先順序越高,無論是什麼幀!

id只是幀的一部分,資料段也是幀的一部分(如圖,看幀的結構)。

幀裡面具體是什麼呢?是二進位制數,比如11111111111,前三個1代表id 後三個1代表資料。資料幀的三個1也是主機廠自定義的,如can矩陣。

有關can匯流排仲裁

16樓:勝利之

1、如果這個節點發得足夠快,就是一幀和一幀之間幾乎不留空隙那麼有可能。不過能否完全達到效果不好說。

2、通過應用層的管理來實現,用定時的辦法傳送之類的。硬體層基本無法去完全的做到,即使有優先順序的區分。

3、如果匯流排資料負載不是很大的情況,可以不考慮被第二個節點岔開的影響,因為兩個點的id畢竟不同,所以接收節點的軟體自然能夠以此為依據分開兩個節點的資料。廣州研煌——can系統

can匯流排節點id相關問題,遠端幀啊,資料幀啊

17樓:匿名使用者

問題一。假設a點為接收方,如果我設定了id濾波,那麼不是所有的id都能接收,

只有符合我的需要的id才能接收,那不就相當id連帶了目標mac,而卻每個節點id都是不一樣的,根據id值你就能知道是哪個節點傳送過來的資料了。這與接受資料時需要仲裁併不矛盾啊。

問題四很簡單解決。在b節點你設定報文濾波就行了。遮蔽掉c節點的id,這樣就算c節點傳送報文。b也不會接受的

CAN匯流排的仲裁方式具體是什麼CAN匯流排仲裁

匯流排的仲裁方式 搶奪,高階的比低階優先接受。首先,你要明確一個概念,can匯流排上的節點都是自顧自的傳送報文,搶奪匯流排資源的。一個can節點在傳送報文的同時也在接收匯流排上的資訊,每個報文都是從id先開始傳送,並且通過id判斷優先順序,當它發現接收到的資料與它傳送的不一致時就退出傳送,等待一會。...

CAN匯流排節點ID相關問題,遠端幀啊,資料幀啊

問題一。假設a點為接收方,如果我設定了id濾波,那麼不是所有的id都能接收,只有符合我的需要的id才能接收,那不就相當id連帶了目標mac,而卻每個節點id都是不一樣的,根據id值你就能知道是哪個節點傳送過來的資料了。這與接受資料時需要仲裁併不矛盾啊。問題四很簡單解決。在b節點你設定報文濾波就行了。...

CAN匯流排上面其中節點假如CANH與CANL短路了

can匯流排的分類有高速can和容錯can的區分,高速can h和l短路通訊不能正常進行,容錯can可以保持通訊 汽車上的can匯流排,路正常時,用普通萬用表測得的電壓應該是多少 can h can l can匯流排的電氣特性說的很清楚了,有訊號的時候can h 3.5伏,can l 1.5伏,沒有...