CANopen通訊協(xié)議介紹
總述
CANopen是一種架構在控制局域網路(Control Area Network, CAN)上的高層通訊協(xié)定,包括通訊子協(xié)定及設備子協(xié)定常在嵌入式系統(tǒng)中使用,也是工業(yè)控制常用到的一種現場總線。
CANopen 實作了OSI模型中的網絡層以上(包括網絡層)的協(xié)定。CANopen 標準包括尋址方案、數個小的通訊子協(xié)定及由設備子協(xié)定所定義的應用層。 CANopen 支援網絡管理、設備監(jiān)控及節(jié)點間的通訊,其中包括一個簡易的傳輸層,可處理資料的分段傳送及其組合。一般而言資料鏈結層及實體層會用CAN來實作。除了 CANopen 外,也有其他的通訊協(xié)定(如EtherCAT)實作 CANopen 的設備子協(xié)定。
基本的 CANopen 設備及通訊子協(xié)定定義在 CAN in AutomaTIon (CiA) draft standard 301. 中。針對個別設備的子協(xié)定以 CiA 301 為基礎再進行擴充。如針對 I/O 模組的 CiA401 及針對運動控制的 CiA402。
設備模型
以下是所有 CANopen 設備都要具備的功能:
通訊單元 處理和網絡上其他模組通訊所需要的通訊協(xié)定。 設備的啟動及重置由狀態(tài)機 (state machine)控制。狀態(tài)機需包括以下的幾個狀態(tài):IniTIalizaTIon, Pre-operaTIonal, Operational 及 Stopped。當接收到網絡管理 (NMT) 通訊對象,狀態(tài)機會轉換到對應的狀態(tài)。 對象字典 (Object Dictionary) 是一個有 16 位元索引 (Index) 的變量陣列。每個變量可以(但非必須)有 8 位元的子索引 (Subindex)。變量可用來調整設備的組態(tài),也可以對應設備量測的資料或設備的輸出。 當狀態(tài)機設定為 operational 之后,設備的應用 (application) 部份就會實現設備預期的機能。此部份可以由對象字典中的變量調整其設定,而資料由通訊層傳收或接收。
對象字典
CANopen 設備都需要具備對象字典,用來設定設備組態(tài)及進行非即時的通訊。對象字典的entry 定義如下:
索引 (Index):對象 16 位元的位址。 對象名稱 (Object name):一個代表對象的 symbolic type,可以是陣列、紀錄或只是一個變量。 名稱 (Name):描述此 entry 的字串。 形態(tài) (Type):變量的資料形態(tài)。 屬性 (Attribute):提供此 entry 是否可讀/可寫的資料,有下列四種:可讀/寫、只讀、唯寫、只讀常數。 必須 (Mandatory)/可選 (Optional)字段定義屬于特定設備規(guī)范下的設備,是否必須實現某些對象。 在 CANopen 標準中定義了對象字典中的基本資料型態(tài),包括邏輯值、整數及浮點數。也定義了復合對象:如陣列、記錄及字串。復合對象用一個 8 位元的數值作為其子索引(subindex)。記錄或陣列中子索引 0 的位置記錄此數據結構的元素個數,資料型態(tài)為 UNSIGNED8。
通訊
通訊對象
CANopen 的物理層 CANbus 每次傳送的資料量不大,其中包括 11 位元的 ID、遠端傳輸請求(RTR)位元及大小不超過8位元的資料。CANopen 將 CANbus 11 位元的 ID 分為 4 位元的功能碼及 7 位元的 CANopen 節(jié)點 ID。7 位元的 ID 共有 128 種不同的組合,其中 ID 0 不使用,因此一個 CANopen 網絡上最多允許 127 臺設備。CANbus 在 CAN 2.0 B 規(guī)格中允許 29 位元的 ID,因此若配合 CAN 2.0 B 使用,CANopen 網絡上可以超過127 臺設備,不過在實際運用中,大多數的 CANopen 網絡上設備數量均低于此數值。
CANopen 將 CANbus 的 11 位元 ID 稱為通訊對象 ID (COB-ID)。當傳輸資料出現碰撞時,CANbus 的仲裁機制會使 COS-ID 最小的訊息繼續(xù)傳送,不用等待或重傳。COB-ID 的前 4 個位元是 CANopen 的功能碼,因此數值小的功能碼表示對應的功能重要,允許的延遲時間較短。
在 CANopen 標準中,部份 COB-ID 被保留作網絡管理及 SDO 通訊用。而在設備初始化后,有些功能碼和 COB-ID 會對映到標準的功能,不過后續(xù)仍可以規(guī)劃為其他用途。
通訊模型
CANopen 設備間的通訊可分為以下三種通訊模型。
在 master/slave 模型中,一個 CANopen 設備為 master,負責傳送或接收其他設備(稱為 slave)的資料。NMT 協(xié)定就使用了 master/slave 模型。 主從(client/server)模型定義在 SDO 協(xié)定中,SDO client 將對象字典的索引及子索引傳送給 SDO server,因此會產生一個或數個需求資料(對象字典中,索引及子索引對應的內容)的 SDO 封包。 生產者/消費者(producer/consumer)模型 用在 Heartbeat and Node Guarding 協(xié)定。由一個生產者送出資料給消息者,同一個生產者的資料可能給一個以上的消息者。又可分為二種: push-model:生產者會自動送出資料給消費者。 pull-model:消費者需送出請求訊息,生產者才會送出資料。