我将在linux中使用CANOpen。在内核中,linux有套接字,我还有一些问题需要进一步实现。
1)对象字典是一个头文件还是EDS文件?
2-)我是否需要为pdo和sdo配置使用对象字典?
(3)我应该实现我的自定义canopen库,它只实现了一些协议,还是使用了一个库,比如实现几乎所有协议和对象字典的canfestival?
发布于 2019-05-03 10:19:40
1)对象字典定义了一组对象,其中数据可以存储在CANopen节点上。通过提供对象索引和子索引,可以使用SDO协议从can总线读取和写入对象字典中的对象。它们也可以从CANopen节点上的本地应用程序中读取和写入。可以说,对象字典形成了从其他CANopen节点访问CANopen节点的API。
EDS文件包含CANopen节点特定模型中所有对象的列表,包括数据类型、默认值、min和max值以及一些属性。这有助于工具与CANopen节点进行通信。
2)在CAN总线上进行配置,使用SDO协议向CANopen节点的对象字典写入。
3)如果您开发了一个商业产品,您可能希望使用一个商业CANopen堆栈来支持整个协议。(我们维护的Kvaser CANopen堆栈就是一个例子,但是还有很多其他的选择)
如果您的项目许可策略允许,您可以使用开源CANopen堆栈之一。CANFestival和CANopenNode出现在我的脑海中,但也有其他的。
但是,如果您只需要最少的功能,您也可以从规范中编写最小的代码。NMT状态机、只读取SDO快速传输、包含少数强制对象的对象字典和硬编码的SDO甚至可以为您提供一个标准兼容的极简节点。
以下对象在CiA 301中是必需的
如果您想更进一步,您可能可以预先配置网络上的所有其他节点自动启动,然后发送和接收固定的PDO,其他节点被编程来识别。这是不符合标准的,但如果您在实验室中快速进行黑客攻击,可能会起作用。
我做了一次原型,只是一个固定的PDO和心跳,然后切换到一个商业堆栈的最终产品。
发布于 2018-11-20 07:56:47
我在使用佳节的经验:
1)它是一个头文件和一个源文件
(2)是的,您应该为每个节点定义sdo和pdo规范及其变量和回调,这是通过对象口授自动完成的。
3)有些驱动程序类似于串行、tcp、.但是如果您有一个特定的协议,您可以编写您自己的驱动程序。
https://stackoverflow.com/questions/53132996
复制相似问题