1、学习CANopen
CAN总线在OSI 7层网络模型中仅仅定义了物理层和数据链路层,没有规定应用层。
CANopen协议通常分为用户应用层、对象字典以及通信三个部分。
CANopen定义为小网络、 控制信号的实时通讯:
2 网络管理(NMT)
CANopen网络为了稳定可靠可控,都需要置一个网络管理主机NMT-Master(Network Management-Master)。所以每个 CANopen 从节点的 CANopen 协议栈中,必须具备 NMT 管理的相应代码,这是节点具备 CANopen 协议的最基本的要素。
NMT主机一般是CANopen网络中具备监控的PLC或者PC(当然也可以是一般的功能节点),所以也成为CANopen主站。相对应的其他CANopen节点就是NMT从机(NMT-slaves)。
NMT主机和NMT从机之间通讯的报文就称为NMT网络管理报文。管理报文负责层管理、网络管理和 ID 分配服务。例如,初始化、配置和网络管理(其中包括节点保护)。网络管理中,同一个网络中只允许有一个主节点、一个或多个从节点,并遵循主从模式。
2.1 NMT节点状态
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网络管理依然可以对节点进行操作;
2.2 NMT 节点状态切换命令
NMT 网络管理中,最核心的就是NMT节点状态切换命令,这是NMT主站所进行网络管理的“命令”报文。CANID 均为 000h,具备最高的CAN优先级。数据为2个字节:
第1个字节代表命令类型:
01h为启动命令(让节点进入操作状态);
02h为停止命令(让节点进入停止状态);
80h为进入预操作状态(让节点进入预操作状态);
81h为复位节点应用层(让节点的应用恢复初始状态);
82h为复位节点通讯(让节点的CAN和CANopen通讯重新初始化,一般用于总线收到干扰,导致节点总线错误被动,或者总线关闭时)。
第2个字节代表被控制的节点 Node-ID,如果要对整个网络所有节点同时进行控制,则这个数值为0即可。