zoukankan      html  css  js  c++  java
  • CANopen的相关学习

    CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。

    由于CAN总线只定义了物理层和数据链路层,并没有定义应用层,因此需要CANopen通信协议来统一度量,把各种设备标准化。CANopen 实现了OSI模型中的网络层以上(包括网络层)的协定。

    标准的 CANopen 页框:

    CANopen 将 CANbus 的 11 位元 ID 称为通讯对象 ID (COB-ID)。分为 4 位元的功能码及 7 位元的 CANopen 节点 ID。

    7 位元的 ID 共有 128 种不同的组合,其中 ID 0 不使用,因此一个 CANopen 网络上最多允许 127 台设备。

    应用CANopen时,需要传递的配置信息和应用信息都放在过程数据对象PDO(Process data object)和服务数据对象SDO(Service data object)

    过程数据对象(PDO)服务

    PDO分为TPDO和RPDO

    PDO属于过程数据,单向传输,无需接收节点回应CAN报文来确认,属于“生产消费”模型

    一个节点分别有 4 个 TPDO 及 4 个 RPDO 。

    PDO的触发方式:

    • 事件触发Event:
    当数据变化时,立刻发送出去,不需要等待主机轮训才发送,所以实时性好,而且避免重复数据占用大量总线占用资源,就像数据压缩了一样。事件驱动类型的RPDO可立即处理收到的数据。
    • 远程请求或轮询RTR:
    此方式就像485通信一样,主控主动远程请求或者轮询,子设备才发送PDO。因为市面上有一些不支持远程帧的CAN控制器,不建议使用。
    • 同步传输SYNC:
    CAN总线上有一个设备作为SYNC信号的生产者,其他设备作为消费者。生产者和消费者都又SYNC计数功能,消费者计数到一定时(1~240),自动发送PDO。
    • if(同步传输&&事件触发):
    顾名思义,不仅满足定时还满足事件触发,才发送PDO。

     

    服务数据对象SDO

    服务数据对象用于读写节点的对象字典,现只实现SDO下载和上传的全速模式,不支持正常模式也不支持块下载和上传,因为数据量不大,实现的功能足够用,SDO全速下载和上传采用应答式服务,由监控终端向节点发送服务请求,由节点返回应答。

    SDO属于服务数据,“服务器客户端”模型,轮询式

    SDO传送机制:

            加速传送(Expedited transfer):最多传输4字节数据

            分段传送(Segmented transfer):传输数据长度大于4字节

            块传送(Block transfer):当传送数据长度大于4字节时,多个分段只由一个确认报文应答以增加总线吞吐量

    对象字典OD

    CANopen 设备都需要具备对象字典(Obiect Dictionary),用来设定设备组态及进行非即时的通讯。

    是一个有序的对象组,每个对象采用一个16位的索引值来寻址,为了允许访问数据结构中的单个元素,同时定义了一个8位的子索引。

    三个子协议:

    通信子协议描述对象字典的主要形式,以及对象字典中的通信对象和参数。适用于所有的CANopen设备,索引值范围为0x1000~0x1FFF

    制造商自定义子协议根据需求定义对象字典项,索引值范围为0x2000~0x5FFF

    设备子协议为各种不同类型的设备定义对象字典中的对象,其索引值范围为0x6000~0x9FFFF

  • 相关阅读:
    Redhat Lighttpd安装配置
    PHP正则表达式学习参考的文章
    50点提高PHP编程效率 引入缓存提升性能
    位运算符C语言
    Redhat Mongodb学习笔记
    Redhat Cacti安装配置
    HTTP 状态代码表示什么意思?
    map容器对象插入数据的4种方式
    socket网络间通信初识
    仿美团项目-第一部分
  • 原文地址:https://www.cnblogs.com/shinedaisiki/p/9818182.html
Copyright © 2011-2022 走看看