CANopen协议 学习笔记

大纲

前沿:以问题为导向学习是最高效的,本文主要讲述在学习Canopen协议中的一些疑惑点,

分享一些学习心得,不讲协议本身的内容。

1.主机和从机的概念?

2.PDO和SDO的区别是什么?

3.OD存在的意义是什么?

4.心跳检测的意义?0x00、0x05、0x7f?

5.COB-ID和PDO的ID有关系吗?SDO的ID是主机的ID还是从机的ID?

COB-ID = Function code+node_id

  1. PDO,SDO 数据存在几个字节,心跳节点 数据存在几个字节?

7.PDO主要关系的几点? 触发方式+通讯参数和映射参数

8.SDO传输的三种方式?

9.通讯模型 : 服务器到客户端、消费者和生产者等。

10.CANOPEN 与CAN的不同点

  1. 通讯模型

(1)服务器到客户端 :客户端发送数据,服务器需要回传数据 (SDO)

(2)消费者和生产者 :生产者发送数据,消费者不需要返回数据(PDO)

(3)主机和从机 Canopen协议中NMT模式控制节点的状态,启动状态、预准备状态、

工作状态、停止状态

  1. 主机和从机的概念

对于从站而言发送消息给主站就是TPDO模式,其中TPDO总共有4个。

对于从站接收主站的消息就是RPDO模式,其中RPDO总共有4个。

  1. PDO 和SDO、NMT区别

  2. PDO:根据模式从机选择定时发送数据或者等数据变化在发送数据给主机,以请求主机

做出一些列相应。

_模型:_生产者(producter)和消费者(comsumer)模式,接收方不会返回数据值

  • SDO:通过主机发送命令(cs+主索引+子索引+4个字节数据),对对象字典进行操作改变数据

,如改变波特率,心跳的时间以及对于模式选择的切换,通过SDO_Handle进行处理即可。

_模型:_客户端(client) 和服务器(service)模型

  • NMT:主机控制节点状态

状态(4个):节点上线(boot up)、预准备节点(pre-operational)、节点运行(operational)、节点停止(stoped)

_模型:_主机(host)和从机(slave)

4.OD存在的意义是什么?

作为用户预先定义的数据库,实现参数的赋值给函数中的一些变量。通过功能码SDO命令修改。

通过SDO模式可以修改对象字典中的一些值。主索引,子索引相当于书的目录, 上位机通过发送CS命令读写

其中的数据,实现对于全局变量的修改, 如对波特率的修改、心跳时间间隔的修改等

5.心跳检测的意义?0x00、0x05、0x7f?

1.是主机检测从机的方式,从机发送心跳包,主机接收到心跳包后,才会向从机发送消息

否则主机就认为从机存在故障。

0x00 boot up 节点上线

0x7f 节点在准备状态

0x05 节点在工作状态

0x04 节点停止状态

CANopen协议 学习笔记

通过这个的设置,上位机可以通过NMT命令控制节点的状态,其命令中运行的参数主要就是心跳报文的状态

=========================在编写接收函数的时候需要考虑以下设计内容============================

1.NMT mode 主机通过命令管理从机的状态,如节点的上线,预先准备状态,工作状态,停止状态,复位状态等等

1.首先通过功能模式进入NMT管理模式 COB-ID=000

2.buf[1]是节点地址, buf[0]是命令码,为什么要存在buf[1],存放的是节点的ID,判断是不是我想控制的ID即可。

通过switch方式,可以控制节点的工作状态。

2.SDO mode 主机通过命令修改相关参数实现相应的功能(节点不工作在停止状态 0x7f)(这个描述的很抽象)

特别的,SDO和PDO将节点地址放在COB-ID中,主机发送命令给从机,判断是否是相同的ID,就可以操作

相应的功能。SDO传输数据是8个字节(CS(1byte)+主索引(2byte)+子索引(1byte)+数据4byte)

3.RPDO mode 前提: (heartbeat.buf[ 0 ] = 0x05),

  1. 如果主机发送消息,下位机接收到消息

  2. 复制接收到的消息给一个全局变量(为了进行数据比较,不同变量之间才可以比较)

  3. 从站自己做出相应的命令,如通过数据对一个引脚控制另一个引脚等等作用

6.COB-ID和PDO的ID有关系吗?SDO的ID是主机的ID还是从机的ID?

COB-ID = 功能码(7bit)+节点ID(4bit)

NMT :功能码000

SDO 功能码 581和601

PDO 功能码 181和其他总共有8个

Heartbeat 701

CANopen协议 学习笔记
  1. PDO,SDO 数据存在几个字节,心跳节点 数据存在几个字节?

PDO :1~8个字节长度

SDO存在 8个字节 (CS+主索引+子索引+date)

HEARTBEAT心跳节点存在 1个字节 (存放节点状态)

NMT模式存在 2个字节 (存放控制状态与控制从机的ID)

CANopen协议 学习笔记

8.PDO配置主要考虑那几点? 触发方式+通讯参数和映射参数

1)触发方式:

1.时间触发+事件触发

2.同步(sync)和异步方式

2)通讯参数 + 映射参数 :

CANopen协议 学习笔记

3)同步传输和异步传输的区别:

CANopen协议 学习笔记

9.SDO传输的三种方式?

SDO传输方式主要有两种,快速传输方式和普通传输方式

  • 快速SDO:来回一次就能搞定,读取和写入的值不能大于32位

CANopen协议 学习笔记

10.CANOPEN 与CAN的不同点

不同点的角度:从OSI 7层网络模型

  • CAN(controller Area Network)只规定了物理层和数据链层,这些都是通过硬件实现。

普通的CAN只需要关系收发以及收发的标志位即可,收发的速度(波特率)等。

  • CANopen 规定了应用层,能够兼容不同厂商之间进行通信的方式。

CANopen协议规范文本经过多次修改,CiA在CiA301基础上,对各个行业退出 设备子协议

关于设备子协议,就是对不同行业的应用对象,对CANopen内部的数据含义进行重新定义,

或添加新的控制逻辑。

下图是描述不同协议的编号:

CANopen协议 学习笔记

下图是CANopen协议的框架

CANopen协议 学习笔记

Original: https://blog.csdn.net/delphigbg/article/details/127809673
Author: 蝈蝈(GuoGuo)
Title: CANopen协议 学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/656387/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球