网络管理 NMT(Network management) 与 CANopen 主站

. 网络管理 NMT Network management) CANopen 主站
前文所述,一个 CANopen 网络中为了保证可靠、可控,必须要 NMT 网络管理,就像
一个军队一样,要令行禁止,才能达到稳定、高效的目标。如图 6.1 所示。指挥员( NMT
主机)通过发号施令,士兵(NMT 从机)进行自由俯卧训练,这样整个训练都是有序的。

 

所以 每个 CANopen 从节点的 CANopen 协议栈中,必须具备 NMT 管理的相应代码,
这是节点具备 CANopen 协议的最基本的要素
NMT 节点状态
NMT 管理涉及到一个 CANopen 节点从上电开始的 6 钟状态,包括:
初始化 Initializing ):节点上电后对功能部件包括 CAN 控制器进行初始化;
应用层复 位( Application Reset ):节点中的应用程序复位(开始),比如开关量输
出、模拟量输出的初始值;
通讯复位 Communication reset ):节点中的 CANopen 通讯复位(开始),从这个时
刻起,此节点就可以进行 CANopen 通讯了。
预操作状态 Pre-operational ):节点的 CANopen 通讯处于操作就绪状态,此时此节
点不能进行 PDO 通信,而可以进行 SDO 进行参数配置和 NMT 网络管理的操作;
操作状态 operational ):节点收到 NMT 主机发来的启动命令后, CANopen 通讯被
激活, PDO 通信启动后,按照对象字典里面规定的规则进行传输,同样 SDO 也可以
对节点进行数据传输和参数修改;
停止状态 Stopped ):节点收到 NMT 主机发来的停止命令后,节点的 PDO 通信被
停止,但 SDO NMT 网络管理依然可以对节点进行操作;
除了初始化状态, NMT 主机通过 NMT 命令可以让网络中任意一个的 CANopen 节点
进行其他 5 种状态的切换。如图 所示。
当然 CANopen 节点也可以程序自动完成这些状态的切换。

 

NMT 节点上线报文
任何一个 CANopen 从站上线后,为了提示主站它已经加入网络(便于热插拔),或者
避免与其他从站 Node-ID 冲突。这个从站必须发出 节点上线报文( boot-up ,如图   所示,
节点上线报文的 ID 700 h +Node-ID 数据为 1 个字节 0 。生产者为 CANopen 从站。

 

 

NMT 节点状态与心跳报文
为了监控 CANopen 节点是否在线与目前的节点状态。 CANopen 应用中通常都要求在线
上电的从站定时发送状态报文(心跳报文),以便于主站确认从站是否故障、是否脱离网络。
如图 所示,为心跳报文发送的格式, CANID 与节点上线报文相同 700 h +Node-ID
数据为 1 个字节,代表节点目前的状态, 04 h 为停止状态, 05 h 为操作状态, 7F h 为预操作状
态。

 

CANopen 从站按其对象字典中 1017 h 中填写的心跳生产时间( ms )进行心跳报文的发
送,而 CANopen 主站( NMT 主站)则会按其 1016h 中填写的心跳消费时间进行检查,假设
超过诺干次心跳消费时间没有收到从站的心跳报文,则认为从站已经离线或者损坏。
NMT 节点守护
在早期 CANopen 应用中,还有一种可以 通过轮询模式监视从站状态的节点守护模式
它与心跳报文模式二者不能并存 。通过节点守护, MNT 主机可以检查每个节点的当前状态。
NMT-Master 节点发送 标准远程帧 (无数据)如下:
数据部分包括一个触发位( bit7 ), 触发位必须在每次节点保护应答中交替置“ 0 ”或者
1 。触发位在第一次节点保护请求时置为“ 0 ”。位 0 到位 6 bits0 6 )表示节点状态,
可为表 6.1 中的数值。

由于远程帧在 CAN 发展中逐渐被淘汰,而节点守护由于需要更多的主站开销与增加网
络负载, CiA 协会已经不建议使用,被心跳报文所取代
NMT 节点状态切换命令
NMT 网络管理中,最核心的就是 NMT 节点状态切换命令 ,这是 NMT 主站所进行网
络管理的“命令”报文。 使用者必须牢记这些命令
CANID 均为 000 h ,具备最高的 CAN 优先级。数据为 2 个字节:
1 个字节代表命令类型:
01 h 为启动命令(让节点进入操作状态);
02 h 为停止命令(让节点进入停止状态);
80 h 为进入预操作状态(让节点进入预操作状态);
81 h 为复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);
82 h 为复位节点通讯(让节点的 CAN CANopen 通讯重新初始化,一般用于总线收到
干扰,导致节点总线错误被动,或者总线关闭时)。
第二个字节代表被控制的节点 Node-ID
如果要对整个网络所有节点同时进行控制,则这个数值为 0 即可。

相关推荐

  1. EtherCAT程序代码详解

    2024-07-20 19:20:05       47 阅读
  2. 14 网络管理网络安全(1)

    2024-07-20 19:20:05       36 阅读
  3. 16 网络管理网络安全(3)

    2024-07-20 19:20:05       29 阅读
  4. 15 网络管理网络安全(2)

    2024-07-20 19:20:05       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 19:20:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 19:20:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 19:20:05       45 阅读
  4. Python语言-面向对象

    2024-07-20 19:20:05       55 阅读

热门阅读

  1. 在Spring Boot中实现文件上传与管理

    2024-07-20 19:20:05       17 阅读
  2. 掌握Perl中的异常处理:自定义错误管理的艺术

    2024-07-20 19:20:05       15 阅读
  3. Emacs

    2024-07-20 19:20:05       20 阅读
  4. 可再生能源工厂系统 (REPS) - 项目源码

    2024-07-20 19:20:05       18 阅读
  5. Python __init__与__new__的区别

    2024-07-20 19:20:05       13 阅读
  6. 深入探索Perl中的函数定义与调用机制

    2024-07-20 19:20:05       19 阅读
  7. lua语法思维导图

    2024-07-20 19:20:05       11 阅读
  8. Perl脚本的魔法:打造自定义文件系统视图

    2024-07-20 19:20:05       19 阅读