CANopen协议解读

CANopen协议解读

  • 一、协议标准
  • 二、CANopen报文说明
  • 三、CANopen协议内容
    • 1. ID的理解
    • 2. NMT
      • (1) 节点状态
      • (2) 节点状态控制
      • (3) 节点心跳报文

一、协议标准

  以官方的CiA 301-4.2.0基础协议为解读学习标准,同时找到了基于CiA 301标准的通用I/O设备标准的CiA 402,是中文翻译版,还有ZLG多年前发布的CANopen轻松入门作为参考学习,话不多说,接下来就开始进行学习记录吧。
  CiA 301中使用的是仲裁域ID为11Bit的标准帧格式,并且发送与接收都是以从机视角来说的,对于多字节数据都是小端模式,即低字节先发送,以下的学习都以此为基础。

二、CANopen报文说明

  对CANopen协议内容理解前需要大概了解CANopen都有哪些类型的报文,可以对CANopen有一个大概的了解,以下列举了CANopen的常用报文:

报文类型 报文说明
NMT CMD(网络管理命令) 由网络主机发出,控制各从机设备工作模式
NMT 心跳报文 由网络从机发出,包括上线通知与定时上报从机工作状态
PDO 过程数据对象,单向传输,无需接收节点回应
SDO 服务数据对象,主要用于参数配置,每一条信息都有回应
Sync 特殊报文的一种,由主机发出,主要用于整个网络的同步传输
Time-Stamp 特殊报文的一种,由主机发出,主要用于整个网络的时间同步
Emergency 特殊报文的一种,当从机发生内部错误,用于通知主机

三、CANopen协议内容

1. ID的理解

  在CANopen中有下面这几种ID,COB-ID、Node-ID,那么这两个ID又是什么呢?和CAN BUS的仲裁域的ID(以下用CAN-ID代替)又有什么关系呢?
  首先,我们知道CAN-ID是CAN BUS控制器做仲裁、优先级判断使用的,CAN-ID越小优先级越高;而COB-ID(Communication Object Identifier)通信对象报文帧ID,我们可以认为COB-ID就是实际使用的CAN-ID。
COB-ID
  Node-ID就是从机节点的编号,在对指定从节点控制时需要使用到,其中PDO与SDO比较特殊(下面会说PDO和SDO,这里知道有这个东西就好),CiA301标准也直接进行了定义,将COB-ID的高4Bit定义为功能码,低7Bit为Node-ID,所以Node-ID的最大数量就是128个各节点,但是由于0不推荐使用,实际节点数量也就127个(1-127)。
NodeID划分
  在CANopen协议中,定了一部分重要的COB-ID,下面我就列举比较常用的一些COB-ID,以便日后我查找。

通讯对象 COB-ID
NMT CMD(网络管理命令) 000h
NMT心跳报文 700h + Node-ID(701h - 77Fh)
Sync(同步报文) 080h
Emergency(紧急报文) 080h + Node-ID(081h - 0FFh)
Time stamp(时间戳报文) 100h
TPDO1(发送过程数据对象 1) 180h + Node-ID(181h - 1FFh)
RPDO1(接收过程数据对象 1) 200h + Node-ID(201h - 27Fh)
TPDO2(发送过程数据对象 2) 280h + Node-ID(281h - 2FFh)
RPDO2(接收过程数据对象 2) 300h + Node-ID(301h - 37Fh)
TPDO3(发送过程数据对象 3) 380h + Node-ID(381h - 3FFh)
RPDO3(接收过程数据对象 3) 400h + Node-ID(401h - 47Fh)
TPDO4(发送过程数据对象 4) 480h + Node-ID(481h - 4FFh)
RPDO4(接收过程数据对象 4) 500h + Node-ID(501h - 57Fh)
TPDO4(发送过程数据对象 4) 480h + Node-ID(481h - 4FFh)
SDO server->client(服务数据对象-答) 580h + Node-ID(581h - 5FFh)
SDO client->server(服务数据对象-问) 600h + Node-ID(601h - 67Fh)

2. NMT

  NMT(Network Management)网络管理,为了保证CANopen网络中的可靠、可控,设计了NMT,整个CANopen网络中有且只有一个NMT主机,一个或多个NMT从机,与NMT相关的报文,比较重要的有节点状态控制(仅NMT主机)、节点错误控制、节点守护、节点上线、节点心跳报文,由于节点守护使用的是轮询方式,开销较大,已经不建议使用,所以下面也就不进行介绍了。

(1) 节点状态

  CANopen中的NMT节点的节点状态有6种状态,分别是:

  1. 初始化:在节点上电后,对CAN控制器的初始化操作;
  2. 应用层复位:节点的应用层程序复位;
  3. 通讯复位:节点的CANopen通讯复位;
  4. 预操作状态:节点的预操作状态,表示节点已经完成了初始化、CANopen通讯相关配置可以进行SDO与NMT网络管理操作了,但是处于这个状态的节点不可以进行PDO操作;
  5. 操作状态:此状态可以由节点自主进入或由NMT主机切换进入,在此状态下,可以进行SDO、PDO等数据传输;
  6. 停止状态:此状态由NMT主机切换进入,仅可以进行SDO与NMT网络管理操作。
报文类型 预操作 操作 停止
PDO
SDO
SYNC
TIME
EMCY
Node Ctrl
Err Ctrl

  节点状态切换以及切换回路如下所示:

CANopen协议解读_第1张图片

过程编号 切换触发条件
(1) 设备上电或者复位后自动进入
(2) 初始化完成,自动进入NMT预操作状态
(3) 通过配置自动进入或由NMT服务主机设置操作状态进入
(4),(7) 通过NMT服务主机设置预操作状态进入
(5),(8) 通过NMT服务主机设置停止远程节点进入
(6) 通过NMT服务主机设置启动远程节点进入
(9),(10),(11) 通过NMT服务主机设置复位远程节点进入
(12),(13),(14) 通过NMT服务主机设置远程节点通讯复位进入

  节点状态初始化切换回路如下所示:
CANopen协议解读_第2张图片

过程编号 切换触发条件
(1) 设备上电或者复位后自动进入
(2) 初始化完成,自动进入NMT预操作状态
(12),(13),(14) 通过NMT服务主机设置远程节点通讯复位进入
(9),(10),(11) 通过NMT服务主机设置复位远程节点进入
(15) 初始化完成后自动进入复位应用程序
(16) 复位应用程序完成后自动进入通信复位重置

(2) 节点状态控制

  NMT CMD网络管理命令只能由NMT主机发出,NMT主机可以对NMT从机节点进行初始化状态以外的5种状态配置,NMT节点控制协议如下表:

COB-ID DATA0 DATA1
000h CS Node-ID

  CS就是配置对应节点的状态参数,有以下5种:

CS 说明
00h 启动远程节点,即将远程节点状态设置为操作状态
02h 停止远程节点,即将远程节点状态设置为停止状态
80h 远程节点进入预操作,即将远程节点状态设置为预操作状态
81h 远程节点复位,即将远程节点状态设置为应用层复位状态
82h 远程节点通讯复位,即将远程节点状态设置为通讯复位状态

(3) 节点心跳报文

  节点心跳报文包括两类,一类是节点上线报文与周期上报从节点状态的心跳报文,报文协议如下:

COB-ID DATA0
700h+NodeId STATE

  STATE就是对应节点的状态参数,有以下4种:

STATE 说明
00h 从节点上线
04h 从节点处于停止工作状态
05h 从节点处于操作工作状态
7Fh 从节点处于预操作状态

未完待续…

你可能感兴趣的:(CANopen学习之旅,canopen)