中国安防论坛

 找回密码
 注册
查看: 1310|回复: 0

[心得] CANopen NMT命令与节点状态解析

[复制链接]

安防传说人物

Rank: 8Rank: 8

积分
4534
发表于 2026-8-7 16:46:52 | 显示全部楼层 |阅读模式

% ]2 S9 [" d3 ?$ x简介1 Z* R; @; G: n0 ^* V* V3 N( F: Y
NMT(Network Management,网络管理)是CANopen的核心管理机制,用于主站统一管控从站状态、启停设备、复位节点、管理总线拓扑,是整个网络的“总指挥系统”,因此NMT指令固定使用0x00的帧ID,具有最高总线仲裁优先级;
: v+ c) m& u2 ^/ \- z% `! l8 Y
, C  l0 o- S* f" \+ l6 x8 JNMT命令组成3 Y  ]3 ?) [6 ~! h% ]
帧数据由两个字节组成,第一个字节为命令代码(见下表1),第二个字节代表被控制的节点Node-ID,使用0x00可对整个CAN网络节点进行控制;  d; N3 C8 W5 Y' R. n) r
+ E3 u5 ^/ L% ^4 I3 l
表 1 NMT命令代码% p+ g) N# O+ K8 f2 V- L. V: D8 l( S
* E8 t6 t2 y- e' q4 [4 _* }
命令代码
3 d; b4 N5 l7 R/ m! A
0 I. }7 n9 A5 H: O功能
3 O- x! O$ x& _. Q* Z- z5 n
0 Z) C$ I4 c& |% }0x015 R% O/ v2 ?, W1 P; y  }
* B1 d/ Y2 j$ n# k/ S
启动命令,让节点进入操作状态& p3 q- P: Q. c4 p9 J; k

* O+ L! U8 x. D$ W( l  r2 d/ b0x012 e8 q0 N+ k' v5 u4 Y

, ^; j+ a# ~9 W停止命令,让节点进入停止状态
% L8 Z1 i8 W3 `7 f7 E
# i% [% J0 u: \' ?+ s; v  l0x80/ h  G! f; S& P- W" ?" i
( {1 T4 I+ O1 B: \% ~# {1 j
进入预操作状态命令,让节点进入预操作状态
2 ?1 }0 _; [! R9 a, V- K: |2 X: s
+ j3 W: V  O+ y4 I7 v: u) L0x81, W: h& d4 l8 K4 F2 m
9 d, C0 m; c3 f" H( O
复位节点应用层命令,让节点的应用恢复初始状态
8 ~. i; H0 C. t) p( j
: _; \- j$ s$ p9 F0x82
; |+ E; a2 ^9 A/ \& D4 u3 |" g) K* T* P2 w; j- t
复位节点通讯命令,让节点的CAN和CANopen通讯重新初始化,一般用于总线受到干扰,导致节点总线错误被动,或者总线关闭时
9 h# Q4 K1 t$ S# H, r! f# K6 ^; p0 K& t0 Y0 ]/ a
NMT节点状态与心跳报文
. }) s6 I9 z1 N" Z% [) [3 g在 CANopen 总线系统的实际工程应用场景中,为实现对总线上各个从站节点的在线状态持续监测,同时实时获取节点当前运行状态信息,行业内普遍要求处于正常工作状态的从节点按照固定周期主动向外发送状态报文,该报文也就是常说的心跳报文。主控制器可以通过持续接收心跳报文,实时判定对应从站是否出现离线、通讯中断等故障问题,同时结合报文内容完成节点状态解析,第一时间开展异常排查与应急处理工作。% [2 b9 m; O& p6 K, G) R

4 z0 b0 O" K& [; V& x心跳报文的功能配置主要依托两个关键对象字典参数完成,分别是消费者心跳超时参数(索引 0x1016)与生产者心跳周期参数(索引 0x1017),其中生产者心跳周期为16位无符号短整型,单位为毫秒,将该参数数值设置为0时,代表关闭当前节点的心跳报文发送功能,而消费者心跳超时为32位无符号整型(如图 1)。
/ p* g4 J2 Y$ G7 f4 }- Z( g0 A1 @0 K; R" G
CANopen协议规定,心跳报文的通信对象COB-ID遵循固定规则,统一由0x700加上设备自身节点ID组合而成。" S! Q9 z* T( h8 e6 ^. I; W$ J0 Q" `
/ Q* ?& ?* }6 S* H6 I! d
图 1 消费者心跳配置超时结构: M* h2 d9 g; j3 d. c) C7 W

/ E5 X$ C, A/ a8 f+ N* D5 a+ i) r( n( T: Y- V2 }: i  L
+ t( e9 f! W! N0 y' Y& ~+ y8 @
消费者心跳超时,该对象为期望的心跳周期,从接收第一次心跳开始监测心跳生产者,支持最大监控0到127个Node-ID,通过最大127组子索引的第16位到第23位配置Node-ID,低16位配置判断周期,单位ms,当出现超时是设备应用层做出相应的错误或者推送EMCY报文;
! o/ `' m& a  S' p+ _3 V
0 Y9 V: A) s5 b5 p& c表 2 节点状态5 m3 A" \0 O+ ]5 T, K
4 P% S7 b1 i3 U& o! G
状态代码' \# P$ c& Q* e

