CAN笔记(17) 预定义报文ID

CAN笔记(17) 预定义报文 ID

  • 1. 预定义报文
  • 2. 网络管理与特殊协议报文ID
  • 3. 过程数据对象和服务数据对象的报文ID


1. 预定义报文

在 CANOpen 创立之初
即使在 CAN 总线应用最广泛的汽车电子行业,网络中的 CAN节点数量和需要通讯的信息都是比较少的
人们使用 CAN 取代 RS485, 主要是看重其可以突发发送的实时性优势

而在多节点、长距离应用中, CAN 总线和 RS485 比起来并无优势
比如同样的波特率下, CAN 的通信距离只能达到 RS485 的 0.6-0.8 倍
而多节点通信 CAN无法进行任意的突发发送
不得不遵循 RS485 那样的轮询通信机制,否则会导致拥堵
CAN笔记(17) 预定义报文ID_第1张图片
就像十字路口的汽车,如果车只有 10 辆,即使没有交通灯,根本不会拥堵
而如果有 100 辆,如果任意行驶,就会发生严重拥堵

CANOpen 的创始人是非常了解 CAN 总线这个特征
所以在设计 CANOpen 时,对其定义为小网络控制信号实时通讯

  • 报文传输采用 CAN 标准帧格式
    即 11bit 的 ID 域,以尽量减小传输时间
    在这里插入图片描述

  • 网络控制报文均采用数据最小字节数
    比如心跳报文,只有 1 个字节数据

  • 实时更新的 过程数据无需接收方报文应答
    即采用生产消费模型,降低总线负载

  • 需要接收方确认的配置参数一般都是采用快速单字传输
    即 1 个报文最多传送 1 个 32 字节的参数变量,避免了分帧引起的实时性降低

以上这些定义都是 为了节约时间开销,最大限度保证实时性
同时 为了减小简单网络的组态工作量, CANOpen 定义了强制性的缺省标识符(CAN 帧 ID) 分配表
以减少使用者与维护者的学习时间,快速上手


2. 网络管理与特殊协议报文ID

虽然 CANOpen 的通讯发挥了 CAN 的特色,所有节点通信地位平等, 运行时允许自行发送报文
但 CANOpen 网络为了稳定可靠可控,都需要设置一个网络管理主机 NMT - Master(Network Management - Master)
CAN笔记(17) 预定义报文ID_第2张图片
就像一个交响乐团的指挥家,所有节点的启动、停止都是有他进行指挥

NMT 主机一般是 CANOpen 网络中具备监控的 PLC 或者 PC(当然也可以是一般的功能节点)
所以也成为 CANOpen 主站

相对应的其他 CANOpen 节点就是 NMT从机(NMT-slaves)
NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文
管理报文负责层管理、网络管理和 ID 分配服务

例如,初始化、配置和网络管理(其中包括节点保护)
网络管理中,同一个网络中只允许有一个主节点、一个或多个从节点,并遵循主从模式
另外,为了 协调各个节点的同步、心跳、时间、错误 提示等通讯控制
CANOpen 还定义了一系列 特殊协议(Special protocols)报文

CANOpen 预定义报文(Pre-defined CAN-IDs)的 NMT 报文和特殊协议报文
CAN笔记(17) 预定义报文ID_第3张图片
CAN-ID 就是这类报文的 COB-ID, 其中绿色底纹的这些常用是必须需要记住的
CAN-ID 含义,在研发和应用 CANOpen 中,这三类是最为常用的 NMT 与特殊协议报文


3. 过程数据对象和服务数据对象的报文ID

用户应用 CANOpen 时
需要传递的 配置信息应用信息 都是放在 过程数据对象 PDO(Process data object)和 服务数据对象 SDO (Service data object)里面

这些对象就和市场上卖水果的箩筐,大小是一样的,只是装的东西(应用数据)不一样

CAN笔记(17) 预定义报文ID_第4张图片
这就是 CiA301 协议 所规定的基础协议——“箩筐”
而 CiA4xx 的子协议或者用户自定义的对象,就是“箩筐”里面的东西
筐已经通过CiA301 协议规定好了,至于筐上要放什么就看自己了

PDO 和 SDO 的通讯区别:

  • PDO 属于过程数据
    单向传输无需接收节点回应
    CAN笔记(17) 预定义报文ID_第5张图片
    CAN 报文来确认,从通讯术语上来说是属于“生产消费”模型
  • SDO 属于服务数据
    指定被接收节点的地址(Node-ID),并且需要指定的接收节点 回应 CAN 报文来确认已经接收
    如果超时没有确认,则发送节点将 会重新发送原报文
    CAN笔记(17) 预定义报文ID_第6张图片
    这种通讯方式属于常见的“服务器客户端”的通信模型
    即通常所说的轮询式

对于 PDO 和 SDO 的报文 ID 分配
为了减少网络的组态工作量, CANOpen 预定义了强制性的缺省标识符(CAN-ID)分配表
该分配表是基于 11 位 CAN-ID 的标准帧格式
将其划分为 4 位的 功能码(Function-ID) 和 7 位的 节点号(Node-ID)
CAN笔记(17) 预定义报文ID_第7张图片
在 CANOpen 里也通常把 CAN-ID 称为 通信对象编号 COB-ID(Communication Object Identifier)

所以可以分清楚两个易于混淆的名称:

  • COB-ID
    通信对象 ID 号,即 CANOpen 中对某种通讯对象的报文帧 ID
    即 CAN 报文的 11 位 ID,代表了一种 通讯含义

  • Node-ID
    节点 ID 号,即 CANOpen 网络中的 节点地址
    CANOpen 规定了逻辑上最大 128 个节点,所以 Node-ID 最大为 128(7 位)

COB-ID 和 Node-ID 无必然联系
但在过程数据对象(PDO)和服务数据对象(SDO)中, COB-ID 中包含了 Node-ID

由于需要区分每个 CANOpen 节点的输入和输出
所以 PDO 分为 TPDO(发送PDO)和 RPDO(接收PDO)
发送和接收是 以 CANopen 从站节点为参考(如果 CAN 主站就相反)

TPDO 和 RPDO 分别有 4 个数据对象,每种数据对象就是 1 条 CAN 报文封装:
CAN笔记(17) 预定义报文ID_第8张图片
这些都是数据收发的容器
筐为使用者准备好,就看使用者在里面放什么东西了

而 SDO 就相对比较简单固定
发起通讯的 “问”SDO 的 CAN 帧 ID 就是 600h +node-ID
这里的 Node-ID 是被问的节点地址
而被问的节点 “应答” SDO 的 CAN 帧 ID 就是 580h +node-ID

一般在 CANopen 网络中,只有 NMT 主机能发起 SDO 通讯,进行节点参数配置或者关键性参数的传递

当然从节点也可以对其他从节点发起 SDO 通讯


参考:

《CANopen 轻松入门》


相关推荐:

CAN笔记(16) CANOpen简介
CAN笔记(15) STM32-M4 CAN通讯
CAN笔记(14) STM32-M4 寄存器
CAN笔记(13) STM32-M4 bxCAN
CAN笔记(12) 同步


谢谢!

你可能感兴趣的:(CAN笔记)