0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

[CANopen] 使用 CANopenEditor 工具编辑 CANopen 对象字典

先楫半导体HPMicro 2026-03-20 08:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

CANopen是一种基于CAN总线的高层通信协议,其核心对象字典(Object Dictionary)定义了设备的全部参数与功能。为满足不同厂商设备在特定场景下的要求,对象字典必须被精确配置,而手动修改这一过程通常较为繁琐。在最新发布的 hpm_sdk v1.10.0 中,支持使用 CANopenEditor 编辑的对象字典,让开发者可以更直观地管理对象字典与网络。本文将介绍如何利用这款新工具编辑对象字典,并一键生成可直接编译的源文件。


1、CANopenEditor 获取

CANopenEditor 工具获取链接:https://github.com/CANopenNode/CANopenEditor
工具包下载地址:https://github.com/CANopenNode/CANopenEditor/releases/tag/v4.2.3

工具使用步骤如下:

1. 下载并解压 CANopenEditor-v4.2.3-binary.zip 工具包;

2. 运行 CANopenEditor-v4.2.3-binary/net8.0-windows/EDSEditor.exe 以启动编辑器;

3. 通过菜单 File -> Open,导入 CANopenEditor-v4.2.3-binary/net8.0-windows/Profiles 下的 DS301_profile.xpd 协议模板即可开始编辑。

导入成功后,如下图所示:

5e98fed6-23f4-11f1-96ea-92fbcf53809c.png

以下是该工具配置菜单栏的介绍:

1. Device Info 中存放了该模板字典的基本信息;

2. Object Dictionary 是对象字典中具体的内容定义,包含每个对象以及具体的含义,这是对象字典的精髓;

3. TX PDO Mapping 和 RX PDO Mapping 显示了前面字典中,配置的 PDO 映射关系;

4. Modules 可以忽略。


2. CANopenEditor 配置

进入 Object Dictionary 目录,如下图所示:

5ea8120e-23f4-11f1-96ea-92fbcf53809c.png

这是 CANopenEditor 配置的重点,以下是菜单选项的简单介绍:

1. Communication Specific Parameters, 大部分和通信相关的参数以及通用的参数都在这个里面定义;

2. Manufacturer Specific Parameters, 存放设备或者功能相关的参数;

3. Device Profile Specific Parameters, 存放和行业协议相关参数,比如 DS402/DS401 相关协议在这个部分定义。


2.1 配置标准对象参数

左边 Object Dictionary 目录下,已有部分标准对象参数(置灰的表示已有定义,但是在该模板中未使能),用户可以根据自己的需求,对这些参数进行配置。
以对象 0x1008(Manufacturer device name) 为例,介绍对象的参数含义及配置方法:

5eb46996-23f4-11f1-96ea-92fbcf53809c.png

如上图,这部分配置由四个部分组成:

1. 对象 0x1008 此时置灰,表明该对象未使能,此时导出 map 表,这个对象不会被包含在内;

2. 介绍了该对象的名称和属性:Name - Manufacturer device name, Obj Type - VAR(variable 相当于变量,还有 array 相当于数组,record 相当于结构体,这个参数在对象添加时确定,确定后无法修改), Data Type - VISIBLE_STRING, SDO - ro(对于SDO协议的权限是只读), PDO - no(对于PDO协议没有访问权限), SRDO - no, Default Value - 未填写;该部分为只读,在第 4 部分进行配置;

3. 对象的名称以及描述在这部分配置;

4. 对象的属性,也是对象配置最重要的部分,如第 2 部分中提到的 Data Type, Access SDO/PDO/SRDO, Default Value 就在这部分配置; 同时,还有三个重要参数需要关注, 即 Count Label - 表明这个参数归属哪种协议, Storage Group - PERSIST_COMM(选择性持久化通信参数,介绍该对象的存储属性,是否应该保存到ROM中,相对应的还有 ROM/RAM), Enabled - 勾选即使能该对象;

而此处,我们需要对该对象第 4 部分的部分属性做如下修改:

1. Default Value: HPMICRO Canopen Demo

2. Access SDO: rw

3. Enabled: 勾选

至此,对象 0x1008 已配置完成。


2.2 介绍生成的对象字典文件

在执行完章节 2.1 后,直接生成对象字典文件(具体操作请参考章节 2.4) OD.c/OD.h, 其中对象 0x1008 的属性应该和我们上述设置一一对应,以下依旧以对象 0x1008 为例,简单介绍这两个文件。

2.2.1 OD.c 文件

打开生成的 OD.c,可以看到如下结构体:

1. OD_PERSIST_COMM - 主要对象参数的结构体,属性是选择性持久化通信参数,上述定义的对象 0x1008 就定义在这个结构体内;

5ec23d50-23f4-11f1-96ea-92fbcf53809c.png

2. OD_RAM - 存储属性为 RAM 的对象;对象定义在 OD_PERSIST_COMM 还是 OD_RAM 即受上述的 Storage Group 参数决定;

