我将在 linux 中使用 CANOpen。在内核中,linux 有 socketcan,我有一些问题需要进一步实现。
1-) 对象字典的样子,是头文件还是 EDS 文件?
2-) 我需要对 pdo 和 sdo 配置使用对象字典吗?
3-) 我应该实现我的自定义 canopen 库,它只实现一些协议,还是使用像 canfestival 这样实现几乎所有协议和对象字典的库?
1) 对象字典定义了一组对象,其中数据可以存储在 CANopen 节点上。通过提供对象索引和子索引,可以使用 SDO 协议从 CAN 总线读取和写入对象字典中的对象。它们也可以从 CANopen 节点上的本地应用程序读取和写入。您可以说对象字典形成了用于从其他 CANopen 节点访问 CANopen 节点的 API。
EDS 文件包含存在于特定 CANopen 节点模型中的所有对象的列表,包括数据类型、默认值、最小值和最大值以及一些属性。这有助于工具与 CANopen 节点通信。
2) 配置是通过 CAN 总线使用 SDO 协议写入 CANopen 节点的对象字典完成的。
3) 如果您开发商业产品,您可能希望使用商业 CANopen 堆栈来支持完整协议。(一个例子是我们维护的Kvaser CANopen Stack,但还有很多其他的可供选择)
如果您的项目许可政策允许,您可以使用开源 CANopen 堆栈之一。我想到了 CANFestival 和 CANopenNode,但还有其他的。
但是如果你只需要最少的功能,你也可以从规范中编写最少的代码。NMT 状态机、只读 SDO 加速传输、具有少数强制性对象和硬编码 PDO 的对象字典甚至可能为您提供符合标准的简约节点。
以下对象在 CiA 301 中是强制性的
如果您想更进一步,您可以预先配置网络上的所有其他节点以自动启动,然后只需发送和接收其他节点已编程为可识别的固定 PDO。这不符合标准,但如果您在实验室中快速使用,可能会起作用。
我曾经为原型做过这个,只是一个固定的 PDO 和心跳,然后切换到最终产品的商业堆栈。
| 归档时间: |
|
| 查看次数: |
2889 次 |
| 最近记录: |