CANopen笔记1
CAN現場總線只定義了OSI網絡模型的第一層(物理層) 和第二層(數據鏈路層) ,而這兩層一般已被CAN硬件完全實現了。由于沒有規定應用層,本身并不完整,需要一個高層協議來定義CAN報文中的11/29位標識符和8字節數據的使用。而且,隨著CAN總線的廣泛應用,國內外很多公司都開發出使用CAN總線的控制設備,為了使各種CAN設備可以互相兼容,需要一個開放的、標準化的高層協議來實現各種CAN設備進行標準的、統一的通訊。
CANopen協議的子協議——實時伺服驅動和運動控制協議(CiA DSP402)是專門針對驅動裝置和運動控制裝置等運動控制系統的協議規范,該協議定義了伺服驅動器、變頻器和步進式電機控制器的功能特性,它還指定了多種操作模式和相應的組態參數。CANopen協議的特點尤其是 DSP402 子協議的針對性決定了其適用于分布式運動控制系統。CANopen協議目前還沒有開放的協議源代碼,用戶使用該協議時可以選擇購買或者根據自己的需求進行編程實現。
- CANopen和CAN報文關系
CAN 報文由7個不同的位域組成,而CANopen就是規定其中的仲裁域(11 位標識符) 和數據域(8 字節數據) 的使用情況
- 術語
COB —— 通訊對象,在 CAN 網絡上的一個傳輸單元。Communication object; a CAN message
SDO ——?服務數據對象,一種COB。主要用來在設備之間傳輸大的低優先級數據,典型的是用來配置CANopen網絡上的設備。?
PDO ——?進程數據對象,一種COB。用來傳輸實時數據,比如控制命令、給定值和實際值。
EDS?——?電子數據表。 EDS 文件包含關于節點及其對象字典的信息。
NMT ——?網絡管理。它負責CAN 網絡上的初始化、配置和故障處理。
OD ?—— 對象字典。對象字典是所有數據結構的集合,這些數據涉及設備的應用程序、通信以及狀態機,對象字典利用對象來描述CANopen設備的全部功能。對象字典位于通信層和用戶層之間,它的作用主要是為用戶提供服務接口。
- COB-ID
CANopen 是一個基于 CAN (控制局域網)串行總線系統和 CAL( CAN 應用層)的高層協議。?CANopen 的核心概念是設備對象字典( OD: Object Dictionary),CANopen 通訊通過對象字典( OD)能夠訪問驅動器的所有參數。
COB-ID(通訊對象標識符)分配:
The type of COB transmitted is indicated in the arbitration field of the message, and thereby?determines its priority. 注意:PDO/SDO 的發送/接受是由( slave)CAN節點方觀察的。即要發送SDO數據幀給設備(如驅動器),COB應為SDO-Receive類型。
- SDO
SDO 用來訪問一個設備的對象字典。訪問者被稱作客戶 (client),對象字典被訪問且提供所請求服務的 CANopen 設備別稱作服務器(server)??蛻舳说?CAN 報文和服務器的應答CAN 報文長度為8個字節(注意不是所有的數據字節都包含有效信息,不夠8字節的要補0)。SDO主要用于CANopen主站對從節點的參數配置。服務確認是SDO的最大的特點,為每個消息都生成一個應答,確保數據傳輸的準確性。When using SDOs, it is important to remember that:?An SDO has a lower priority than a PDO;An SDO session is not complete until it is confirmed.
SDO的通訊原則很簡單,發送方(客戶端)發送CAN-ID為600h+Node-ID的報文,其中Node-ID為接收方(服務器)的節點地址,數據長度均為8字節;接收方(服務器)成功接收后,回應CAN-ID為580h+Node-ID的報文。這里的Node-ID依然是接收方(服務器)的節點地址,數據長度均為8字節。如下圖所示。
?
SDO 有 2 種傳送機制:
1. 快速傳送(Expedited transfer) : ? 最多傳輸 4 字節數據
2. 分段傳送(Segmented transfer): 傳輸數據長度大于 4 字節
最常用最常見的SDO協議是快速SDO,所謂快速,就是1次來回就搞定。前提是讀取和寫入的值不能大于32位。通過快速SDO,可以直接對CANopen節點的對象字典中的值進行讀取和修改,所以在做參數配置之外,也經常作為關鍵性數據傳輸之用。比如CANopen控制機器人的電機轉動角度時,就使用SDO來傳輸,保證可靠到達。當需要傳輸的值超過32位時,就不能使用快速SDO傳輸。必須使用普通SDO進行分幀傳輸。在應用中較少用到,一般用于CANopen節點的程序固件升級,或者做網關轉換MVB總線之類數據最大可達256位的應用。
讀指令的詳細信息參考DS-301協議中的Chapter4.3 Initiate SDO Upload Protocol;寫指令參考Initiate SDO Download Protocol.
比如讀取設備對象字典0x1000處的內容(假設為32位數據0x00020192),發送的數據格式如下:
返回數據格式如下:
下面是寫指令的例子(假設設備節點地址為1,COB-ID = 功能碼 + 節點地址),在對象字典0x607F處寫入數據0x50000。0x22為SDO命令,具體代表的意思要參考DS301手冊
====================================================================================================================
注意:CANopen使用的是小端模式,即低位字節在前,高位字節在后!
錯誤報文代碼參考Abort SDO Transfer Protocol章節
?
參考:
http://www.zlg.cn/can/article/detail/id/753.html
http://www.cnblogs.com/winshton/p/4897163.html
總結
以上是生活随笔為你收集整理的CANopen笔记1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postGIS相关数据库参数
- 下一篇: STM32串口USART1的使用方法