1寫在前面
該系列教程13、14講述了移植相關內容,以及提供給大家可直接編譯、下載運行的源碼工程,想必你已經掌握了一些基礎的知識了。
在《CANOpen系列教程08_CANOpen通信接口引導學習》中,引導大家參看《CANopen輕松入門》通信接口的相關知識。而沒有在文中具體描述關于CANOpen通信接口的知識。
原因在于通信接口的內容太多,單純的去看這些內容,容易讓人產生更多困惑。
對于程序員來說,結合源代碼來理解相關理論知識更加容易。所以,我將其留在了這后面來講述。
下面結合移植好的源代碼,講述CANOpen網絡管理(NMT:Network management)的相關知識。
2
關于網絡管理NMT
在CANOpen網絡中,分主站和從站,而通常由主站來管理整個網絡。比如:復位、停止等。
《CANopen輕松入門》中軍隊的例子說的很好:一個軍隊,如果沒有指揮員來管理,下面士兵豈不亂套了。
例子中指揮員就是CANOpen中的網絡管理主站,士兵就是從站。
重要的一點:每個 CANopen 從節點的 CANopen 協議棧中,必須具備 NMT 管理的相應代碼。也就是說從站是被接收管理。
當然,我們使用的Canfestival這套免費框架,大家不必擔心,肯定是具有相關代碼,我們需要明白怎么使用這套源碼即可。
3
NMT網絡管理節點狀態
3.1 6種節點狀態
NMT網絡管理主要包含以下6種狀態:
1.初始化(Initializing):節點上電后對功能部件包括 CAN 控制器進行初始化;
2.應用層復位(Application Reset):節點中的應用程序復位(開始),比如開關量輸出、模擬量輸出的初始值;
3.通訊復位(Communication reset):節點中的CANopen通訊復位(開始),從這個時刻起,此節點就可以進行CANopen通訊了;
4.預操作狀態(Pre-operational):節點的CANopen通訊處于操作就緒狀態,此時此節點不能進行PDO通信,而可以進行SDO進行參數配置和NMT網絡管理的操作;
5.操作狀態(operational):節點收到NMT主機發來的啟動命令后, CANopen通訊被激活, PDO通信啟動后, 按照對象字典里面規定的規則進行傳輸,同樣SDO也可以對節點進行數據傳輸和參數修改;
6.停止狀態(Stopped):節點收到NMT主機發來的停止命令后,節點的PDO通信被停止,但SDO和NMT網絡管理依然可以對節點進行操作;
NMT網絡管理6種狀態如上圖所示,其中1 --- 15各處代表含義:
(1):Power on上電初始化
(2):Automatic switch to Pre-operational自動切換預操作狀態
(3) 、(6):NMT switch to Operational網絡管理切換到操作狀態
(4)、(7):NMT switch to Pre-operational網絡管理切換到預操作狀態
(5)、(8):NMT switch to Stopped網絡管理切換到停止狀態
(9)、(10)、(11):NMT switch to Application reset網絡管理切換到應用層復位狀態
(12)、(13)、(14):NMT switch to Communication reset網絡管理切換到通訊復位狀態
(15):Power-off or hardware reset掉電或硬件復位
3.2 源碼說明
通過上面描述,需要知道兩點重要內容:主站進行網絡管理,網絡各個節點有多種狀態。當然,一個時刻只能一種狀態。
在Canfestival框架源碼中,主站可通過masterSendNMTstateChange這個函數接口來管理網絡節點的狀態。可以理解為:主站控制,或切換從站節點的狀態。
這里需要理解masterSendNMTstateChange這個函數接口的用法,也就是說接口含義,以及參數。
比如:主站上電之后,讓網絡中節點0x01復位:
這里我們結合《CANOpen系列教程13》提供的代碼基礎上,添加一行管理節點0x01的代碼:
masterSendNMTstateChange(&TestMaster_Data, 0x01, NMT_Reset_Node);
第1個參數TestMaster_Data:主站對象字典
第2個參數0x01:節點(從站)ID
第3個參數NMT_Reset_Node:復位節點
第1,2個參數很好理解,第3個參數是通過宏定義在def.h中,總共5種狀態,如下圖:
寫到這里,相信大家對網絡管理節點有一定認識了,初學者可以多結合代碼理解。
4
NMT網絡管理節點上線報文
該教程上一篇文章末尾講述運行效果時,提供了一張運行時CAN總線數據的截圖:
任何一個 CANopen 從站上線后,為了提示主站它已經加入網絡(便于熱插拔),或者避免與其他從站 Node-ID 沖突。這個從站必須發出節點上線報文(boot-up)。
節點上線報文的 ID 為:700h + Node-ID, 數據規定為0。 生產者(Producer)為 CANopen 從站。如下圖:
5
NMT網絡管理心跳報文
為了監控 CANopen 節點是否在線與目前的節點狀態。 CANopen 應用中通常都要求在線上電的從站定時發送狀態報文(心跳報文),以便于主站確認從站是否故障、是否脫離網絡。
格式:
CAN-ID:700h + Node-ID
數據:一字節狀態
在《CANOpen系列教程13》提供例程中,就是包含一個心跳報文。心跳報文比較簡單,請結合上圖理解。
注意:
1.CANopen從站按其對象字典中 1017h 中填寫的心跳生產時間(ms)進行心跳報文的發送。
2.CANopen主站則會按其1016h 中填寫的心跳消費時間進行檢查,假設超過諾干次心跳消費時間沒有收到從站的心跳報文,則認為從站已經離線或者損壞。
還有一些網絡管理相關內容,大家可以結合這種思路去理解,建議參看:
1.CiA 301 V4.2.0網絡管理章節
2.周立功的CANOpen輕松入門
-
CAN
+關注
關注
57文章
2744瀏覽量
463623 -
源碼
+關注
關注
8文章
639瀏覽量
29185 -
CANopen
+關注
關注
8文章
253瀏覽量
43582 -
NMT
+關注
關注
0文章
7瀏覽量
3631
發布評論請先 登錄
相關推薦
評論