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. 选中目标节点,在 NMTSDORPDOTPDOOD 页面进行调试。
  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 FileSave 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)

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

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

按钮方法绑定

  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_uiadd_buttonset_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_pdoset_pdo_infoappend_pdo_odwrite_pdo_infostart_pdo

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

检查 PDO 参数

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

注意事项

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