CANopenNode Master 配置

news/2024/11/2 11:34:13/

文章目录

  • CANopenNode 简介
  • CANopenNode 主栈
  • SDO Client
  • PDO 通讯参数
    • RPDO 通讯参数
    • RPDO 通信参数设置实例
    • TPDO 通讯参数
    • TPDO 通信参数设置实例
  • PDO 映射参数
    • RPDO 映射参数设置实例
    • TPDO 映射参数设置实例

CANopenNode 简介

CANopenNode 是一个开源的免费的开源 CANopen 协议栈。
在这里插入图片描述

  • 对象字典为任何变量提供清晰灵活的组织。可以直接或通过读/写函数访问变量。
  • NMT从设备启动、停止、复位设备 。
  • 监控 CANopen 设备的心跳生产者/消费者错误控制。
  • 对象字典中的变量可以动态映射到 TPDO,然后根据通信规则进行传输。传输的数据被其他设备当作 RPDO 进行接收。
  • SDO服务器支持对 CANopen 设备内所有对象字典变量的快速、分段和块传输访问。
  • SDO客户端可以访问网络内任何 CANopen 设备上的任何对象字典变量。
  • 紧急报文生产者/消费者。
  • 同步生产者/消费者,启用 PDO 对象的网络同步传输。
  • 时间戳生产者/消费者,以毫秒分辨率实现日期和时间同步。
  • LSS CANopen 节点ID和比特率设置、主站和从站、LSS 快速扫描。
  • CANopen 网关,CiA309-3 NMT 主站、LSS 主站和 SDO 客户端的 ASCII 命令接口。
  • CANopen Safety、EN 50325-5、CiA304、安全相关网络中的“类 PDO”通信。

CANopenNode 主栈

  • CANopenNode 通常作为从设备的协议栈使用,也可以作为主栈使用。
  • 在CANopen协议中,我们常用的功能是SDO和PDO,其中SDO分为服务器和客户端两种角色,而PDO是没有主从之分的。

SDO Client

  • 在 CANopenNode 中包含了SDO Client的功能,当需要作为主栈使用时,可通过修改配置中的 CO_CONFIG_SDO_CLI 开启 SDO Client 功能,通过相应的函数即可读写从设备的任意对象。

PDO 通讯参数

无论是作为从设备还是主设备使用,接受数据都是使用RPDO,发送使用TPDO。
在这里插入图片描述

RPDO 通讯参数

typedef struct{UNSIGNED8      maxSubIndex;UNSIGNED32     COB_IDUsedByRPDO;UNSIGNED8      transmissionType;
}OD_RPDOCommunicationParameter_t;
  • 在RPDO中只使用了前2个通讯参数
    • maxSubIndex
      • 该变量此处为2,三个子索引对应的含义如下
        • 0 maxSubIndex
        • 1 COB-ID
        • 2 transmissionType
    • COB_IDUsedByRPDO
      • 用于接收数据所使用的 COB-ID
    • transmissionType
      • 当值小于等于240时接收方式为同步接收,即产生特定个同步对象之后该RPDO才会处理接收到的数据。其他时候即使收到对应的RPDO也不会处理。
  • 每一个对象即代表一个RPDO,单个RPDO可以映射的最大长度为8字节
  • 作为主栈使用时,主栈的RPDO所使用的 COB-ID 与从栈的 TPDO 一致
  • 主栈的传输类型通常为 254,采用异步接收方式处理 RPDO

RPDO 通信参数设置实例

在这里插入图片描述

  • 图中包含一个主节点和4个从节点
  • 从节点的 NODE-ID 分别为1,2,3,4
  • 每一个节点都包含了一个TPDO,其TPDO所用COB_ID为 0x180 + NODE-ID
  • 主节点的 RPDO 与从节点的 TPDO 之间,传输类型和 COB_ID 配置相同。
  • 主节点配置的 RPDO,对应的节点会添加到过滤器设置中,从而允许该报文被接收处理。
  • 当主节点中查找找到对应的 RPDO 之后,再根据 RPDO 中的映射参数将数据复制到对象字典中。

TPDO 通讯参数

typedef struct{UNSIGNED8      maxSubIndex;UNSIGNED32     COB_IDUsedByTPDO;UNSIGNED8      transmissionType;UNSIGNED16     inhibitTime;UNSIGNED8      compatibilityEntry;UNSIGNED16     eventTimer;UNSIGNED8      SYNCStartValue;
}OD_TPDOCommunicationParameter_t;
  • RPDO 通讯参数只使用了前面2个,而TPDO中除了COB_ID和传输类型之外,还需要设置 inhibitTime、eventTimer 和 SYNCStartValue。
  • 主设备中的 TPDO 所使用的 COB-ID 应与从设备中的 RPDO 一致,传输类型也需要保持相同。

TPDO 通信参数设置实例

在这里插入图片描述

PDO 映射参数

