目前,CANopen通訊協議已經在工業領域得到了廣泛的使用,由于其面向對象的設計思路,CANopen協議已成為歐洲等國家的自動化公司標配的通訊接口之一。在本系列文章中,我們將介紹CANopen協議的基礎內容,包括對象字典、服務、SDO、PDO和主/從站節點等。
1.1 CANopen框架
為了理解CANopen通信,有必要對CANopen的CAN報文進行分解。如下圖,11位的CAN ID被稱為通信對象標識符(COB-ID),它被分成兩部分。前4位相當于功能代碼,接下來的7位包含節點ID。
為了理解COB-ID的工作原理,需要從簡單的CANopen網絡中如何使用標識符的預定義分配開始。
如上圖,COB-ID(381、581等)與通信服務(傳輸PDO 3、傳輸SDO等)相關聯,因此,COB-ID詳細說明了哪個節點正在發送/接收數據,以及使用了什么服務。如下圖的例子,一個節點ID為5的CANopen設備將通過11位的CAN ID 585傳輸SDO,這對應于二進制功能代碼1011,節點ID 5(在二進制中為0000101)。
1.2 CANopen通信協議/服務
接下來,我們將簡要介紹CANopen的7種服務類型,以及它們如何利用8個CAN幀數據字節。
1.2.1 網絡管理(NMT)
NMT服務用于通過NMT命令(如:啟動、停止、復位)來控制CANopen設備的狀態(如:預運行、運行、停止)。
為了改變狀態,NMT主機發送一個帶有 CAN ID 0的2字節消息(即功能代碼0和節點ID 0)。所有從站節點都處理這個報文。第一個CAN數據字節包含請求的狀態,而第二個CAN數據字節包含目標節點的節點ID。節點ID 0表示廣播命令。
可能的命令包括轉換到運行(狀態01)、停止(狀態02)、預運行(狀態80)以及重置應用程序(81)和重置通信(82)。例如:將節點0x06設置為運行模式: 000 01 06
1.2.2 同步(SYNC)
SYNC報文用于同步幾個CANopen設備的輸入和響應--通常由應用主站觸發。應用主機將SYNC消息(COB-ID 080)發送到CANopen網絡(帶或不帶SYNC計數器)。多個從節點可以配置為對SYNC做出反應,并通過傳輸同時捕獲的輸入數據或通過與參與同步操作的節點同時設置輸出來響應。使用SYNC計數器可以配置幾組同步操作的設備。
1.2.3 緊急情況 (EMCY)
緊急服務用于設備出現致命錯誤(如傳感器故障)時,允許它向網絡的其他部分指示這一點。受影響的節點以高優先級向網絡發送單個EMCY消息(例如,節點5的COB-ID 085)。數據字節包含有關錯誤的信息,可以查找詳細信息。
1.2.4 時間戳(TIME) [PDO]
通過這種通信服務,可以分配全球網絡時間。時間服務包含一個6字節的日期和時間信息。應用主機發送 CAN ID 為100的TIME消息,其中最初的4個數據字節包含以毫秒為單位的午夜之后的時間,接下來的2個字節包含自1984年1月1日以來的天數。
1.2.5 過程數據對象 [PDO]
PDO服務用于在設備之間傳輸實時數據,例如位置等測量數據或扭矩請求等命令數據。在這方面,它類似于J1939中的廣播數據參數。關于PDO服務,我們將在下文中進行詳細介紹。
1.2.6 服務數據對象 [SDO]
SDO服務用于訪問/改變CANopen設備的對象字典中的值。例如,當應用主站需要改變CANopen設備的某些配置時,可以通過SDO服務來實現。
1.2.7 節點監控(心跳)[SDO]
心跳服務有兩個目的:提供一個"活動"的消息和確認NMT命令。NMT從設備周期性地(例如每100毫秒)發送心跳消息(例如節點5的CAN ID為705),在第一個數據字節中包含節點的"狀態"。如果在特定時間限制內沒有收到任何消息,心跳消息的"消費者"(例如 NMT 主設備和可選的任何其他設備)就會做出反應。例如:節點5處于預運行模式,周期性發送:705 7F
在下一篇文章中,我們將繼續講解CANopen通信的相關知識,包括對象字典、SDO、PDO等,歡迎關注我們以便第一時間獲取更新的內容。虹科在CAN、CANopen等領域深耕多年,有著深厚的技術實力,目前已面向國內市場推出了CANopen開發源代碼、CANopen數據記錄儀,和支持CANopen協議的網關、板卡、IO等產品。