can open 的学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27087571/article/details/81048187

can总线基本知识的回顾

1.从osi模型上看,can知识属于物理层和数据链路层.而canopen相当于can的应用层.是一种分布式无主机的串行通信方式.
2.帧的种类包括,数据帧,遥控帧,间隔帧,过载帧,错误帧.
3.同一个网络必须设定相同的通信速率,不同的网络可以设定不同的通信速率.通信速率最高为1M,一般为250k,500k.根据通信线的长度会降低频率.
4.根据数帧的id来仲裁,该发那一帧数据.id号越小,优先级越高.
5.can总线的优点是消息优先性仲裁,自动应答,crc校验,错误重发.

自定义can的应用层

在实际使用的时候我们只有can肯定是不够的,可以使用canopen也可以自己自定义can的应用层

自定义应用层的实现

根据can协议的特点,使用id,来区分不同的消息,数据最大的长度为8个字节.因此我们必须充分利用这个两个特点自定义我们自己的应用层通信协议.实际上就是对id和数据域再进行一层打包封装.
以和利时的驱动器为例:

应用层模型

这里写图片描述
其中这个模型通常需要解决下面的3个问题:

  1. 假如站点a将数据放送给b站点,b站点如何知道这一帧数据是从站点a发送来的?
  2. 不同类型的帧怎样区分开,因为不同的数据帧的解析方式是不一样的?
  3. 如果需要应答我们应该怎样正确应答?

    • id 和数据域的封装
      这里写图片描述
      这里写图片描述
    • 定义的数据帧格式实例
      这里写图片描述
      这里写图片描述
      根据上面的举例,我们可以看到,和利时自定义的应用层是如何解决上面的问题的?
      问题1,2都是通过重新定义数据段来解决的.第0个字节的代表了消息的来源,第一个字节代表了数据帧的类型.
      问题3 根据不同数据帧,我们会使用相应的功能的帧进行应答.

canopen

简单的来讲,如果理解了上面自定义can的应用层的协议之后,就可以理解canopen,canopnen就是更加复杂严谨的协议.对can协议的数据在作进一步的规划.
canopen是主从协议栈包含一个主站和多个从站,每个从站都有一个命令id和功能对照表,和四种功能状态.

canopen协议,

  • id的规划
    这里写图片描述
    由上述可以看出,canopen的id最多只有7位,总共128个id,其中0作为特殊用途.functionCode和Node-ID在一起又被称为COB-ID。

  • 对于canopen规定的数据帧类型包括NMT、SYNC、EMERGENCY、TIME STAMP、SDO、PDO.以sdo为例:
    对于问题1, 可以使用function code 来判段

  • 对于问题2,3,每个节点都需要记录自己的命令id对照表,根据收到的信息和表里的内容一一对应就知道谁发过来的.
    这里写图片描述
展开阅读全文

没有更多推荐了,返回首页