typedef struct {UNSIGNED8      numberOfMappedObjects;UNSIGNED32     mappedObject1;UNSIGNED32     mappedObject2;UNSIGNED32     mappedObject3;UNSIGNED32     mappedObject4;UNSIGNED32     mappedObject5;UNSIGNED32     mappedObject6;UNSIGNED32     mappedObject7;UNSIGNED32     mappedObject8;
} OD_RPDOMappingParameter_t;
  • 映射参数的用于描述一个 PDO 中的数据与本地对象字典中对象之间的映射关系
  • TPDO 将对象字典中的对象映射到 TPDO 后,通过触发 TPDO 传输,可将对象字典中的数据按照映射的格式发送出去。
  • RPDO 将对象字典中的对象映射到 RPDO 后,在接收到RPDO数据时,会将接收到的数据更新到对象字典中。
  • 下面是各参数的含义:
    • numberOfMappedObjects
      • 该 PDO 中映射的对象个数
    • mappedObject1 ~ mappedObject8
      • 对应一个映射项
      • bit31-bit16 索引
      • bit15-bit8 子索引
      • bit7-bit0 数据长度,其单位为bit,在CANopenNode中,该值必须是 8 的整数,即以字节为基本单位

RPDO 映射参数设置实例

  • 假设需要将从设备如下几个对象映射到 TPDO中,从设备TPDO使用的 COB-ID为 0x181 :
indexsub-indexlen (byte)
0x20010x000x1
0x20020x000x1
0x20040x000x1
0x20080x000x1
  • 从设备TPDO1中消息与对象字典的映射关系如下:
byte0byte1byte2byte3
TPDO10x2001-0x000x2002-0x000x2004-0x000x2008-0x00
  • 而主设备除了通讯参数与从设备一致,其映射关系与从设备无关,是由主设备自身决定的,例如可将从设备通过TPDO发出的数据映射到下面几个对象中:
indexsub-indexlen (byte)
0x20080x000x1
0x20090x000x1
0x200a0x000x1
0x200b0x000x1
  • 当主设备接收到 ID 为 0x181 的数据帧后,便会根据 RPDO 的映射关系,将4字节的数据拷贝到映射的对象中去。

TPDO 映射参数设置实例

  • 假设需要将从设备如下几个对象映射到 RPDO中,从设备RPDO使用的 COB-ID为 0x201 :
indexsub-indexlen (byte)
0x20010x000x1
0x20020x000x1
0x20040x000x1
0x20080x000x1
  • 从设备RPDO1中消息与对象字典的映射关系如下:
byte0byte1byte2byte3
TPDO10x2001-0x000x2002-0x000x2004-0x000x2008-0x00
  • 而主设备除了通讯参数与从设备一致,其映射关系与从设备无关,是由主设备自身决定的,例如可将需要发送给从设备的数据映射到下面几个对象中:
indexsub-indexlen (byte)
0x20080x000x1
0x20090x000x1
0x200a0x000x1
0x200b0x000x1
  • 当主设备触发相应的事件之后,便会将数据从对象字典中拷贝到TPDO中进行发送,从设备通过RPD接收后,根据映射关系将数据拷贝到从设备的对象字典中。

http://www.ppmy.cn/news/81825.html

相关文章

CMS 8bit单片机C语言编写指南

0 Preface/Foreword 单片机包含两部分:程序内存(Program memory space)和数据存储器(Ram memory space)。 CMS单片机堆栈深度受限,随具体的芯片而固定。 1 CMS C程序框架及数据类型 1.1 源程序基本框架 Example: 1.2 CMS C中变…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层,box是他们的父级,一般浏览器支持都没什问题需要注意的是,确保父元素不是透明的, 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用,还得是纯色,没去深究,设置纯色…

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

【vsomeip】vsomeip安装与入门案例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍vsomeip的使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&am…

docker版jxTMS使用指南:python服务之jxUtils

本文讲解4.0版jxTMS中python服务的jxUtils模块,整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容 docker版本的使用,请参考:docker版jxTMS使用指南 jxUtils模块属于jxTMS扩展部分的基础模块,以…

ElasticSearch-索引和文档的创建修改删除

目录 一、创建索引 二、查看索引 三、索引是否存在 四、删除索引 五、创建文档 六、查看文档 七、更新文档 八、文档是否存在 九、删除文档 一、创建索引 # 创建一个默认的索引,默认是标准分词器的索引 PUT /es_db2# 创建一个默认为ik分词器的索引 PUT /e…

SAP 物料主数据基本数据1视图 参数有效值 字段的作用测试 <转载>

原文链接:https://blog.csdn.net/weixin_40672823/article/details/104773643 1.在物料主数据基本数据1视图中有个字段 参数有效值 如下图 有什么用途? 这个字段作用主要用在 BOM里面,官方说明如下 看说明很难理解下面通过一个业务实例来说明 业务要…

20年前,微软给金山那刀,现今一举将WPS推上领奖台,WPS,赢了

WPS,赢了 正如姚冬(金山办公副总裁)所说: 文本的命令行到图形界面的那次,改变整个人机交互的方式,我们公司历史上最大的一次危机也是那一次, 但我们依然挺过来了,我们相信这次技术浪…