当前位置:首页>python>PyCANopenEditor,我用 Python 重写了CANopenNode的CANopenEditor

PyCANopenEditor,我用 Python 重写了CANopenNode的CANopenEditor

  • 2026-10-11 06:05:16
PyCANopenEditor,我用 Python 重写了CANopenNode的CANopenEditor

它是什么?

CANopen 是一种工业总线协议,常见于伺服电机、机器人、医疗设备、风电主控等场景。每一台 CANopen 设备内部都有一张"对象字典"(Object Dictionary),可以理解成一份配置参数表——设备的所有通讯参数、输入输出定义、PDO 映射关系都登记在这张表里。

这张表是 INI 格式的 EDS(Electronic Data Sheet)文件,或者 XML 格式的 XDD 文件。手工编辑 200 多行的 INI 容易出错,转成 C 源码又需要写一堆模板代码。

PyCANopenEditor 是一个图形化的 CANopen 对象字典编辑器:打开 EDS/XDD 文件 → 在 GUI 里改对象字典和 PDO 映射 → 一键导出为 C 源码、EDS、XDD、HTML 文档等格式。

它是 CANopenNode/CANopenEditor(C# + Avalonia)的 Python + PySide6 重写版,功能与 C# 原版保持一致,文件格式互相兼容。

项目地址:  https://gitee.com/bltzmnn/py-canopen-editor


怎么来的?

十年前 CANopenNode 团队用 C# 写了一个跨平台编辑器,但最近几年基本停更了。C# 版本的问题:

  • 需要 .NET Runtime,安装包大;
  • Linux 服务器/容器里跑不起来;
  • 上游停更,新需求没人接。

所以用 Python + PySide6 重写了一遍。Python 3.10+ 就能跑,跨平台,pip 一行安装。

项目包括:44 个 Python 源文件,约 4400 行代码,分三层:

  • 核心库(src/core/):解析器、导出器、数据模型,无 GUI 依赖;
  • GUI 层(src/gui/):PySide6 写的界面,MVVM 模式;
  • CLI(src/cli/):命令行入口,CI 友好。

界面

启动后是 4 个标签页:

  1. 设备信息 — 改供应商名、产品名、版本号、Commissioning 参数;
  2. 对象字典 — 左栏按 index 范围分组(通讯 0x1000-0x1FFF、制造商 0x2000-0x5FFF、设备 0x6000+),右栏编辑子表和属性;
  3. PDO 映射 — 看 TX/RX PDO 通讯参数和映射关系,加减 PDO;
  4. Modules — 看模块化设备信息。

支持的文件格式:

方向
格式
读
.eds
.dcf.xdd.xdc.nxdd.nxdc.binpb.json
写
.eds
.dcf.xdd.xdcCanOpenNodeV4 C 源码(.h/.c) HTML/Markdown 文档 Protobuf

怎么用?

1. 安装

pip install -e .

Linux 用户如果启动报 libxcb-cursor0 错误,先安装一下:

sudo apt install libxcb-cursor0

2. 启动 GUI

pycanopen-gui

或者:

python -m src.gui.app

如果提示 pycanopen-gui: 未找到命令:

export PATH="$HOME/.local/bin:$PATH"

3. 命令行用法(不需要 GUI)

# EDS 转 XDDpycanopen --infile device.eds --outfile device.xdd# EDS 转 CANopenNode V4 C 源码(生成 OD.h 和 OD.c)pycanopen --type CanOpenNodeV4 --infile device.eds --outfile OD.h# XDD 转 EDSpycanopen --infile device.xdd --outfile output.eds# 查看所有支持的导出器pycanopen --list-exporters

当输出扩展名对应多个导出器时(比如 .xdd 既能导完整版也能导精简版),用 --type 指定。


给谁用?

  • 嵌入式工程师:编辑设备 EDS,再导出 C 源码嵌进固件;
  • 自动化集成商:批量改设备配置参数;
  • CANopen 产品开发:可视化对象字典,验证 PDO 映射;
  • 教学:演示 CANopen 对象字典结构。

协议沿用上游 GPLv3 开源,和 CANopenNode 项目保持一致。


小结

PyCANopenEditor 不是从零发明的轮子,而是把一个停更的 C# 工具用 Python 重写并继续维护。44 个文件、4400 行代码,加上 17 个真实样本做对照测试,对需要编辑 CANopen 对象字典的工程师来说,省下的是几十次手工写模板代码的时间。

如果你正好有 EDS 文件需要处理,试试 pip install -e . 然后 pycanopen-gui。

最新文章

随机文章