# thermo-hub **Repository Path**: xinxin2017/thermo-hub ## Basic Information - **Project Name**: thermo-hub - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工业热炉控制系统 基于 WPF 与 Modbus TCP 的多炉工业热处理监控与控制客户端。系统面向多台工业炉的集中监控、独立配方执行、报警管理、配方执行历史、用户权限和操作审计,当前版本为 `V1.0.0`。 ![工业热炉系统界面](docs/ui-mockups/furnace-dashboard-v1.png) ## 主要功能 - 多炉监控:默认支持 `1-4` 号炉,每台炉子使用独立的 Modbus Unit ID。 - 炉子控制:启动、停止、升温、保温、降温,以及配方暂停、继续和终止。 - 独立配方:可为不同炉子下发不同的多阶段配方。 - 生产总览:只读展示在线状态、温度、目标温度、加热功率和最近事件。 - 实时趋势:展示当前温度、目标温度与加热功率。 - 配方执行历史:每次配方运行生成一条记录,不再持续写入高频温度采样。 - 报警中心:记录设备报警和 Modbus 通信异常。 - 用户与权限:支持管理员、操作员两级权限,以及用户信息的增删改查。 - 操作审计:记录登录、用户权限、配方、通信配置和炉子控制等重要操作。 - 数据导出:配方执行历史和报警记录支持导出 Excel/CSV。 ## 技术栈 | 组件 | 技术 | | --- | --- | | 桌面客户端 | WPF / .NET 10 | | UI | WPF-UI 4.3 | | MVVM | CommunityToolkit.Mvvm 8.4 | | 图表 | LiveChartsCore 2 | | 数据库 | SQLite / Entity Framework Core 10 | | 日志 | Serilog | | Excel | ClosedXML | | 通信 | Modbus TCP | ## 项目结构 ```text Furnace.Client/ WPF 客户端、页面、ViewModel 和业务服务 Furnace.Core/ 炉子状态、协议寄存器和核心控制模型 Furnace.Data/ SQLite 实体、数据库初始化和仓储 Furnace.Simulator/ 早期调试模拟器源码,当前运行方式不依赖它 docs/ 设计稿和项目文档 ``` ## 环境要求 - Windows 10/11 - .NET 10 SDK - 支持 .NET 10 的 Visual Studio 或 JetBrains Rider - Modbus Slave 或其他支持多 Unit ID 的 Modbus TCP Server 软件 ## 快速开始 ### 1. 获取并构建项目 ```powershell git clone <你的仓库地址> cd Furnace dotnet restore IndustrialFurnaceSystem.sln dotnet build IndustrialFurnaceSystem.sln -c Debug ``` ### 2. 配置 Modbus Slave 客户端默认连接: | 配置项 | 默认值 | | --- | --- | | 地址 | `127.0.0.1` | | TCP 端口 | `5020` | | Unit ID | `1, 2, 3, 4` | | 轮询间隔 | `1000 ms` | 在 Modbus Slave 中创建四个从站,Unit ID 分别设置为 `1`、`2`、`3`、`4`。四个从站使用同一个 TCP 监听端口,每个从站至少提供 7 个 Holding Register。 | 显示地址 | PDU 地址 | 数据 | 类型 | 访问 | | --- | --- | --- | --- | --- | | `40001-40002` | `0-1` | 当前温度 | Float32 | 读/写(虚拟动态模式会回写) | | `40003-40004` | `2-3` | 目标温度 | Float32 | 读/写 | | `40005` | `4` | 加热功率 | UInt16,范围 0-100 | 读/写 | | `40006` | `5` | 设备状态 | UInt16 | 读/写 | | `40007` | `6` | 报警码 | UInt16 | 读 | Float32 使用两个连续的 16 位寄存器,字序为高字在前。不同 Modbus 软件可能显示 PDU 地址 `0-6`,也可能显示保持寄存器地址 `40001-40007`。 设备状态值: | 值 | 状态 | | --- | --- | | `0` | 空闲 | | `1` | 加热 | | `2` | 保温 | | `3` | 降温 | | `4` | 完成 | | `5` | 报警 | > `EnableVirtualDynamics=true` 时,客户端会根据状态、当前温度和目标温度计算虚拟升降温过程,并把当前温度及加热功率回写到 Modbus Slave。连接真实设备时应关闭此选项。 ### 3. 启动客户端 先启动 Modbus TCP Server,再运行: ```powershell dotnet run --project Furnace.Client ``` 也可以在 Visual Studio 中将 `Furnace.Client` 设置为启动项目。 ### 4. 登录 首次运行且数据库中没有用户时,系统会创建默认管理员: ```text 用户名:admin 密码:admin ``` 登录后请立即在“用户与权限”页面修改默认密码。密码使用 PBKDF2 加盐哈希保存;“记住密码”数据使用 Windows DPAPI 加密,并且只对当前 Windows 用户可解密。 ## 配置文件 客户端配置位于: ```text Furnace.Client/appsettings.json ``` 主要配置示例: ```json { "Modbus": { "Host": "127.0.0.1", "Port": 5020, "UnitIds": [1, 2, 3, 4], "PollIntervalMilliseconds": 1000, "ReconnectIntervalMilliseconds": 2000, "RequestTimeoutMilliseconds": 2000, "EnableVirtualDynamics": true }, "Logging": { "Directory": "logs", "MinimumLevel": "Information" }, "Database": { "Path": "furnace.db" } } ``` 管理员也可以在“通信配置”页面修改并保存 Modbus 参数,修改后需要重启客户端。 ## 数据与日志 SQLite 数据库会在首次运行时自动创建,包含: - 用户账户与角色 - 炉子配方及配方步骤 - 配方执行历史 - 报警历史 - 旧版温度历史表(仅为兼容保留,不再持续写入) 日志分为: - `client-日期.log`:运行、通信和异常日志。 - `operations-日期.log`:登录用户的重要操作审计。 数据库、日志、构建目录和本机登录缓存不应提交到 Git。 ## 用户权限 | 功能 | 管理员 | 操作员 | | --- | --- | --- | | 总览与炉子监控 | ✓ | ✓ | | 炉子控制与配方运行 | ✓ | ✓ | | 配方、报警和历史 | ✓ | ✓ | | 用户与权限 | ✓ | — | | 通信配置 | ✓ | — | | 操作审计 | ✓ | — |