# ecu-flashing-tool **Repository Path**: MagicHand/ecu-flashing-tool ## Basic Information - **Project Name**: ecu-flashing-tool - **Description**: 基于 .NET Framework 4.7.2 + WinForms 的 ECU 刷写上位机,支持可视化节点流程编排(STNodeEditor)、UDS 诊断协议(ISO 14229)、PLC 信号触发与 MES 验证 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-16 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ECU刷写上位机 基于 .NET Framework 4.7.2 + WinForms 的 ECU 刷写上位机软件,支持通过可视化节点编辑器(STNodeEditor)手动配置刷写流程,并保存为 JSON 配置文件;通过 UDS 诊断协议(ISO 14229)与 ECU 通信,支持 PLC 信号触发、MES 验证、全局流程编排等生产场景。 ## 技术栈 - **运行时**:.NET Framework 4.7.2 / WinForms - **目标平台**:Windows - **通信协议**:UDS 诊断协议(ISO 14229)、CAN、OPC UA - **可视化编排**:STNodeEditor(项目内源码集成,见 `ST.Library.UI`) - **数据访问**:FreeSql(多数据库支持:SQLite/MySQL/SQLServer/PostgreSQL) - **日志**:log4net - **序列化**:Newtonsoft.Json ## 解决方案结构 解决方案 `ECUFlashing.sln` 包含 12 个项目(含 1 个硬件插件),按职责划分如下: | 项目 | 类型 | 输出 | 职责说明 | |------|------|------|----------| | `ECUFlashingApp` | WinExe | 主程序 | 应用入口、主界面、窗体、ViewModel、服务容器 | | `FlowOrchestration` | ClassLib | 流程编排 | 节点模型、节点执行器、流程配置服务、流程执行引擎 | | `EcuModule` | ClassLib | ECU 模块 | UDS 通信、固件解析、设备管理、硬件插件接口、安全算法 | | `GlobalInfrastructure` | ClassLib | 全局基础设施 | 应用配置、全局变量管理、配置同步服务 | | `DataStorage` | ClassLib | 数据存储 | FreeSql 数据访问、用户/角色/权限仓储 | | `IdentityModule` | ClassLib | 身份认证 | 用户、角色、权限服务接口 | | `PlcModule` | ClassLib | PLC 模块 | OPC UA 客户端、连接管理、节点浏览 | | `LoggingLib` | ClassLib | 日志库 | 基于 log4net 的日志服务封装 | | `MESClientLib` | ClassLib | MES 客户端 | MES HTTP API 调用、配置管理 | | `DebugUI` | WinExe | 测试工具 | MES 接口访问测试 UI | | `ST.Library.UI` | ClassLib | UI 控件库 | STNodeEditor 可视化节点编辑器源码 | | `Plugins/ValueCan` | ClassLib | 硬件插件 | Intrepid ValueCAN 设备适配插件 | ## 项目引用关系 > 依赖单向流动,下层模块不依赖上层模块。 ``` ECUFlashingApp (主程序) ├── GlobalInfrastructure ├── FlowOrchestration │ ├── EcuModule │ │ ├── GlobalInfrastructure │ │ └── LoggingLib │ ├── PlcModule │ │ ├── GlobalInfrastructure │ │ └── LoggingLib │ ├── ST.Library.UI │ ├── LoggingLib │ └── MESClientLib │ ├── GlobalInfrastructure │ └── LoggingLib ├── EcuModule (见上) ├── IdentityModule │ └── LoggingLib ├── DataStorage │ ├── GlobalInfrastructure │ ├── IdentityModule │ └── LoggingLib ├── PlcModule (见上) ├── ST.Library.UI ├── LoggingLib ├── MESClientLib (见上) └── DebugUI ├── LoggingLib └── MESClientLib Plugins/ValueCan (硬件插件,运行时由 PluginManager 加载) ├── EcuModule └── LoggingLib ``` ## 外部类库(NuGet 包) ### 核心业务库 | NuGet 包 | 版本 | 引用项目 | 用途 | |----------|------|----------|------| | `Newtonsoft.Json` | 13.0.4 | ECUFlashingApp / EcuModule / FlowOrchestration / GlobalInfrastructure / DataStorage / PlcModule / ValueCan | JSON 序列化/反序列化 | | `FreeSql` | 3.5.103 | DataStorage | ORM 核心包 | | `FreeSql.DbContext` | 3.5.103 | DataStorage | FreeSql DbContext 扩展 | | `FreeSql.Provider.Sqlite` | 3.5.103 | DataStorage | SQLite 驱动 | | `FreeSql.Provider.MySql` | 3.5.103 | DataStorage | MySQL 驱动 | | `FreeSql.Provider.SqlServer` | 3.5.103 | DataStorage | SQL Server 驱动 | | `FreeSql.Provider.PostgreSQL` | 3.5.103 | DataStorage | PostgreSQL 驱动 | | `log4net` | 3.3.0 | LoggingLib / PlcModule | 日志框架 | | `BouncyCastle.Cryptography` | 2.6.2 | DataStorage | 密码学算法(加密/哈希) | | `Polly` | 8.4.0 | MESClientLib | HTTP 调用重试与容错 | ### OPC UA(PLC 通信) | NuGet 包 | 版本 | 引用项目 | |----------|------|----------| | `OPCFoundation.NetStandard.Opc.Ua.Client` | 1.5.378.145 | PlcModule | | `OPCFoundation.NetStandard.Opc.Ua.Configuration` | 1.5.378.145 | PlcModule | | `OPCFoundation.NetStandard.Opc.Ua.Core` | 1.5.378.145 | PlcModule | | `OPCFoundation.NetStandard.Opc.Ua.Security.Certificates` | 1.5.378.145 | PlcModule | | `OPCFoundation.NetStandard.Opc.Ua.Types` | 1.5.378.145 | PlcModule | ### Microsoft.Extensions 系列 | NuGet 包 | 版本 | 引用项目 | |----------|------|----------| | `Microsoft.Extensions.Logging` | 10.0.8 | ECUFlashingApp / PlcModule / MESClientLib / DebugUI | | `Microsoft.Extensions.Logging.Abstractions` | 10.0.8 | 同上 | | `Microsoft.Extensions.DependencyInjection` | 10.0.8 | PlcModule / MESClientLib | | `Microsoft.Extensions.DependencyInjection.Abstractions` | 10.0.8 | PlcModule / MESClientLib | | `Microsoft.Extensions.Options` | 10.0.8 | PlcModule / MESClientLib | | `Microsoft.Extensions.Primitives` | 10.0.8 | PlcModule / MESClientLib | | `Microsoft.Extensions.Configuration` | 8.0.0 | MESClientLib | | `Microsoft.Extensions.Configuration.Abstractions` | 8.0.0 | MESClientLib | | `Microsoft.Extensions.Configuration.Binder` | 8.0.0 | MESClientLib | | `Microsoft.Extensions.Configuration.FileExtensions` | 8.0.0 | DebugUI | | `Microsoft.Extensions.Configuration.Json` | 8.0.0 | DebugUI | | `Microsoft.Extensions.Http` | 8.0.0 | MESClientLib | | `Microsoft.Extensions.FileProviders.Abstractions` | 8.0.0 | DebugUI | | `Microsoft.Extensions.FileProviders.Physical` | 8.0.0 | DebugUI | | `Microsoft.Extensions.FileSystemGlobbing` | 8.0.0 | DebugUI | ### 基础类库(.NET Standard 兼容包) | NuGet 包 | 版本 | 引用项目 | |----------|------|----------| | `Microsoft.Bcl.AsyncInterfaces` | 10.0.8 | DataStorage / PlcModule / MESClientLib | | `System.Buffers` | 4.6.1 | DataStorage / PlcModule / MESClientLib | | `System.Memory` | 4.6.3 | DataStorage / PlcModule / MESClientLib | | `System.Numerics.Vectors` | 4.6.1 | DataStorage / PlcModule / MESClientLib | | `System.Runtime.CompilerServices.Unsafe` | 6.1.2 | DataStorage / PlcModule / MESClientLib | | `System.Threading.Tasks.Extensions` | 4.6.3 | DataStorage / PlcModule / MESClientLib | | `System.Text.Json` | 10.0.8 | PlcModule / MESClientLib | | `System.Text.Encodings.Web` | 10.0.8 | PlcModule / MESClientLib | | `System.Diagnostics.DiagnosticSource` | 10.0.8 | PlcModule / MESClientLib | | `System.Configuration.ConfigurationManager` | 8.0.0 | PlcModule | | `System.Management` | 4.7.0 | PlcModule | | `System.Formats.Asn1` | 10.0.8 | PlcModule | | `System.IO.Hashing` | 9.0.12 | PlcModule | ### 框架程序集(GAC 引用) | 程序集 | 引用项目 | |--------|----------| | `System.Web` | EcuModule / ValueCan | | `System.Configuration` | PlcModule / ValueCan | ## 原生 DLL 与外部组件 ### icsneo40.dll(ValueCAN 驱动) - **来源**:Intrepid Control Systems, Inc. - **获取方式**:因厂商再分发许可限制,本仓库不随附该驱动文件。请从 Intrepid 官网或设备配套安装包获取 `icsneo40.dll`,放置到仓库根目录的 `Dll/` 文件夹中(该目录需自行创建) - **用途**:ValueCAN 系列硬件设备的底层 API,由 `Plugins/ValueCan/icsNeoClass.cs` 通过 P/Invoke 调用 ### icsftd3xx.dll(FTDI USB 驱动) - **来源**:Future Technology Devices International Ltd. (FTDI) - **获取方式**:同样不随仓库分发,请从 FTDI 官网下载 `icsftd3xx.dll` 并放置到 `Dll/` 目录 - **用途**:ValueCAN 设备的 USB 串行接口驱动 ### STNodeEditor(可视化节点编辑器) - **来源**:开源项目 STNodeEditor(作者:DebugST) - **集成方式**:源码直接纳入解决方案(`ST.Library.UI` 项目),非 NuGet 引用 - **用途**:提供流程编排画布、节点拖拽、属性编辑等可视化能力 ## 配置文件 | 文件 | 位置 | 用途 | |------|------|------| | `config.json` | `Config/` | 全局应用配置(硬件、UDS、日志、ID 过滤、数据库连接等) | | `log4net.config` | `Config/` | log4net 日志配置 | | `mes-interfaces.json` | `Config/` | MES 接口配置 | ## 构建说明 ### 环境要求 - Visual Studio 2022(v18.6+)或 MSBuild / `dotnet` CLI - .NET Framework 4.7.2 开发工具包 - PowerShell(仅当使用分卷形式的驱动文件时需要;推荐直接放置完整的 `icsneo40.dll`) ### 构建命令 ```powershell # 还原 NuGet 包 dotnet restore ECUFlashing.sln # 构建整个解决方案(Debug) dotnet msbuild ECUFlashing.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /nologo # 单独构建主程序 dotnet msbuild .\ECUFlashingApp\ECUFlashingApp.csproj /t:Build /p:Configuration=Debug /p:Platform=AnyCPU /nologo ``` ### 构建后处理 `ECUFlashingApp.csproj` 定义了构建后目标,会自动将以下内容复制到输出目录(`bin\Debug\`): - `Config/` → 输出目录 `Config/` - `Flows/` → 输出目录 `Flows/`(流程配置文件) - `Assembly/` → 输出目录 `Assembly/`(总成映射文件) - `SubFlows/` → 输出目录 `SubFlows/`(子流程配置文件) - `Dll/*.dll` → 输出目录 `Dll/`(原生驱动 DLL) `Plugins/ValueCan/ValueCan.csproj` 构建后会自动将插件 DLL 复制到 `ECUFlashingApp/bin/Debug/Plugins/` 目录,由运行时 `PluginManager` 动态加载。 ## 目录结构 ``` ECUFlashing/ ├── Config/ # 配置文件 ├── DataStorage/ # 数据存储模块 ├── Dll/ # 原生驱动 DLL(需自行创建并放入驱动文件,见上文"原生 DLL 与外部组件") ├── ECUFlashingApp/ # 主应用程序 ├── EcuModule/ # ECU 通信模块 ├── FlowOrchestration/ # 流程编排模块 ├── GlobalInfrastructure/ # 全局基础设施 ├── IdentityModule/ # 身份认证模块 ├── LoggingLib/ # 日志库 ├── MESClientLib/ # MES 客户端库 ├── DebugUI/ # MES 接口测试工具 ├── PlcModule/ # PLC 通信模块 ├── Plugins/ │ └── ValueCan/ # ValueCAN 硬件插件 ├── ST.Library.UI/ # STNodeEditor 源码 └── ECUFlashing.sln # 解决方案文件 ``` ## 开源许可 本项目基于 [MIT License](LICENSE) 开源发布。第三方组件(NuGet 包、OPC UA 库、STNodeEditor 等)遵循其各自的原许可协议;Intrepid / FTDI 硬件驱动 DLL 不随本仓库分发,需自行获取。