首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写CanOpen堆栈?

如何编写CanOpen堆栈?
EN

Stack Overflow用户
提问于 2017-09-07 12:52:34
回答 3查看 8.8K关注 1票数 3

我也有类似的问题。How to program a simple CANopen layer。我读了答案,但我必须自己编程一个CANopen层,我不能得到一个商业的。那么,是否有编写CANopen堆栈的基本知识(或层,我不确定两者之间的区别)?我甚至不知道从哪里开始..。

如果需要的话,这里有一些信息:

我的主设备是一只带QNX的小猎犬骨黑色。我认为QNX有一个通用的CAN库,但不是特定于CANopen。我的奴隶是一个军事化的无刷电机控制器。我在用C++写字。我有一份关于我的系统一般要求的文档。有2个RPDO和4个TPDO,传输是同步的,没有停止模式(因此没有心跳和节点保护),所有的消息信息(大小、格式、相关节点ID等)都有说明。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-20 20:08:15

实际上,至少有4个实现CANopen的开源项目:

  • CanFestival是最古老的解决方案,也可能是最成熟的解决方案。许可证: LGPLv2。
  • CANopenNode是针对微控制器的.许可证: GPLv2。
  • Lely CANopen是一个用于实现CANopen主程序和奴隶的库。许可证: Apache版本2。
  • openCANopen是一个运行在Linux上的主控程序。许可证: ISC。注:我是这个项目的作者。

我会发布链接,但显然我没有足够的“声誉”。

openCANopen还包括一些实用程序,例如用于通过TCP转发通信量的守护进程,以及将CANopen流量解释并转储到标准输出的程序。

Lely CANopen实际上具有相当不错的代码质量,如果它在我开始编写自己的实现时可用的话,我可能会使用它。然而,我没有尝试使用它,所以我不能说哪个实现“更好”。我只能说,它们是不同的,一个或另一个可能更适合你的需要。

现在,我怀疑这些实现中的任何一个在QNX上都能直接发挥作用。它们要么必须修改,要么您可以将代码的各个部分复制到您自己的实现中。至少这能帮你节省点时间。

票数 19
EN

Stack Overflow用户

发布于 2017-09-07 14:43:45

快速和肮脏的工作是只实现最低限度(只是不要将其作为CANopen或声称符合CANopen要求):

  • 对其他节点将发送/期望接收的特定RPDO/TPDO的支持。使用固定的COBID (CAN标识符)。忘记PDO映射和PDO配置,使用固定设置。
  • 实现NMT启动消息。
  • 在运行前和运行之间实现NMT状态转换(您的节点需要响应NMT主节点的这些状态)。
  • 实现一些方法来设置节点id。最简单的方法可能是将其硬编码为程序常量。

如果你幸运的话,这就是你所需要的。如果您运气不好,就会有SDO通信,这意味着您必须实现SDO协议以及整个对象字典。否则,上述都是相当直截了当的,没有那么多的工作.

如果您需要对象字典,那么可能没有其他方法可以得到一个完整的协议栈。你也需要申请一个供应商身份从CAN-in-自动化,但这是一次性费用(没有版税)。

票数 12
EN

Stack Overflow用户

发布于 2022-08-23 13:47:31

我来自嵌入式办公室,想把我的一分钱添加到你的搜索中,即使已经很晚了。首先,我想提到,我们没有将驱动程序放入canopen堆栈存储库的原因是,在多个编译器的多个目标上进行嵌入式软件开发的复杂性,以及我的目标是尽可能提供运行中的软件。仅仅使用一个库很难在使用过程中识别问题。

好消息是,我设置了一个环境,使不同的目标和编译器可以由单个维护者(me)管理。因此,在主机上用LLVM开发了and协议栈,并为STM32F7xx微控制器提供了第一个演示。还有更多,所以请继续关注:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46096883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档