我将在Linux中使用CANOpen。在内核中,Linux具有socketcan,我有一些进一步实现的问题。
1-)对象字典是头文件还是EDS文件?
2-)我需要为pdo和sdo配置使用对象字典吗?
3-)我应该实现仅实现某些协议的自定义canopen库还是使用canfestival之类的库实现几乎所有协议和对象字典?
答案 0 :(得分: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甚至可以为您提供符合标准的简约节点。
如果要更进一步,则可以将网络上的所有其他节点预先配置为自动启动,然后发送和接收其他节点经过编程识别的固定PDO。这不符合标准,但是如果您要在实验室中进行快速黑客攻击,则可能会起作用。
我曾经为一个原型做过一次,只是一个固定的PDO和心跳,然后切换到最终产品的商用堆栈。
答案 1 :(得分:0)
我在cancanestival上使用canopen的经验:
1)它是标题和源文件
2)是,您应该 每个节点的对象字典定义了该对象的sdo和pdo规范以及它们的变量和回调,它是由canfestival中的objectdictgen自动完成的。
3)一些驱动程序的编写类似于serial,tcp,...,但是如果您有特定的协议,则可以编写自己的驱动程序