Skip to content

kabirz/ModHandlerPcTool

Repository files navigation

ModHandler PC Tool (.NET)

基于 .NET 10.0 WPF 的 ModHandler PC 工具,采用 MVVM 架构,从 can-uart-tool Win32 C 项目重写而来。

功能概览

LoRa 数据

  • 通过 TCP 连接 LoRa 网关,实时接收并显示 LoRa 数据帧
  • 支持十六进制原始数据展示与帧解析
  • 网络参数(NID、GWID)显示

LoRa 配置

  • UDP 广播自动发现局域网内 LoRa 网关设备
  • AT 指令查询/设置 LoRa 参数(协议模式、工作模式、信道、速率、功率、NID、GWID)
  • 支持多设备切换

固件升级

  • CAN 模式 — 通过 PCAN-USB 适配器发送固件,支持虚拟 CAN 测试模式(无需硬件即可模拟完整升级流程,固件输出为 virtual_firmware.bin
  • UART 模式 — 通过串口发送固件,完整实现 CRC16-CCITT 帧协议
  • 支持获取固件版本、板卡重启、测试模式
  • 实时进度条显示

CAN 命令

  • 手动发送任意 CAN 帧(标准帧/扩展帧/远程帧)
  • LoRa 模块上电/测试模式切换
  • LoRa 配置快捷命令(协议、模式、信道、速率、功率、NID、GWID)
  • 实时 CAN 帧监控,自动识别帧类型(心跳、LoRa、平台、固件数据等)

项目结构

ModHandlerPcTool/
├── Models/
│   ├── CanHalFrame.cs        CAN 帧模型 + CAN/协议常量定义
│   ├── LoraFrame.cs          LoRa 数据帧模型 + 设备/连接状态枚举
│   └── SerialPortInfo.cs     串口信息模型 + 串口常量
├── Services/
│   ├── ICanHalService.cs     CAN HAL 接口 + CanHalServiceStub
│   ├── ILoraSdkService.cs    LoRa SDK 接口 + LoraSdkServiceStub
│   ├── IUartManagerService.cs UART 管理接口 + UartManagerServiceStub
│   ├── PcanCanHalService.cs  PCAN P/Invoke 动态加载 + 虚拟 CAN 回退
│   ├── RealLoraSdkService.cs TCP 数据流接收 + UDP 发现/AT 配置
│   └── RealUartManagerService.cs  SerialPort + CRC16-CCITT 帧协议
├── ViewModels/
│   ├── MainWindowViewModel.cs    主窗口,服务注入 + 子 VM 组装
│   ├── LoraDataViewModel.cs      LoRa 数据 Tab
│   ├── LoraConfigViewModel.cs    LoRa 配置 Tab
│   ├── FirmwareUpgradeViewModel.cs  固件升级 Tab(CAN/UART 双模式)
│   └── CanCommandViewModel.cs    CAN 命令 Tab
├── Views/
│   ├── LoraDataView.xaml         LoRa 数据页
│   ├── LoraConfigView.xaml       LoRa 配置页
│   ├── FirmwareUpgradeView.xaml  固件升级页
│   └── CanCommandView.xaml       CAN 命令页
├── Converters/
│   ├── BoolToVisibilityConverter.cs
│   ├── InverseBoolConverter.cs
│   ├── IntToVisibilityConverter.cs
│   ├── IntToBoolConverter.cs
│   └── ProgressToPercentConverter.cs
├── Helpers/
│   └── DelegateCommand.cs        ICommand 实现
├── App.xaml                       全局资源字典(转换器)
├── MainWindow.xaml                主窗口(TabControl + 菜单 + 状态栏)
└── icon.ico                       应用图标

架构设计

MVVM 模式

  • 每个 Tab 页 = UserControl (View) + ViewModel,通过数据绑定通信
  • 服务层通过接口注入 ViewModel,便于测试和替换
  • Stub 模式:所有硬件服务均有 Stub 实现,无硬件时可完整运行 UI

硬件服务

服务 接口 真实实现 无硬件回退
CAN ICanHalService PcanCanHalService (P/Invoke 动态加载 PCANBasic.dll) 虚拟 CAN 模式(Write 记录日志并返回成功)
UART IUartManagerService RealUartManagerService (System.IO.Ports) UartManagerServiceStub
LoRa ILoraSdkService RealLoraSdkService (TCP + UDP Socket) LoraSdkServiceStub(模拟连接)

PCAN 动态加载

  • 运行时通过 LoadLibraryW / GetProcAddress 动态加载 PCANBasic.dll
  • 无编译时依赖,不安装 PCAN 驱动也能编译运行
  • DLL 不存在时自动回退虚拟 CAN 模式

连接状态同步

  • FirmwareUpgradeViewModel 管理 CAN/UART 连接状态
  • 通过 PropertyChanged 事件自动通知 CanCommandViewModel,实现跨 Tab 连接状态同步

环境要求

  • .NET 10.0 SDK
  • Windows 10/11
  • PCAN-USB 适配器(可选,无硬件时自动使用虚拟 CAN)
  • 串口设备(可选,UART 固件升级)
  • LoRa 网关(可选,TCP/UDP 连接)

构建与运行

dotnet build
dotnet run

发布

独立单文件(无需安装运行时,~62 MB)

dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true

输出单个 ModHandlerPcTool.exe,双击即可运行,目标机器无需安装任何运行时。

依赖框架(需安装 .NET 10 桌面运行时,~0.3 MB)

dotnet publish -c Release --self-contained false -p:DebugType=none

输出 5 个文件共 ~0.3 MB。目标机器需安装 .NET 10 Desktop Runtime

协议参考

CAN ID 定义

CAN ID 名称 说明
0x101 PlatformRX 平台接收命令
0x102 PlatformTX 平台发送响应
0x103 FwDataRX 固件数据
0x105 LoRaRX LoRa 发送命令
0x106 LoRaTX LoRa 接收响应
0x763 Heartbeat 心跳
0x1E3 HandlerState 手柄状态
0x263 Laser 激光
0x363 CoordXY 坐标 XY
0x463 CoordZ 坐标 Z

UART 帧格式

HEAD(0xAA) + TYPE(1B) + LEN(2B,LE) + DATA(nB) + CRC16(2B,LE) + TAIL(0x55)

CRC16-CCITT (多项式 0x1021, 初始值 0xFFFF)

LoRa TCP 帧格式

HEAD(0x5A) + MAGIC(0xA55A,2B) + NID(4B) + LEN(2B) + CRC(2B) + RES(1B) + DATA

LoRa CAN 命令码

命令码 名称 数据格式
0x01 SET_MODE protocol<<4 | mode
0x02 QUERY_MODE -
0x03 SET_CH1 speed_index + channel(2B)
0x04 QUERY_CH1 -
0x05 SET_CH2 speed_index + channel(2B)
0x06 QUERY_CH2 -
0x07 QUERY_NID -
0x09 QUERY_GWID -
0x0A SET_GWID gwid(4B, offset 4-7)
0x0B QUERY_PNUM -
0x0C SET_PNUM pnum
0x0D SET_TEST on/off
0x0F SET_POWER on/off

板卡命令码

命令 说明
START_UPDATE 0 启动固件升级(value = 文件大小)
CONFIRM 1 确认固件(value = 0 测试模式, 1 正式)
VERSION 2 查询固件版本
REBOOT 3 重启板卡

固件响应码

响应 说明
OFFSET 0 偏移量确认
UPDATE_SUCCESS 1 升级完成
VERSION 2 版本信息
CONFIRM 3 确认成功 (value = 0x55AA55AA)
FLASH_ERROR 4 Flash 错误
TRANSFER_ERROR 5 传输错误

CAN 波特率

索引 波特率 PCAN Btr0Btr1
0 10K 0x672F
1 20K 0x532F
2 50K 0x472F
3 100K 0x432F
4 125K 0x031C
5 250K 0x011C
6 500K 0x001C
7 1M 0x0014

原始项目

本项目的 C/Win32 原版:can-uart-tool

License

Private

About

ModHandler PC Tool - .NET 10.0 WPF (MVVM)

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages