当前位置: 首页 > article >正文

CANopen通讯协议笔记

CANopen通讯协议笔记

  • CANopen 通信对象编号
  • CANopen整体框架
  • 网络管理(NMT)
  • 主要任务
  • 上线报文
  • 心跳报文
  • 过程数据对象(PDO)
  • SDO服务数据对象
  • 对象字典概述

CANopen 通信对象编号

CANopen报文传输采用 CAN 标准帧格式。
这里的CAN-ID也叫COB-ID(C通信对象编号),Node-ID节点ID,最大128个,范围0-127。
在这里插入图片描述

简易CANopen消息
在这里插入图片描述

COB-ID 数据结构解析:
在这里插入图片描述
COB-ID:Communication Object Identifier,即 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整体框架

在这里插入图片描述

网络管理(NMT)

CANopen所有节点通信地位平等,区别于普通的CAN有仲裁判断优先级。
网络管理主机 NMT-Master(Network Management-Master)。采用的主从方式,主机节点可以向从节点发送和请求数据。同一个网络中只能有一个主节点,一个或者多个从节点。NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文。
在这里插入图片描述

主要任务

协调各个节点的同步、心跳、时间、错误提示等通讯控制,CANopen 还定义了一系列特殊协议(Special protocols)报文作用指挥所有节点的启动、停止。进入预操作状态、复位节点等。
在这里插入图片描述

在这里插入图片描述
从下图可以看到,预操作状态与操作状态可以互相切换。
在这里插入图片描述
以下表格是各种状态下可以运行或操作的指令
在这里插入图片描述
节点只要它上线,就会有一个上线报文消息,之后会有心跳报文持续的发送过来,如果没有心跳报文只有上线报文,可能的原因是1.没有设置心跳报文的间隔时间。2.状态没有跳转到预操作状态。

上线报文

在这里插入图片描述

不要误以为CAN-ID:0x705是CANopen节点的身份,CANopen节点的身份是0x05才对。那么0x705是什么意思?? 0x705 = 0x700(心跳报文)+ Node-ID(0x05),其中的Node-ID才是CANopen节点的身份。
在这里插入图片描述
符合CANopen对NMT节点上线报文的定义:CAN-ID = 0x700 + node-ID(0x05 = 0x705,然后长度01,接着数据段是0。

心跳报文

CANopen 应用中通常都要求在线
上电的从站定时发送状态报文(心跳报文),以便于主站确认从站是否故障、是否脱离网络。
在这里插入图片描述
CANopen 从站按其对象字典中 1017h 中填写的心跳生产时间(ms)进行心跳报文的发送,而 CANopen 主站(NMT 主站)则会按其 1016h 中填写的心跳消费时间进行检查,假设超过诺干次心跳消费时间没有收到从站的心跳报文,则认为从站已经离线或者损坏。

在CANbus总线上发送以下指令:

CANID : 0x00
帧长度:0x02
帧类型:数据帧
数据段:0x02,0x00(总线上所有节点)
有意思的是,CANopen从站收到该命令后,心跳报文停止了。

1、从时间戳上看到,报文是每1秒发送1次。
2、从CANID = 0x705得到,这个是Node_ID = 0x05的CANopen节点发出来的心跳报文。
3、报文的数据段只有1个字节(7F),表示该CANopen节点处于预操作状态。(在该状态下,PDO功能是关闭的)
在这里插入图片描述

CANID : 0x00
帧长度:0x02
帧类型:数据帧
数据段:0x80,0x05(Node-ID为0x05的CANopen节点)(单独对0x05节点开启预操作状态)
在这里插入图片描述

过程数据对象(PDO)

SDO服务数据对象

SDO服务数据对象 (Service Data object) 采用服务器客户端模式,这种模式的特色是一问一答。注意CANopen主节点是客户端(主要是索取消息),CANopen从节点是服务器(提供消息)。主要工作特定:有指定被接收节点的地址(Node-ID),并且需要指定的接收节点回应 CAN 报文来确认已经接收,如果超时没有确认,则发送节点将会重新发送原报文。

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

这里先提下PDO,PDO 和 SDO 的通讯区别在于,PDO 属于过程数据,即单向传输,无需接收节点回应CAN 报文来确认(无需应答,发送之后不管你有没有收到),从通讯术语上来说是属于“生产消费”模型。

在这里插入图片描述
在这里插入图片描述

由于需要区分每个 CANopen 节点的输入和输出,所以 PDO 分为 TPDO(发送 PDO)和(接收 RPDO),发送和接收是以 CANopen 从站节点为参考(如果 CAN 主站就相反)。TPDO和 RPDO 分别有 4 个数据对象,每种数据对象就是 1 条 CAN 报文封装

在这里插入图片描述

PDO 的两种传输方式:同步传输和异步传输。
在这里插入图片描述

对象字典概述

在这里插入图片描述
在这里插入图片描述
通用通讯对象十分重要,NMT 主站(CANopen 主站)在启动时,通常都全部或者部分读取所有从站中通用通讯对象中的索引,所以所有的通用通讯对象都必须在CANopen 从站中实现
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/319611.html

相关文章:

  • 2024/11/13 英语每日一段
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • MyBatisPlus 用法详解
  • 设计模式:工厂方法模式和策略模式
  • Oracle 11g rac 集群节点的修复过程
  • 制作一个能对话能跳舞的otto机器人
  • SentencePiece进行文本分类
  • 大数据-147 Apache Kudu 常用 Java API 增删改查
  • 二进制位运算题
  • python库 | lxml库
  • Python_yield
  • 【项目实战】如何在项目中自定义错误码
  • VisualStudio编译时出现无法启动mt.exe
  • C++之spring
  • Codeforces Round 973 (Div. 2) C. Password Cracking
  • 抓取股票数据
  • 28岁打算转行靠谱么,这个年龄转行,有什么适合的行业么?
  • opencv滤波算法总结
  • Linux挂载命令
  • Docker 的安装部署与基本使用
  • Apache CVE-2021-41773 漏洞攻略
  • What is the new in C#11?
  • 验收测试:从需求到交付的全程把控!
  • BERT训练环节(代码实现)
  • 通过docker启动ElasticSearch后为ElasticSearch设置用户和密码