• 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    节点停止状态

                      

            

                 通过这个的设置,上位机可以通过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


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

                    PDO :1~8个字节长度

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

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

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

                 


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

          1)触发方式:

          1.时间触发+事件触发

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

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

                  

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


    9.SDO传输的三种方式?

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

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

    10.CANOPEN 与CAN的不同点

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

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

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

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

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

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

    或添加新的控制逻辑。

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

        下图是CANopen协议的框架

          

  • 相关阅读:
    谷粒学院——后台管理系统功能模块
    IP组播简介
    14年本科毕业,3个月转行软件测试月薪13.5k,32的岁我终于找对了方向
    SpringBoot 使用 Sa-Token 实现账号封禁、分类封禁、阶梯封禁
    Baklib|如何才能做好企业内部知识管理?
    处理爬取html内容调用RestTemplate方法远程调接口会出现中文乱码问题
    nginx-proxy-manager在线申请证书
    .NET 8新预览版本使用 Blazor 组件进行服务器端呈现
    SRS srs-bench
    虚拟与实际内存之间的关系
  • 原文地址:https://blog.csdn.net/delphigbg/article/details/127809673