【问题标题】:What is Object dictionary in CANOpen?CANOpen 中的对象字典是什么?
【发布时间】:2018-11-03 15:57:00
【问题描述】:

我将在 linux 中使用 CANOpen。在内核中,linux有socketcan,我有一些问题需要进一步实现。

1-) 对象字典长什么样,是头文件还是EDS文件?

2-) 我需要对 pdo 和 sdo 配置使用对象字典吗?

3-) 我应该实现我的自定义 canopen 库,它只实现一些协议,还是使用像 canfestival 这样实现几乎所有协议和对象字典的库?

【问题讨论】:

    标签: can-bus canopen


    【解决方案1】:

    1) 对象字典定义了一组对象,其中数据可以存储在 CANopen 节点上。通过提供对象索引和子索引,可以使用 SDO 协议从 CAN 总线读取和写入对象字典中的对象。它们也可以从 CANopen 节点上的本地应用程序中读取和写入。可以说对象字典构成了从其他 CANopen 节点访问 CANopen 节点的 API。

    EDS 文件包含存在于特定型号 CANopen 节点中的所有对象的列表,包括数据类型、默认值、最小值和最大值以及一些属性。这有助于工具与 CANopen 节点进行通信。

    2) 使用 SDO 协议通过 CAN 总线完成配置以写入 CANopen 节点的对象字典。

    3) 如果您开发商业产品,您可能希望使用商业 CANopen 堆栈来支持完整协议。 (一个例子是我们维护的Kvaser CANopen Stack,但还有很多其他可供选择)

    如果您的项目许可政策允许,您可以使用开源 CANopen 堆栈之一。我想到了 CANFestival 和 CANopenNode,但还有其他的。

    但是,如果您只需要最少的功能,您也可以编写规范中的最低限度的代码。 NMT 状态机、只读 SDO 加速传输、包含少数强制对象和硬编码 PDO 的对象字典甚至可以为您提供符合标准的简约节点。

    以下对象在 CiA 301 中是强制性的

    • 0x1000 设备类型(只读)
    • 0x1001 错误寄存器(只读)
    • 0x1017 生产者心跳时间(常量)
    • 0x1018 身份对象(只读)
    • 此外,您还需要通信参数和映射参数 每个 PDO,但这些可以是常量。

    如果您想更进一步,您可以将网络上的所有其他节点预先配置为自动启动,然后只需发送和接收其他节点编程识别的固定 PDO。这不符合标准,但如果您在实验室中快速使用,可能会起作用。

    我曾经为原型做过一次,只是一个固定的 PDO 和心跳,然后切换到最终产品的商业堆栈。

    【讨论】:

    • “NMT 状态机、只读 SDO 加速传输、具有少量强制对象和硬编码 PDO 的对象字典甚至可能为您提供符合标准的简约节点。”可能不是。 CANopen 一致性测试是通过使用 SDO 访问请求轰炸您的 OD 来完成的,包括访问应该存在的对象和不应该存在的对象。要获得真正的标准兼容(认证),您必须实现大部分 CANopen 功能。
    • CiA 301 中只提到了 4 个强制对象。此外,您可能需要至少一个 PDO 的通信和映射参数,即使它不是强制的。我认为您实际上可以拥有一个没有您想要的 PDO 的节点。当然,对于您打算与总线通信的任何数据,您也需要对象,所以至少还有一个。
    【解决方案2】:

    我使用canfestival的canopen的经验:

    1)它是一个头文件和一个源文件

    2) 是的,你应该 每个节点的对象字典定义了该节点的sdo和pdo规范及其变量和回调,由canfestival中的objectdictgen自动完成

    3)有些驱动的写法类似于serial,tcp,...但是如果你有特定的协议你可以写你自己的驱动

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多