它是什么?
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# 版本的问题:
所以用 Python + PySide6 重写了一遍。Python 3.10+ 就能跑,跨平台,pip 一行安装。
项目包括:44 个 Python 源文件,约 4400 行代码,分三层:
- 核心库(
src/core/):解析器、导出器、数据模型,无 GUI 依赖; - GUI 层(
src/gui/):PySide6 写的界面,MVVM 模式; - CLI(
src/cli/):命令行入口,CI 友好。
界面
启动后是 4 个标签页:
- 设备信息 — 改供应商名、产品名、版本号、Commissioning 参数;
- 对象字典 — 左栏按 index 范围分组(通讯 0x1000-0x1FFF、制造商 0x2000-0x5FFF、设备 0x6000+),右栏编辑子表和属性;
- PDO 映射 — 看 TX/RX PDO 通讯参数和映射关系,加减 PDO;
支持的文件格式:
| |
|---|
| .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 映射;
协议沿用上游 GPLv3 开源,和 CANopenNode 项目保持一致。
小结
PyCANopenEditor 不是从零发明的轮子,而是把一个停更的 C# 工具用 Python 重写并继续维护。44 个文件、4400 行代码,加上 17 个真实样本做对照测试,对需要编辑 CANopen 对象字典的工程师来说,省下的是几十次手工写模板代码的时间。
如果你正好有 EDS 文件需要处理,试试 pip install -e . 然后 pycanopen-gui。