2013-09-30 27 views
0

我正在嘗試與USB至CAN設備進行通信。我使用的是Canopen.net API,我並沒有完全理解它下面的所有類,但是從我閱讀的內容來看,我明白cCob是我需要使用的類。 我設法連接到設備,創建一個cCob實例(使用CreateCOB方法)併發送數據。CANopen API COBID

我現在面臨的問題是COBID限制。我不知道爲什麼,但看起來API不允許我使用大的COB-ID(32位)。 m_ErrorCode是:「kCobAlreadyExist」(它不應該來自我所知道的)。

也許我錯了,我應該在對象字典中使用SDO類,所以我很欣賞一個正確的通信方式的完整基本示例。

+0

你使用的是大型網絡,你需要32位COD-ID嗎?請參閱http://en.wikipedia.org/wiki/Canopen#Communication_objects。你看過http://www.canfestival.org/嗎?有一些例子,你可以查看。 https://github.com/rbei-etas/busmaster可用於嗅探CAN通信並查看CANopen幀是如何構建的。 – yegorich

回答

0

讓我先簡要介紹一下COBID:它是CAN消息的標識符部分。這是功能代碼和節點ID的組合。基本上,標識符有兩種類型,即標準,即11位大小和擴展,即29位大小。

CANopen協議棧很少使用29位標識符幀格式。儘管您分配了32位數據類型,但標識符的最大長度是29位。

CANopen的描述特定的一組,如果使用的是一個堆棧的CANopen然後參照其文檔,以便決定取決於消息的類型標識符(NMT,SYNC,心跳,EMCY等)

所以規則您將更清楚如何使用這些API。

+0

*功能碼*僅用於11位標識符,7位節點ID和4位用於功能碼(不適用於29位標識符)。 –