3. ODObjs - 描述了所有对象的参数类型,访问属性和参数长度;此时对象 0x1008 属性为 SDO 可读写, 缺省值(HPMICRO Canopen Demo)长度为 20 字节;

5ece888a-23f4-11f1-96ea-92fbcf53809c.png

4. OD - sample 中最终会通过这个结构体指针对 map 进行读写;

2.2.2 OD.h 文件

OD.h 中定义了上述 OD.c 中用到的所有的变量和结构体的定义, 比如上述提到的 OD_PERSIST_COMM_t, OD_RAM_t 等;此外,用户还需要关注的是以下宏定义:

5eded56e-23f4-11f1-96ea-92fbcf53809c.png

这些宏定义描述了 CANopen 中所有协议涉及的对象数量,这个是根据上述 Count Label 统计出的。以宏定义 OD_CNT_NMT 为例,表明 NMT 数量为 1,在 CANopen 协议中,NMT 协议是最基本的协议之一,数量必须大于 1,否则会报错。

5eeaf010-23f4-11f1-96ea-92fbcf53809c.png

综上,我们介绍了如何使能并配置一个对象,同时介绍了 CANopenEditor 的配置和生成 map 表的对应关系。当然,想要配置出和 SDK sample 中同样的 map 表,还需要修改很多参数,用户可以参考 hpm_sdk v1.10.0 中,hpm_sdk/middleware/CANopenNode/port/objdict 路径下的 OD.c 文件,配置基本的参数对象。


2.3 增加一个新的对象参数

经过章节 2.1, 2.2 的配置,设备已具备一个基本的对象字典结构。然而,该默认配置中所有 PDO 的映射参数均为空。这意味着,即使 PDO 的传输条件被满足,从站设备也因缺乏有效的数据映射而不会发送任何 PDO 报文。因此必须在对象字典中定义应用对象,并将其配置到相应的 PDO 映射表中。本章节将详细阐述如何新增一个应用对象条目,设定其 SDO 访问权限,并将其分配为 TPDO 的映射内容,从而使能有效的过程数据通信。

5ef69f14-23f4-11f1-96ea-92fbcf53809c.png

在 Manufacturer Specific Parameters 区域, 左击 Name, 选择 Add,会出现一个 Create new OD Index 的对话框,用户需要设定三个参数:Index, Name, Object Type。
此处设定:

1. Index - 2102

2. Name - PDO_Para(表明这是给 PDO 使用的一个对象参数)

3. Object Type - VAR(表明这是一个变量)

点击 Create, 这个参数就添加好了。但是,用户还需要对这个对象进行属性配置,如 2.1 章节中对第 4 部分对象属性的描述,配置如下:

1. Default Value: 0xAA

2. Data Type: UNSIGNED32

3. Access SDO, PDO: rw(对 PDO, SDO 都分配了读写属性,主站可以通过这两种协议对 0x2102 这个对象的数据进行读写)

4. Storage Group: RAM

5. Enabled: 勾选

当然,由于这个参数是给 PDO 使用的,因此还需要修改 0x1600(RPDO) 和 0x1A00(TPDO) 的 subindex0 和 subindex1,以 0x1600 为例:

5f040474-23f4-11f1-96ea-92fbcf53809c.png

至此,所有配置步骤均已完成。


2.4 输出对象字典文件

生成对象字典文件(OD.c/OD.h), 如下图所示:

5f117ce4-23f4-11f1-96ea-92fbcf53809c.png

步骤如下:

单击 File, 选择 Export CanOpenNode..., 修改路径为 hpm_sdk/middleware/CANopenNode/port/objdict/, 替换已有的 OD.c/OD.h。

Notes:

Save Project As.../Export, 会将这次的改动生成一个新的 DS301_profile.xdd,用户下次导入这个文档,就可以直接在这次的基础上进行新的开发和改动。

Save Network XML, 会将这次改动后的对象字典,生成一个 XML 文档,可供后续其他平台的开发。


3. 运行结果分析

编译 hpm_sdk v1.10.0 中的 sample: hpm_sdk/samples/canopen/slave 并烧录到开发板,以 hpm6p00evk 为例(作为从站),主站使用 canbox(便于观察数据包进行分析)。数据交互如下:

1.从站运行成功并结束初始化后,将发送一个 init(0x00) 包,然后从站会自动切换至 pre-optional,并开始发送 pre-optional(0x7F) 包:

5f1b485a-23f4-11f1-96ea-92fbcf53809c.png

2.主站发送 start remote node(00 01) 命令,从站接收成功后,立刻开始发送 PDO(0xAA) 数据包,同时切换到 optional 状态并开始发送 optional(0x05) 包:

5f26b262-23f4-11f1-96ea-92fbcf53809c.png

3.当收到 TPDO 的数据包后,说明对象 0x2102 的值和 TPDO 的属性配置成功,而配置时,还对 SDO 也做了访问配置,因此可以通过 SDO 去读 0x2102 的值:

5f39d78e-23f4-11f1-96ea-92fbcf53809c.png

4.通过 SDO 改写 0x2102,改写成功后,PDO 将发送新的 0x2102 的值:

