CANOpen中SDO和PDO的COB ID理解

2021-09-19 12:21:42 字數 1063 閱讀 5153

canopen用來收發資料的通訊物件有sdo(service data object)和pdo(process data object)

sdo使用物件字典的index和subindex來訪問can節點的物件字典,可以讀或者寫。而pdo則不使用index和subindex,它是兩個can節點間約定好傳輸的資料內容對應哪些物件字典索引,收到資料後就直接讀寫相應的物件字典索引裡的值。

由於sdo(常規)需要用到index和subindex,所以一次最多傳輸4個位元組,而pdo一次最多可以傳輸8個位元組。

另外,sdo還有很多其它傳輸功能,這裡就不細說了,有興趣的可以看官方spec。

pdo有2種,tpdo和rpdo,乙個用來傳送,乙個用來接收。pdo通訊引數裡需要設定cob-id。

對於tpdo來說,其通訊引數中的cob-id是自身的cob-id,當傳送tpdo時用來表明這個tpdo是誰發出的。

對於rpdo來說,其通訊引數的cob-id是傳送方的cob-id,用來表示自己只接受某個can節點發過來的tpdo。

sdo中的cob-id有2個,分為:

乍一看有點暈,如果我們換個角度思考下就容易理解了,假如can節點a通過sdo去訪問can節點b,那麼a就是client,b就是server。

這樣在a的物件字典裡,設定client==>server的cob-id為b的cob-id

而a的server==>client的cob-id怎麼設定呢?當a傳送sdo給b時,b收到sdo後會回傳乙個sdo給a來表示應答。之前說了,a訪問b,a是client,b是server,現在b回傳乙個應答sdo給a,那麼路徑就是server==>client,這樣對於a來說,其server==>client的cob-id還是b的cob-id,用來表示收到的應答sdo是來自server的。

可能會想到b的這兩個cob-id幹嘛去了呢,對於b來說,只有b是client時才會用到這2個cob-id,如果b通過sdo去訪問a,那麼b的client==>server和server==>client的cob-id就是a的cob-id了。

舊文備份 CANopen協議中SDO服務

sdo是服務資料物件介面 service data obiect 的縮寫,顧名思義提供服務資料的訪問介面,服務資料就是一些實時性要求不高的資料,一般是指節點配置引數,因此,sdo一般用來配置和獲得節點的配置引數。其優先順序只比心跳 heartbeat 高。sdo既然稱之為服務,那就要有服務的提供者和...

CanOpen通訊中SDO的使用問題

引數txsdo rxsdo 601 581這些引數都是相對於哪邊來講的。txsdo和rxsdo都是相對於產生sdo報文的節點來講的,比如主節點要寫資料到從節點,它發出rxsdo 600 serverid rx表示要接收資料的意思,從節點發出txsdo 580 clientid tx表示要發出資料的意...

舊文備份 CANopen協議PDO的幾種傳輸方式

由於pdo所傳輸的資料內容是無協議的且分配的識別符號範圍較sdo靠前,因此,其效率和優先順序都是較高的,通常用於實時過程資料的傳輸.pdo是生產 消費型別的通訊方式,資料只有乙個生產者 傳送 但是消費者 接收 可以有多個,生產者和消費者事先都已知道資料的型別和內容 通過設定pdo對映來管理 對pdo...