CANOpen 中的对象字典是什么?
What is Object dictionary in CANOpen?
I will use CANOpen in linux. In kernel, linux has socketcan and i have some questions for further implementation.
1-)对象字典长什么样子,是头文件还是EDS文件?
2-) 我需要为 pdo 和 sdo 配置使用对象字典吗?
3-) 我应该实现我的自定义 canopen 库,它只实现了一些需要的协议,还是使用像 canfestival 这样的库,它实现了几乎所有的协议和对象字典?
我对canfestival canopen的使用心得:
1)是头文件和源文件
2) 是的,你应该
每个节点的对象字典定义了它的 sdo 和 pdo 规范及其变量和回调,它由 canfestival
中的 objectdictgen 自动完成
3) 一些驱动程序的编写类似于 serial , tcp ,...但是如果您有特定的协议,您可以编写自己的驱动程序
1) 对象字典定义了一组对象,其中数据可以存储在 CANopen 节点上。通过给定对象索引和子索引,可以使用 SDO 协议从 CAN 总线读取和写入对象字典中的对象。它们也可以从 CANopen 节点上的本地应用程序读取和写入。您可以说对象字典构成了 API 用于从其他 CANopen 节点访问 CANopen 节点。
EDS 文件包含特定型号的 CANopen 节点中存在的所有对象的列表,包括数据类型、默认值、最小值和最大值以及一些属性。这有助于工具与 CANopen 节点通信。
2) 使用 SDO 协议通过 CAN 总线完成配置以写入 CANopen 节点的对象字典。
3) 如果您开发商业产品,您可能希望使用商业 CANopen 堆栈来支持完整协议。 (一个例子是我们维护的Kvaser CANopen Stack,但还有很多其他的可供选择)
如果您的项目许可政策允许,您可以使用开源 CANopen 协议栈之一。我想到了 CANFestival 和 CANopenNode,但还有其他的。
但是如果您只需要最少的功能,您也可以根据规范编写最低限度的代码。 NMT 状态机、只读 SDO 加速传输、包含少量强制对象和硬编码 PDO 的对象字典甚至可能为您提供符合标准的简约节点。
以下对象在 CiA 301 中是强制性的
- 0x1000 设备类型(只读)
- 0x1001 错误寄存器(只读)
- 0x1017 生产者心跳时间(Const)
- 0x1018 身份对象(只读)
- 此外,您还需要通信参数和映射参数
每个 PDO,但这些可以是常量。
如果您想更进一步,您可以将网络上的所有其他节点预先配置为自动启动,然后只需发送和接收其他节点被编程识别的固定 PDO。这不符合标准,但如果您快速破解以在实验室中使用,可能会奏效。
我为原型做了一次,只是一个固定的 PDO 和心跳,然后切换到最终产品的商业堆栈。
I will use CANOpen in linux. In kernel, linux has socketcan and i have some questions for further implementation.
1-)对象字典长什么样子,是头文件还是EDS文件?
2-) 我需要为 pdo 和 sdo 配置使用对象字典吗?
3-) 我应该实现我的自定义 canopen 库,它只实现了一些需要的协议,还是使用像 canfestival 这样的库,它实现了几乎所有的协议和对象字典?
我对canfestival canopen的使用心得:
1)是头文件和源文件
2) 是的,你应该 每个节点的对象字典定义了它的 sdo 和 pdo 规范及其变量和回调,它由 canfestival
中的 objectdictgen 自动完成3) 一些驱动程序的编写类似于 serial , tcp ,...但是如果您有特定的协议,您可以编写自己的驱动程序
1) 对象字典定义了一组对象,其中数据可以存储在 CANopen 节点上。通过给定对象索引和子索引,可以使用 SDO 协议从 CAN 总线读取和写入对象字典中的对象。它们也可以从 CANopen 节点上的本地应用程序读取和写入。您可以说对象字典构成了 API 用于从其他 CANopen 节点访问 CANopen 节点。
EDS 文件包含特定型号的 CANopen 节点中存在的所有对象的列表,包括数据类型、默认值、最小值和最大值以及一些属性。这有助于工具与 CANopen 节点通信。
2) 使用 SDO 协议通过 CAN 总线完成配置以写入 CANopen 节点的对象字典。
3) 如果您开发商业产品,您可能希望使用商业 CANopen 堆栈来支持完整协议。 (一个例子是我们维护的Kvaser CANopen Stack,但还有很多其他的可供选择)
如果您的项目许可政策允许,您可以使用开源 CANopen 协议栈之一。我想到了 CANFestival 和 CANopenNode,但还有其他的。
但是如果您只需要最少的功能,您也可以根据规范编写最低限度的代码。 NMT 状态机、只读 SDO 加速传输、包含少量强制对象和硬编码 PDO 的对象字典甚至可能为您提供符合标准的简约节点。
以下对象在 CiA 301 中是强制性的
- 0x1000 设备类型(只读)
- 0x1001 错误寄存器(只读)
- 0x1017 生产者心跳时间(Const)
- 0x1018 身份对象(只读)
- 此外,您还需要通信参数和映射参数 每个 PDO,但这些可以是常量。
如果您想更进一步,您可以将网络上的所有其他节点预先配置为自动启动,然后只需发送和接收其他节点被编程识别的固定 PDO。这不符合标准,但如果您快速破解以在实验室中使用,可能会奏效。
我为原型做了一次,只是一个固定的 PDO 和心跳,然后切换到最终产品的商业堆栈。