5f44de04-23f4-11f1-96ea-92fbcf53809c.png

5.再次读取 0x2102 的值以做确认:

5f4fb6a8-23f4-11f1-96ea-92fbcf53809c.png

此时,0x2102 已经被主站改写为 0xBB 并保存在 map 中。


4.总结

CANopenEditor 工具可替代手动修改,以简化对象字典的配置过程。hpm_sdk v1.10.0 中的 CANopen demo 对象字典即由该工具编辑、生成,可作为用户实现自定义配置的参考基础。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19240

    浏览量

    405201
  • CAN总线
    +关注

    关注

    146

    文章

    2052

    浏览量

    135611
  • CAN
    CAN
    +关注

    关注

    59

    文章

    3107

    浏览量

    473848
  • CANopen
    +关注

    关注

    8

    文章

    526

    浏览量

    49946
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    canopen如何通过对象字典控制外设?

    各位大佬好,我在移植canopen的时候碰到一个疑问。比如我修改对象字典2000,子索引为0这个目录下的值,如何这个对象映射的是某个led灯的亮灭,输入1为亮,0为灭。 问题就是我发送
    发表于 09-11 06:04

    Canopen协议读后感想

    充分利用了该特征,达到了数据传输实时性的目的。2,CANopen协议提出了OD(object dictionary,对象字典)的概念。这个概念非常重要,其使得控制节点抽象化、标准化了。所有的控制节点都可以
    发表于 09-21 12:58

    如何去掌握CANOpen最难理解的对象字典

    如何去掌握CANOpen最难理解的对象字典
    发表于 05-19 06:24

    基于STM32的CANopen通讯协议的实现

    1_【基于STM32的CANopen通讯协议的实现】 CANopen分为三部分: 1、通信部分:PDO协议,SDO协议,NMT协议,特殊功能对象 2、对象
    发表于 08-20 08:12

    canopen简单提要

       canopen协议属于应用层协议,是由一系列子协议组成,分为通讯子协议和设备子协议,通讯子协议例如CIA 301子协议对canopen网络的架构进行了规范 ,针对某些特定的对象字典
    发表于 09-15 07:56

    canopen协议与can特点

       canopen协议属于应用层协议,是由一系列子协议组成,分为通讯子协议和设备子协议,通讯子协议例如CIA 301子协议对canopen网络的架构进行了规范 ,针对某些特定的对象字典
    发表于 09-15 07:10

    如何修改CANopen节点的心跳报文的频率

    文章目录一、前言一、前言通过修改CANopen节点的对象字典,改变它发送心跳报文的频率。测试硬件如下:
    发表于 02-15 07:38

    轻松掌握CANOpen最难理解的对象字典

    CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通讯协议,其中对象字典是协议中最为核心的概念,透彻掌握其相关内容,运用CANOpen
    发表于 01-11 13:35 1.2w次阅读
    轻松掌握<b class='flag-5'>CANOpen</b>最难理解的<b class='flag-5'>对象</b><b class='flag-5'>字典</b>

    CANOpen系列教程12 对象字典编辑器操作说明

    CANOpen系列教程12_对象字典编辑器操作说明
    的头像 发表于 03-06 15:27 9302次阅读

    CANOpen系列教程10_ 关于Canfestival及对象字典生成工具环境搭建

    CANOpen系列教程10_关于Canfestival及对象字典生成工具环境搭建
    的头像 发表于 03-06 15:52 1.3w次阅读

    CANOpen系列教程09 _CANOpen对象字典

    CANOpen系列教程09_CANOpen对象字典
    的头像 发表于 03-06 16:31 8646次阅读

    CANopen | 对象字典OD 02 - 修改CANopen节点的心跳报文发送间隔

    文章目录一、前言一、前言通过修改CANopen节点的对象字典,改变它发送心跳报文的频率。测试硬件如下:
    发表于 12-14 19:12 3次下载
    <b class='flag-5'>CANopen</b> | <b class='flag-5'>对象</b><b class='flag-5'>字典</b>OD 02 - 修改<b class='flag-5'>CANopen</b>节点的心跳报文发送间隔

    加速CANopen设备开发的设计工具

    设计对象字典过程中往往耗时较长、容易犯错,或与预期不符而返工,或需要设计多种功能而多次重复工作。配置对象字典时,需要一个专业的、高效的CANopen
    的头像 发表于 07-27 11:34 3420次阅读

    使用ES32实现CANopen从机

    字典CANopen设备模型如下图。对象字典描述了CANopen设备的所有行为和参数。CanFestival是一套开源免费的
    的头像 发表于 03-26 19:05 2468次阅读
    使用ES32实现<b class='flag-5'>CANopen</b>从机

    盟通方案|CANopen数据链路配置工具

    CANopen产品开发过程中,并非所有应用场景的CANopen网络拓扑都是确定的,这需要CANopen网络能够灵活配置设备间对象字典的收发
    的头像 发表于 05-30 14:19 922次阅读
    盟通方案|<b class='flag-5'>CANopen</b>数据链路配置<b class='flag-5'>工具</b>