参考资源
CANopen协议栈源码:
https://github.com/CANopenNode/CANopenNode
CANopen协议栈基于STM32平台开发的demo,不过这里是基于STM32CUBEIDE开发的:
https://github.com/CANopenNode/CanOpenSTM32
协议栈的配置工具:
https://github.com/CANopenNode/CANopenEditor
00_NMT网络管理的模块控制
https://blog.youkuaiyun.com/zaichen321/article/details/128841446
安富莱电子开发板视频教程
https://www.armbbs.cn/forum.php?mod=viewthread&tid=121619&extra=page%3D1
程序的准备
目前已经完成了在正点原子开发板上进行CANopen协议栈的移植,进一步对NMT报文进行测试。
NMT的状态转换
参照周立功 《canopen轻松入门》中的NMT管理状态转换图,网络管理的状态如下图所示。
网络状态的转换指令:
在Cia的301规范中,对不同的网络状态,支持的通信模式是不一样的,如下图所示,这里打叉的意思是支持吧。。。。
不同的网络状态,也会反应在心跳包的状态字上,具体状态如下表:
value | state |
---|---|
0 | 初始化中:Initialising |
1 | 未连接:Disconnected |
2 | 连接中:Connecting |
3 | 准备中:Preparing |
4 | 停止:Stopped |
5 | 操作状态:Operational |
127 | 预操作状态:Pre-operational |
网络状态测试
发送ID为0,指令02 00,进入停止状态,则心跳包状态字04
发送ID为0,指令80 00,进入预操作状态,心跳包状态字7F
发送ID为0,指令01 00,进入操作状态,心跳状态字05
以上测试了停止状态,与操作状态到操作状态的模式转换。