# T/ \) y) X0 b4 M说明
) D0 M9 W, U% ?1 d7 n9 i" C
. M) Y% X7 C% C. ]6 E+ \# B0x00
8 f4 x' w* {/ Z  f2 C/ _6 `6 r) r' B; K: W  j* W& T" }4 y
初始化状态(Initialising)
" W' W" A0 X1 {; v
0 C3 F& l9 n, P0x04' b( x/ J( u6 R7 x0 L/ m; W

4 w* A. H- P  ?% y  ]% x; E停止状态(Stopped)
: \% E  j2 R0 ^" B3 L& ]+ }& i
: w- \. [4 w, v0x05
6 q. G# \( Q* k2 @1 @1 x# @6 p* i. K$ z
操作状态(operational)
4 K( G4 A8 ~* P) [) s  ?( c, @: M- \) I
0x7F# E' ]7 M/ R8 {8 s
3 U8 t1 n6 }* L6 [
预操作状态(Pre-operational)
' j! l( _' Z3 p3 Y8 H" Q
+ t" ?, x6 E4 n1 m! y停止状态(Stopped):
) a$ z% K2 N) s) S0 |6 `$ m4 C  h( T! U* y: r2 k
停止状态CANopen设备终止所有通信服务(激活节点保护和心跳通讯除外),这种状态可用于实现特定的应用行为,这种行为属于设备协议和应用协议的范畴,此状态下触发的EMCY 消息将被挂起,在切换到其它状态后,最近的 EMCY 将被激活。
8 b$ F1 w$ r- [. o. X& k
1 z( B# s6 }" h/ E预操作状态(Pre-operational):) b* v1 g' P5 @( Z3 w6 @
& Z7 o3 |1 ?* A6 V
在预操作状态允许进行SDO通信,不允许PDO通信,此状态通常用于配置PDO的参数和映射对象(PDO 映射)等,CANopen设备可以由NMT启动远程节点服务或通过本地控制由此状态切换至运行态。
. g6 C+ W  @7 U9 J/ ], k. W* M( B2 {% r4 I' H( S) z
操作状态(operational):
$ k2 a8 E6 r" D- u. S5 G# K1 R- B; o
: w: c6 Y( q7 Y- N" }此状态允许所有通信服务(PDO、SDO、SYNC、TIME、EMCY、NMT),支持PDO传输,可通过SDO访问数据字典,以及可以进行SYNC、TIME、EMCY、NMT通讯对象。! N$ h& i+ r" O! H, x

/ V0 }0 x% W' R$ C* {: J/ w. ~$ r' U表 3 NMT状态与通讯对象关系9 S& F/ r( z. U1 A/ m

+ E* V3 W. S' ?0 i/ x5 f停止状态
" n) N% s' N  c; ?' {* j
2 A6 q0 v' z- l$ Y预操作状态9 V" _- h3 ]5 c% S6 d& C5 g
+ S* E# i; @# r+ B( I# V% ?- o5 [
操作状态
9 l8 g4 r! I" T/ \# K3 _3 c! }' r, ^
NMT
: [0 G; J9 d" p0 U' l2 Z- Y% I2 B
5 H: t  L, {5 Q2 b支持
+ K5 D: j" P; F* o6 |5 c! T7 j
" T+ t5 _  n4 U5 m支持. m" q: K$ A9 s( R

& z. q0 T0 E/ O0 j1 q1 L支持( V9 ]3 o* ]  M9 d" q
  y1 s' ?2 v* H, M
SDO/ }* a, a! Z  T! T% [, f
: Y3 \* p  i! E; W% J
不支持
7 w6 P7 B# z/ A9 g/ ^% G# I0 u  S* t7 Z4 a
支持
" `, B; V8 {( ]; @$ p0 L- w
0 R. q) ?3 C: U0 `  k$ y* v/ }支持# C! l5 Z; c# o  z
# n: z3 {5 p& R2 A1 w( L
SYNC6 W% Q  R& P6 N7 x& S3 H
# y8 y, H9 u6 ?
不支持
* R. j4 N* L* I  q2 c2 [+ ^1 B
2 [! h/ |) y- }5 {支持
( F5 @8 f$ N3 Y# Z' `$ T4 m8 c% W, x( |, O' s+ [6 k
支持5 S: G( r1 f& }8 \  n3 a# J

' L1 M  k, _1 Y; w5 t* ]TIME
# Y: @; Q+ W3 z- m" L. t) n/ t
3 U5 y( k% C' Q+ K% s& m不支持
+ l% x+ S/ n; y4 g/ b$ s, M6 t* Y: [' L
支持/ J* |( Q/ u5 S% d  o6 X) G
2 ?( L, @& _- z2 F; C3 _6 J" o
支持
$ x! S7 i5 @, j' u, ?, l' K: Q: V9 _% s; i1 \
EMCY
! a9 m) P3 ]! V, G: N
7 M0 _$ |+ ]. e0 K( T  n不支持
- Z% Y; ?1 b+ c9 m$ t; ?
; M1 X, w( z" o( m8 W支持( X: }1 Q( B9 a% {' s" c

! H! @' X% |+ {( c( d1 u5 G支持4 A" `1 B( t( C1 Z8 V+ Z4 [

, ~! @1 a' G$ m: G5 q3 VPDO9 H7 _. n/ K$ W3 H
& V- h, z/ Y. u7 b3 N# _2 D
不支持
5 G2 A( @* |5 U; U8 W: \4 k
& _" ?' B! d3 X& R1 v9 ]9 P不支持
7 O% \+ D7 e' A) u
4 ~& W# B% A- `' n支持* `' ]* Z5 J" s- Z! J

# {6 w3 B7 D  |. xNMT状态机
- h4 w5 w0 f  A3 D初始化态分为三个子状态(如图 2虚线框),以便能够完全或部分复位CANopen设备。
3 ~  \/ I' |  {. |* L$ c* {
) ?3 t. D' O9 Q3 m1.初始化:CANopen上电或硬复位后的第一个NMT子状态,执行基本的CANopen设备初始化后自动进入复位应用子状态。5 S: ^( V$ H; |* [

5 }# Y/ w/ [# X0 h2.复位应用:该子状态下,制造商协议区和标准设备协议区参数被赋上电值,之后自动进入复位通信子状态。
: @7 g  J( j5 ~- N# I' x7 z7 f. `
3.复位通信:该子状态下,通信协议区参数被赋上电值,然后CANopen设备执行 boot-up 写服务并进入预运行态。$ t* i/ o+ Q+ e6 B5 u+ z0 U  J

. @- B2 p2 E5 @' N) l' o+ O图 2 CANopen设备NMT状态图
, q* X1 ?/ \/ x3 d0 V! ]! E% g/ r* X( g1 U! f& Q" P! _1 d' ?
  R# g; U( y) j( y
7 a7 j' v) Z) o) n; h6 _  u' O
流程8 J, ^' w4 W+ e
' b' _8 ~$ u; H$ a+ t
说明
$ m4 _# c) X  C' C# R4 p/ R4 S6 V( k  W8 w
(1)3 Y1 _; S9 F0 U8 p$ d: P+ J
2 \; L, _* Z  A6 ]4 q
上电自动进入NMT初始化,自动进入NMT复位应用子状态+ O- l" ], [" I" L6 d5 Z8 I
0 ~7 {2 g9 B5 M3 M& S' ?* e
(2): }5 p+ q2 L& f/ y) E6 V; c
- Z9 C; q. ^3 i8 x, ?  y
自动进入NMT 复位通信子状态
( p1 d1 C8 ?9 N- e; R/ e' f" e. r8 v
(3)
; Z" j3 Q' a8 C8 o7 @6 ~; z
. ]8 B8 t1 R, j& x9 Y; lNMT 初始化执行完成---自动进入配置态
% G5 R3 I  K' R+ ^8 V" w
# [7 Y1 G( [0 L. e; N(4)' ^" ?+ S1 Z+ }0 O. }% ^7 B  @
, v4 n- K% O: o9 N$ m
由 NMT服务启动远程节点或由本地控制  j/ S4 G% K) p) I  C$ J

