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

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

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

8.SDO传输的三种方式?

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

10.CANOPEN 与CAN的不同点

1. 通讯模型 

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

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

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

工作状态、停止状态

2. 主机和从机的概念

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

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


3. PDO 和SDO、NMT区别

  • 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协议 学习笔记_第1张图片

        

             通过这个的设置,上位机可以通过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. 复制接收到的消息给一个全局变量(为了进行数据比较,不同变量之间才可以比较)

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


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协议 学习笔记_第2张图片


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

                PDO :1~8个字节长度

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

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

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

             


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

      1)触发方式:

      1.时间触发+事件触发

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

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

              

CANopen协议 学习笔记_第3张图片

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

CANopen协议 学习笔记_第4张图片


9.SDO传输的三种方式?

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

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

CANopen协议 学习笔记_第5张图片

10.CANOPEN 与CAN的不同点

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

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

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

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

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

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

或添加新的控制逻辑。

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

CANopen协议 学习笔记_第6张图片

    下图是CANopen协议的框架

      

CANopen协议 学习笔记_第7张图片

你可能感兴趣的:(#,CanOPen,学习,java,分布式)