行业资讯
.NET 9.0 工业设备数据采集与监控平台
目录前言项目介绍项目功能项目特点项目技术后端技术栈环境要求项目代码项目效果项目源码GitHubhttps://github.com/Timi0v0/IndustrialMonitorPlatform总结前言工业场景里设备数据采集和监控从来不是一件简单的事。PLC、传感器、各类仪表分散在车间各处协议五花八门数据格式也各说各话。更麻烦的是设备还没接入就得先搞定用户管理、权限控制、数据存储这些基础能力光搭架子就要花不少时间。本文推荐一个用 .NET 9 从头搭建一个设备接入、数据采集、实时监控、报警处理、历史查询和第三方接口开放的全链路平台。项目介绍一个基于 .NET 9 的工业设备数据采集与监控平台。它的目标很直接模拟工业现场中设备接入、数据采集、实时监控、报警处理、历史查询和第三方接口开放等典型业务链路。这套系统采用典型的分布式架构后端 API 负责提供业务接口和实时推送后台采集服务独立运行、持续拉取设备数据桌面客户端作为监控界面设备模拟器用来模拟真实设备的数据上报行为。各个模块各司其职互不干扰。当前项目已经完成了基础框架的搭建解决方案分层、基础实体定义、EF Core SQLite 数据访问、Serilog 日志、Swagger 接口文档、WPF 客户端外壳、采集 Worker 和设备模拟器。后面可以继续在此基础上补齐设备管理 API、真实采集协议、SignalR 推送和监控界面。项目功能从业务场景来看这套平台覆盖了工业设备监控的完整链路功能模块说明设备管理设备编码、名称、协议类型、IP 地址、端口、采集周期等基础信息维护数据采集后台 Worker 服务按配置周期拉取设备数据支持多设备并行采集实时监控通过 SignalR 将采集到的数据实时推送到 WPF 客户端报警处理基于报警规则数据项、比较符、阈值、报警等级自动触发报警记录历史查询设备历史数据的检索、导出和分析第三方接口对外提供标准 API方便其他系统集成项目特点特点描述分层清晰Domain / Application / Infrastructure / Api / Collector 各层职责明确便于维护和扩展采集与 API 分离采集 Worker 独立运行不影响 API 服务的稳定性也方便单独部署和扩容实时数据推送SignalR 加持数据采集后能第一时间推送到监控端不用等轮询本地存储优先SQLite 作为数据存储无需单独安装数据库服务开箱即用设备模拟支持自带设备模拟器开发阶段就能跑通全流程不用依赖真实硬件桌面监控客户端WPF HandyControl LiveCharts2界面响应式和实时图表都有现成方案可观测性Serilog 结构化日志开发和生产环境都能方便地追踪问题项目技术后端技术栈技术用途.NET 9.0运行时和基础框架标准期限支持版本ASP.NET Core Web API提供 RESTful API 和 SignalR 推送能力Entity Framework CoreORM 数据访问支持自动迁移和多种数据库SQLite嵌入式数据库无需独立服务端SignalR实时双向通信将设备数据推送到 WPF 客户端Serilog结构化日志支持滚动文件和多种输出目标FluentValidation请求参数校验把验证逻辑从控制器里抽出来Mapster对象映射DTO 和实体之间的转换不用手写环境要求Windows 10/11.NET SDK 9.0Visual Studio 2022 或 Rider需支持 .NET 9 和 WPFSQLite 数据库由 API 启动时自动创建无需额外安装项目代码项目采用清晰的分层架构解决方案结构是这样的IndustrialMonitorPlatform.sln src/ ├── IndustrialMonitor.Api/ # API 服务Swagger迁移入口 ├── IndustrialMonitor.Application/ # 应用层业务编排 ├── IndustrialMonitor.Collector/ # 后台采集 Worker ├── IndustrialMonitor.DeviceSimulator/ # 设备模拟器 ├── IndustrialMonitor.Domain/ # 领域实体 ├── IndustrialMonitor.Infrastructure/ # EF Core DbContext迁移 ├── IndustrialMonitor.Shared/ # DTO常量等共享类型 └── IndustrialMonitor.Wpf/ # WPF 桌面客户端看一下采集 Worker 的核心实现思路。BackgroundService是 .NET 提供的长期运行服务基类采集 Worker 继承它之后在ExecuteAsync方法里写循环任务public classCollectorWorker : BackgroundService { privatereadonly ILoggerCollectorWorker _logger; privatereadonly IServiceScopeFactory _scopeFactory; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // 这里遍历所有设备执行采集逻辑 _logger.LogInformation(采集任务执行中...); await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken); } } }API 这边的 DbContext 配置也很常规在Program.cs里注册 EF Core 并指定 SQLite 提供程序builder.Services.AddDbContextAppDbContext(options options.UseSqlite(builder.Configuration.GetConnectionString(DefaultConnection)));API 启动时会自动执行db.Database.Migrate()数据库文件直接在运行目录下生成不用操心建表的事 。设备模拟器更简单就是一个控制台程序定时读取配置里指定的设备编码和发送间隔模拟往采集服务发送数据。目前已经能读到配置并输出日志后续扩展成 TCP、Modbus 或 MQTT 上报都很方便。WPF 客户端这边用了 MVVM 模式CommunityToolkit.Mvvm 提供了ObservableObject和RelayCommandViewModel 写起来比较干净。HandyControl 负责界面控件LiveCharts2 用来画实时曲线。项目效果启动流程API、采集 Worker、设备模拟器、WPF 客户端四个服务可以分别启动也可以把多个项目设置为同时启动一次跑通全链路。数据流验证设备模拟器生成模拟数据 → 采集 Worker 接收 → 存入 SQLite → API 提供查询接口 → WPF 通过 Refit 调用 API 展示数据。这套流程的数据链路已经通了后续只是把各个环节的业务逻辑补全。Swagger 文档API 启动后访问/swagger接口文档自动生成调试和联调都很方便。日志输出Serilog 配置了滚动文件输出开发阶段看控制台生产环境看文件排查问题有迹可循。从实际搭建体验来看从拉代码到全部跑起来基本在十分钟以内。对于工业场景里的数据采集项目这种拿来就能跑的体验还挺难得的。项目源码本地运行需要几步# 还原依赖 dotnet restore # 编译整个解决方案 dotnet build # 启动 API默认端口 5281 dotnet run --project src/IndustrialMonitor.Api/IndustrialMonitor.Api.csproj # 启动采集 Worker dotnet run --project src/IndustrialMonitor.Collector/IndustrialMonitor.Collector.csproj # 启动设备模拟器 dotnet run --project src/IndustrialMonitor.DeviceSimulator/IndustrialMonitor.DeviceSimulator.csproj # 启动 WPF 客户端 dotnet run --project src/IndustrialMonitor.Wpf/IndustrialMonitor.Wpf.csproj如果用 Visual Studio直接打开IndustrialMonitorPlatform.sln把多个项目设置为同时启动就行。如果后续实体模型发生变化可以通过 EF Core 的迁移命令更新数据库dotnet ef migrations add MigrationName \ --project src/IndustrialMonitor.Infrastructure/IndustrialMonitor.Infrastructure.csproj \ --startup-project src/IndustrialMonitor.Api/IndustrialMonitor.Api.csproj \ --output-dir Database/MigrationsGitHubhttps://github.com/Timi0v0/IndustrialMonitorPlatform总结项目没有一上来就追求大而全的功能覆盖而是先把分层架构、数据访问、日志、实时推送这些基础能力搭扎实了。设备管理、采集、报警、监控这些核心业务模块都留好了接口和位置后续只需要按顺序往里面填业务逻辑就行。从技术选型来看.NET 9 EF Core SignalR SQLite 这套组合在工业数据采集场景下是够用的。采集 Worker 和 API 分离的架构也为后续扩展留了余地——采集服务可以单独部署到靠近设备的边缘节点API 服务集中部署在云端或中心机房。大家做工业物联网相关的项目或者想找一个 .NET 9 的全栈实战案例来练手这套框架值得花点时间跑起来看看。光是研究它的分层设计和采集 Worker 的实现就能学到不少东西。引入地址
郑州网站建设
网页设计
企业官网