首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python CANopen包实现两个节点之间的canopen协议通信

使用python CANopen包实现两个节点之间的canopen协议通信
EN

Stack Overflow用户
提问于 2021-04-29 21:06:43
回答 1查看 435关注 1票数 0

我有两个USB转CAN设备(can0和can1),它们都连接到安装了socketcan的Linux机器上。我已经阅读了CANopen协议的基础知识,还没有看到任何可以使用Python CANopen库在两个CANopen设备之间建立通信的示例。

我在文档中读到每个设备都必须有一个.eds文件,所以我从christiansandberg github的Python库中获取了一个示例.eds文件,并尝试建立通信并使它们使用CANopen进行对话,但我无法做到这一点。

我们有一个电池,并希望与它通信,电池工作在can-open协议上,他们提供了电池的.eds文件。我猜一个带有CANopen Python库的usb2can设备就可以完成这项工作。但我就是不知道如何在usb2can设备和电池之间建立通信。这将有助于对数据包帧的任何洞察力。

EN

回答 1

Stack Overflow用户

发布于 2021-04-30 15:56:54

这就是你需要做的:

  • 获取CAN总线开发所需的工具。这意味着除了您自己的应用程序之外,还可以使用某种方式的CAN侦听器。这也意味着电缆+终端电阻。最简单的方法是使用DB9 dsub连接器。示波器也是高度recommended.
  • Read关于设备的文档,以找出如何设置节点id和波特率,或者至少它使用哪些默认设置。
  • 找出设备使用哪个设备配置文件,如果有的话。最常见的是CiA 401“通用I/O模块”。在这种情况下,默认设置将是节点id 1,波特率125kbps。
  • 您的应用程序将需要在此总线上充当NMT Master -网络管理主机。也就是说,负责跟踪所有其他节点的节点。
  • 如果设备是CANopen兼容的,并且您已经确定了它使用的波特率和节点id,那么在加电时您将收到一条"NMT bootup“消息。很可能是从节点1开始,除非你已经改变了device.
  • You'll的节点id,否则需要向设备发送一个"NMT start remote node“消息,以使其从预操作状态变为设备使用的设备配置文件。现在,它可能会以发送所有启用的operational.
  • Depending数据一次作为响应,通常所有数据都设置为零。
  • 现在检查设备的文档,以找出哪些数据驻留在哪个PDO中。您需要将来自设备的TPDO与应用程序中的RPDO进行匹配,反之亦然。它们需要具有相同的COBID - CAN标识符,还需要相同的大小等。
  • COBID是在对象字典中的PDO通信设置中设置的。如果您需要更改设备的设置,这需要通过SDO访问设备对象Dictionary.
  • More高级选项涉及PDO映射,在这里您可以决定您感兴趣的数据的哪些部分进入哪个PDO。并不是所有的设备都支持动态PDO映射-它可能使用静态PDO映射,在这种情况下你不能改变数据从哪里出来。
  • 其他有用的东西是CANopen的保存/加载功能,如果设备支持它们的话。然后,您可以永久存储您的配置,这样您的应用程序就不需要在每次系统启动时都发送so进行配置。启用used.
  • Heartbeat可能对确保设备正常启动和运行很有用。然后,您的应用程序将充当心跳消费者。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67318027

复制
相关文章

相似问题

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