1. 网络管理
一个 CANOpen 网络中为了保证可靠、可控,必须要 NMT 网络管理
就像一个军队一样,要令行禁止,才能达到稳定、高效的目标
所以每个 CANOpen 从节点的 CANOpen 协议栈中必须具备 NMT 管理的相应代码
这是节点具备 CANOpen 协议的最基本的要素
2. 节点状态
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 节点也可以程序自动完成这些状态的切换
3. 节点上线报文
任何一个 CANOpen 从站上线后
为了提示主站它已经加入网络(便于热插拔1),或者避免与其他从站 Node-ID 冲突
这个从站必须发出节点上线报文(boot-up)
节点上线报文的 ID 为 700h + Node-ID, 数据为 1 个字节 0
生产者为 CANOpen 从站
4. 心跳报文
为了监控 CANOpen 节点 是否在线 与 目前的节点状态
CANOpen 应用中通常都要求在线上电的从站 定时发送 状态报文(心跳报文)
以便于主站确认从站是否故障、是否脱离网络
心跳报文发送的格式:
CAN-ID与节点上线报文相同为700h + Node-ID
数据为 1 个字节,代表节点目前的状态:
04h:停止状态, 05h:操作状态, 7Fh:预操作状态
CANOpen 从站按其对象字典中 1017h 中填写的心跳生产时间(ms)进行心跳报文的发送
而 CANOpen 主站(NMT 主站)则会按其 1016h 中填写的心跳消费时间进行检查
假设超过诺干次心跳消费时间,没有收到从站的心跳报文
则认为从站已经离线或者损坏
5. 节点守护
在早期 CANOpen 应用中,还有一种可以通过 轮询模式 监视从站状态的节点守护模式
但它与心跳报文模式二者不能并存
通过节点守护, MNT 主机可以检查每个节点的当前状态
NMT-Master 节点发送标准远程帧(无数据)如下:
NMT-Slave 节点应答发送数据帧, 数据为 1 个字节:
数据部分包括一个触发位(bit7)
触发位 必须在每次节点保护应答中交替置“0”或者“1”
触发位在第一次节点保护请求时置为“0”
位 0 到位 6(bits0~6)表示节点状态,数值可为:
由于远程帧在 CAN 发展中逐渐被淘汰,而节点守护由于需要更多的主站开销与增加网络负载
CiA 协会已经不建议使用,被心跳报文所取代
6. 节点状态切换命令
NMT 网络管理中,最核心的就是 NMT 节点状态切换命令
这是 NMT 主站所进行网络管理的“命令”报文
必须牢记这些命令:
CAN-ID 均为 000h,具备最高的 CAN 优先级
数据为 2 个字节:
- 第 1 个字节:命令类型
01h:启动命令(让节点进入操作状态)
02h:停止命令(让节点进入停止状态)
80h:预操作状态(让节点进入预操作状态)
81h:复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态)
82h:复位节点通讯(让节点的 CAN 和 CANOpen 通讯重新初始化,一般用于总线收到干扰,导致节点总线错误被动,或者总线关闭时) - 第二个字节:控制的节点 Node-ID
如果要对整个网络所有节点同时进行控制,则这个数值为 0 即可
7. 主站设备
通常 NMT 主站也称为 CANOpen 主站, 上文所述为 CANOpen 最基本的 NMT 操作
而作为一个完整的 CANOpen 主站设备,为了满足管理整个 CANOpen 网络的从站设备
需要具备以下功能:
- 支持 PDO、 SDO 发送与接收
- 支持 NMT 网络管理
- 支持 PDO 通信类型并能够支持监控每一个 PDO 目标
- LSS 层设置功能:从站波特率设置、从站节点编号设置
- 支持从站管理功能:类型与名称读取、对象字典读写
- 紧急报文发送功能
- 扩展 CANOpen 标准指示灯功能
目前有二种形式的主站:
-
可编程控制器(PLC) 中的一个单元
内部集成了CANOpen 的主站功能,这个单元能连接到 CANOpen 总线
同时因为它是 PLC 中的一个单元,它能与 PLC 的 CPU 交换数据
因此通过编写 PLC 程序对它所连接的 CANOpen 从站进行管理和控制 -
PC 扩展主站通信卡
通过 PC 扩展一个 CANOpen 主站通信卡,从而令 PC 具有管理 CANOpen 通信网络的能力
推荐使用 PCI 总线或 USB 总线来扩展 CANOpen 通信卡
使用它们不仅可以令PC 成为一个 CANOpen 网络的管理节点
还可以开发或测试 CANOpen 网络、拓展连接其他网络
参考:
相关推荐:
CAN笔记(18) 对象字典
CAN笔记(17) 预定义报文ID
CAN笔记(16) CANOpen简介
CAN笔记(15) STM32-M4 CAN通讯
CAN笔记(14) STM32-M4 寄存器
谢谢!
热插拔:即带电插拔,指的是在不关闭系统电源的情况下,将模块、板卡插入或拔出系统而不影系统的正常工作,从而提高了系统的可靠性、快速维修性、冗余性和对灾难的及时恢复能力等 ↩︎