4 L, D5 A/ B( {" g* b(5)(6)
/ D7 ?3 x9 M; j# K6 r) o! T8 `  W9 X* J9 x& D- N
由 NMT服务进入预运行态
# X7 L1 c% }+ P0 D/ K6 V! U
& j2 Z2 z: i4 G" Q: }) b(8)(9)
! e) A, ^8 x" ~
$ Q& X; H# |' ?由 NMT 服务停止远程节点
  N$ o; V% }- C) o
; s  Y+ z" d6 p& u(7)7 h! {: d+ M2 |1 {
1 e3 f. ~2 C1 Y2 u* Y6 z+ l* U
由 NMT服务启动远程节点6 r7 n0 U9 \# R5 j) f( _% O9 ~
9 r1 `# c* t5 T
(10)(11)(12)
7 ?# v( d( O. \1 g; L
5 [4 k. ~1 ~4 n$ u  ~* e由 NMT 服务复位远程节点9 _- J) }% |' ]$ i) ~5 ~9 \$ u
6 l! O9 v7 `7 _" s+ M- M# r. V/ a3 v
(13)(14)(15); c8 ?/ L- I( c1 H1 O# H9 h

: s, b! u" Y" i0 a( Y  q) {  d' r由 NMT服务复位远程节点的通信" D$ q# x8 E9 ^- }
3 c/ y# w% P: S3 e8 S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

安豆网|Archiver|手机版|中国安防论坛 ( 粤ICP备09063021号 )

GMT+8, 2026-9-1 03:40 , Processed in 0.072191 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表