# run-plc-net **Repository Path**: smallcore/run-plc-net ## Basic Information - **Project Name**: run-plc-net - **Description**: 基于 .NET 8 + WPF 的 Modbus TCP PLC 点位管理与组合调试工具(含实时读取) - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: https://mp.weixin.qq.com/s/LR8q8euf75W1_NY7sA_-QQ - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 3 - **Created**: 2026-01-10 - **Last Updated**: 2026-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: 调试工具, PLC管理, WPF ## README [《.NET 8 + WPF 的 PLC 点位管理与组合调试工具(Modbus TCP)》](https://mp.weixin.qq.com/s/LR8q8euf75W1_NY7sA_-QQ) >声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢! 基于 **.NET 8 + WPF** 的 PLC 点位管理与组合调试工具(Modbus TCP)。 ## 功能 - **PLC管理** - 维护 PLC 列表(`ip:port`) - **点位管理** - 维护点位(offset/名称/类型) - 支持单点 **读 / 写** - **组合调试** - 维护“组合”与“组合明细”(排序、操作值、超时等) - 支持明细上移/下移、删除后自动重排排序 - 执行组合: - 写入点位:写单寄存器(Holding Register) - 读取点位:按超时轮询读取,直到值满足期望 - **实时读取** - 选择 PLC 后,按约 **100ms 周期**轮询读取该 PLC 下全部点位并显示实时值 - 读取失败显示“失败”(红色),不弹窗 ## 技术栈 - **.NET**:net8.0-windows(WPF) - **ORM**:Entity Framework Core + SQLite - **Modbus**:NModbus4(Modbus TCP) ## 目录结构 - `src/RunPlcNet.App/`:WPF UI(入口) - `src/RunPlcNet.Application/`:应用层逻辑(执行组合等) - `src/RunPlcNet.Infrastructure/`:基础设施(EF/SQLite、NModbus 实现、Repository) - `src/RunPlcNet.Domain/`:领域实体 - `app.db`:SQLite 数据库(运行时默认与 exe 同目录) - `publish.bat`:一键发布脚本(生成可分发 exe) ## 环境要求 - Windows 10/11 - .NET SDK 8.x ## 本地运行(开发) - 使用 Visual Studio 2022 打开 `RunPlcNet.sln`,启动项目 `RunPlcNet.App` 或命令行: ```bat # 在仓库根目录执行 dotnet build dotnet run --project .\src\RunPlcNet.App\RunPlcNet.App.csproj ``` ## 发布为单文件 exe 推荐直接使用仓库自带脚本: ```bat publish.bat ``` 发布产物输出到: - `publish/RunPlcNet.App.exe` ### 数据库文件说明(重要) - 默认数据库路径:**exe 同目录** `app.db` - 兼容旧路径:`data/app.db` - `publish.bat` 会在发布后自动把根目录的 `app.db`(或旧路径 `data/app.db`)复制到 `publish/app.db` - 若找不到数据库,程序会在首次运行时自动创建并迁移表结构 ## 常见问题 - **发布时提示文件被占用**:请先关闭正在运行的 `RunPlcNet.App.exe` 再执行发布。 - **实时读取刷新慢**:点位数量多或网络慢时,一轮读完可能超过 100ms,程序会尽量快读并在剩余时间内延时。 ## License 内部使用/学习用途。若需要开源协议,请自行补充。 ![输入图片说明](dotnet.jpg)