Skip to content

KH-CanOpenTool ​

KH-CanOpenTool 是一款 Windows 系统下的 CANopen 调试工具,适用于通过 CAN 适配器连接 CANopen 总线后进行节点管理、NMT 控制、SDO 读写、PDO 发送与报文查看。

支持设备 ​

目前软件支持 PCANFD 或兼容设备 更多设备类型持续增加中...

下载地址 ​

下载地址:https://gitee.com/ChengDu-KunHong/kh-canopentool/releases/

KH-CanOpenTool 主界面

功能概览 ​

  • 支持 EDS 文件导入配置
  • 支持工程导入 / 导出,便于复用已配置的节点、EDS 与通信参数
  • 可选 CAN 设备通道与波特率
  • 支持原始 CAN 数据发送
  • 设置 NMT 控制节点状态
  • 通过 SDO 进行对象字典读写
  • 通过 RPDO / TPDO 页面进行 PDO 调试
  • 支持图形化 UI 界面显示信息
  • 支持 Python 脚本与 UI 按钮联动控制 PDO
  • 支持通过 MCP 接入 AI 工具,使用自然语言操作 KH-CanOpenTool
  • 支持调整系统字体大小
  • 页面查看发送和接收报文,包含 COB-ID、数据、类型、节点和说明等信息。

运行环境 ​

  • 操作系统:Windows
  • CAN 设备:现支持PCAN硬件,后续会增加更多主流设备支持

快速开始 ​

工具下载与环境准备 ​

  1. 下载发行版压缩包,解压后使用。
  2. 确认 CAN 适配器已连接电脑,并已安装对应设备驱动。
  3. 双击运行 KH_CAnOpenTool.exe。

创建工程 ​

  1. 如果已有工程文件,可通过顶部 文件 菜单导入工程,快速恢复节点、EDS 与通信参数配置。
  2. 如果首次使用,在左侧节点列表点击 +,输入 Node ID,按需导入 EDS 配置文件,完成节点添加。
  3. 选中左侧 CanOpen 主机,在右侧选择实际识别到的 CAN 设备通道和波特率,例如对应设备通道与 250K。

开始使用 ​

  1. 点击 ▶️ 建立通信。
  2. 选中目标节点,在 NMT、SDO、RPDO、TPDO、OD 页面进行调试。
  3. 在底部 日志 或 Frames 页面查看运行信息和 CANopen 报文。
  4. 调试完成后可通过顶部 文件 菜单导出工程,便于下次或其他电脑快速使用。

常用操作 ​

工程导入 / 导出 ​

工程文件用于保存常用调试配置,适合把已经配置好的节点列表、EDS 关联、CAN 设备通道和波特率等信息复用到下一次调试。

  • 导入工程:通过顶部 文件 菜单选择工程文件,导入后检查节点、EDS、CAN 通道和波特率是否与当前硬件环境一致。
  • 导出工程:完成节点和通信参数配置后,通过顶部 文件 菜单导出工程文件,后续可直接导入使用。

建议在每次新增节点、调整 EDS 或修改波特率后重新导出工程,避免下次使用旧配置。

节点管理 ​

在 NodeEditor 页面左侧点击 + 添加节点。弹窗中填写 Node ID,并可通过 EDS 输入框右侧按钮选择 EDS 文件。选中节点后点击删除按钮可移除节点。 节点管理

启动 CAN 通信 ​

选中 CanOpen 主机,在主界面选择:

  • CAN设备:选择已识别到的 CAN 设备通道。
  • 波特率:选择与总线一致的波特率,例如 250K。

点击 ▶️ 后工具开启通道。若设备列表未刷新,可点击设备选择区域旁的刷新按钮重新扫描。

CAN 通道配置

NMT 控制 ​

在目标节点页面进入 NMT 标签页,选择需要发送的 NMT 命令后点击 NMT:

  • Start Remote Node:启动远程节点。
  • Stop Remote Node:停止远程节点。
  • Enter Pre-Operational State:进入预操作状态。
  • Reset Node:复位节点。
  • Reset Communication:复位通信。

NMT 控制

SDO 读写 ​

进入 SDO 标签页后填写:

  • 索引:对象字典索引,例如 0x6060。
  • 子索引:对象字典子索引,例如 0x00。
  • 数据类型:选择读写的数据类型,例如 INT8。
  • 数据值:写参数时填写需要写入的值。例如 0x03。

选择 SDO上传(读参数) 或 SDO下载(写参数) 后点击 Send 发送请求。响应结果可在底部 Frames 页面查看。

SDO 读写

报文查看 ​

切换到底部 Frames 页面可查看通信报文,主要字段包括:

  • Direction:发送或接收方向。
  • Cob:COB-ID。
  • 数据:CAN 数据区内容。
  • 类型:报文类型,例如 HEARTBEAT、RSDO、TSDO、RPDO。
  • 节点:节点 ID。
  • Info:解析说明。

可使用 清空 清除当前记录,使用 搜索 查找报文,勾选 Auto Scroll 自动滚动到最新报文;Load File 和 Save File 可用于加载或保存 Frames 数据。

报文查看

TPDO 使用 ​

  1. 节点处于Enter Pre-Operational State
  2. 按照以下图片进行配置,停止PDO传输——>配置PDO——>写入PDO——>启动PDO TPDO 配置流程

原始 CAN 报文发送 ​

  1. 在CanOpen主机项中切换到 Transmit 页面,右键点击下方空白区域,选择新增报文。

编辑发送报文入口

  1. 在报文编辑页面填写 ID、数据、类型、发送周期 和 备注 等信息。暂仅支持周期发送,请设置合适的周期时间。

