我对此也有类似的问题。 How to program a simple CANopen layer
我读了答案,但我必须自己编写一个CANopen层,但我无法获得商业层。那么编写CANopen堆栈是否有任何基础知识(或者我不确定其中的区别)?我什至不知道从哪里开始。

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

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

最佳答案

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

  • CanFestival是最早的并且可能是最成熟的解决方案。许可证:LGPLv2。
  • CANopenNode是针对微 Controller 的。许可证:GPLv2。
  • Lely CANopen是一个用于实现CANopen主站和从站的库。许可证:Apache版本2。
  • openCANopen是在Linux上运行的母版。许可证:ISC。注意:我是该项目的作者。

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

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

    Lely CANopen实际上具有相当不错的代码质量,如果我开始编写自己的实现时可以使用它,我可能会使用它。但是,我还没有尝试使用它,所以我不能真正说出哪个实现更好。我只能说它们是不同的,并且其中一个可能更适合您的需求。

    现在,我怀疑这些实现中的任何一种都不能在QNX上直接使用。它们要么必须进行修改,要么您可以将代码的各个部分复制到自己的实现中。至少那应该为您节省一些时间。

    关于c++ - 如何编写一个CanOpen堆栈?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46096883/

    10-11 22:35