报文编辑页面

  1. 勾选周期发送后,工具会按设置的周期持续发送该 CAN 报文。发送结果可在底部 Frames 页面查看。

启用周期发送

图形界面展示 ​

  1. 在界面配置区域添加新的显示界面。

添加界面

  1. 将需要的 UI 插件拖动到界面中,并按实际调试需求调整布局。

拖动添加 UI 插件

  1. 点击插件的 OD 配置项,为插件绑定对象字典中的变量。

绑定 OD 信息

  1. 需要先确保 TPDO 已配置为实时接收数据。具体操作可参考 TPDO 使用。

确认 TPDO 实时接收数据

  1. 保存工程后点击启动。通信正常时,插件会实时显示绑定的数据。

插件数据显示

Python 脚本支持 ​

UI 编辑器支持通过 Python 脚本控制 CANopen 操作,可将脚本中定义的方法绑定到按钮控件中使用。

应用示例:

  1. 创建 UI 图形界面。

  2. 切换到 GuiEditor/CodeEdit 进行 Python 代码编辑。

代码编辑界面

  1. 输入以下示例代码:
python
def start():
    send_nmt_command(1, 128)
    stop_pdo(1, 0)
    clear_pdo(1, 0)
    set_pdo_info(1, 0, 254, 0, 100)
    append_pdo_od(1, 0, 0x6064, -1)
    write_pdo_info(1, 0)
    start_pdo(1, 0)
    send_nmt_command(1, 1)


def stop():
    stop_pdo(1, 0)

示例代码定义了 start 和 stop 两个函数,可用于绑定到按钮控件使用。

  1. 在 UI 界面添加两个按钮控件,并分别将按钮的 Method 绑定到 start 和 stop 方法。

按钮方法绑定

  1. 启动运行后,点击界面按钮即可启动或停止 PDO。

按钮运行效果

目前支持的 API 可通过 帮助/API 查看。

API 帮助

调整字体大小 ​

  1. 通过顶部 文件 菜单打开 系统设置。
  2. 修改 Font Size 的值,软件界面会应用新的系统字体大小。
  3. 点击 确定 保存配置,使其在下次启动软件时继续生效。

调整系统字体大小

配置保存规则

点击 确定 会保存当前系统设置;直接点击设置窗口右上角的 X 只会关闭窗口,不会保存配置,关闭软件后未保存的配置将丢失。

MCP ​

v0.7.0 起,KH-CanOpenTool 支持通过 MCP 接入 AI 工具。连接成功后,可以在 AI 工具中使用自然语言创建和编辑 UI、设置脚本代码等。

配置 MCP 服务 ​

  1. 通过顶部 文件 菜单打开 系统设置。

打开系统设置

  1. 设置 MCP port。默认端口为 3000,点击 确定 保存配置。

配置 MCP 端口

修改端口后需要重启

如果修改了 MCP port,需要重启 KH-CanOpenTool,新端口才会生效。

连接 AI 工具 ​

在支持 MCP 的 AI 工具中添加服务器配置。以下以 CodeBuddy 为例:

json
{
  "mcpServers": {
    "HK_CANopen": {
      "url": "http://127.0.0.1:3000/mcp",
      "disabled": false
    }
  }
}

其中,URL 中的端口必须与 KH-CanOpenTool 系统设置中的 MCP port 保持一致。

CodeBuddy MCP 配置

使用自然语言操作 ​

MCP 连接成功后,可以直接向 AI 工具描述需要在 KH-CanOpenTool 中执行的操作。AI 会根据任务组合调用相应工具。

1. 创建操作界面并编辑按钮事件 ​

例如:

创建一个 800 × 500 的 CANopen 控制界面,添加“启动”和“停止”按钮。

AI 会依次组合调用 create_ui → add_button → set_code,生成界面并绑定按钮逻辑。

下面以创建单按钮界面为例,展示 AI 工具通过 MCP 调用 KH-CanOpenTool 的过程:

通过 MCP 调用 KH-CanOpenTool

执行完成后,KH-CanOpenTool 中会创建对应的 UI、按钮和事件代码。

MCP 创建 UI 和按钮

MCP 生成按钮事件代码

2. 创建对象字典数据图表 ​

例如:

给节点 1 创建一个实时图表,显示转速对象的数据。

AI 可以先调用 get_eds_path 获取节点的 EDS 文件路径,再根据对象字典信息调用 add_chart 添加图表,并配置图表所使用的节点和 OD。

3. 控制 CANopen 节点状态 ​

例如:

向节点 2 发送 NMT 启动命令。

也可以描述连续操作:

停止节点 2,然后复位该节点。

此类任务通过 send_nmt_command 执行。

操作前确认

NMT 命令会真实影响 CANopen 网络。执行前请确认目标节点号和命令,避免误操作其他节点。

4. 自动配置 PDO ​

例如:

给节点 1 配置一个 TPDO,映射状态字和实际转速,然后启动 PDO 传输。

AI 可以按以下顺序完成配置:

clear_pdo → set_pdo_info → append_pdo_od → write_pdo_info → start_pdo

需要停止 PDO 传输时,可以调用 stop_pdo。

检查 PDO 参数

PDO 配置会写入目标节点。执行前请核对节点号、PDO 编号、通信参数及 OD 映射,确认其符合设备对象字典定义。

注意事项 ​

  • 启动前请确认 CAN 设备驱动正常、设备未被其他程序占用。
  • 工具选择的波特率必须与实际 CANopen 总线一致。
  • SDO 写参数前请确认索引、子索引、数据类型和值均符合目标设备对象字典定义。
  • 如果启动通信失败,优先检查 CAN 适配器连接、设备驱动安装、DLL 文件是否完整,以及设备列表中是否能识别到 CAN 通道。