前言
工业现场的数据采集与监控,说复杂也复杂,说简单也简单。复杂在于涉及硬件通信、协议解析、数据存储和展示;简单在于如果能有一套趁手的工具,把这些环节串起来,事情就顺了。
这几年陆续接触过不少上位机软件,要么功能堆得满满当当但界面粗糙得像Excel插件,要么界面做得漂亮但扩展性堪忧。本文要介绍的这套工业传感器实时监控上位机,算是在功能和体验之间找到了一个不错的平衡点。
项目介绍
一套基于 .NET 8 + WPF + Material Design 开发的工业传感器数据监控系统。
主要解决三类问题:一是多传感器数据的实时采集与展示,二是异常状态的报警与追溯,三是历史数据的存储与统计分析。
系统支持三种数据源——模拟数据(方便在没有硬件的环境下测试)、串口通信(对接常见工业传感器)和 TCP 网络(适用于分布式部署场景)。开箱即用,配置持久化到本地 JSON 文件,重启不丢设置。
项目功能
实时监控面板:多传感器数据并行展示,实时折线图动态呈现数值变化趋势,当前值、最大/最小/平均值一目了然
报警管理:支持上下限阈值触发,报警时弹窗通知伴随声音提示,所有报警记录可查询可导出
参数配置:传感器名称、类型、单位、量程、报警阈值全都可以灵活调整;数据源在 Mock/COM/TCP 之间一键切换
数据统计:按传感器维度汇总均值、标准差、极值,还附带直方图展示数据分布
数据持久化:CSV 按日期分文件存储,采用缓冲批量写入(每50条刷写一次),性能开销小;SQLite 作为可选方案满足结构化查询需求
项目特点
上手零门槛:默认使用模拟数据源,下载即跑,不用接任何硬件就能体验全部功能
数据源灵活切换:Mock / 串口 / TCP 三种模式随意切换,从实验室测试到产线部署无缝衔接
界面干净不花哨:Material Design 工业青主题配色,左侧深色导航栏+右侧内容区域,信息层级清晰
配置一次管够:所有参数持久化到本地 JSON,重启应用自动加载上次的设置
轻量自包含:MVVM 框架是自己实现的 ViewModelBase + RelayCommand,没有额外引入大型第三方 MVVM 库,依赖更精简
项目技术
技术项 | 说明 |
.NET 8 | 目标框架,长期支持版本 |
WPF + XAML | 桌面 UI 框架,数据绑定与样式分离 |
Material Design Themes | Material Design 风格控件库,深色主题 |
自实现 ViewModelBase / RelayCommand | 轻量 MVVM 底座,无外部依赖 |
ScottPlot.WPF | 高性能实时曲线渲染,DataStreamer 固定容量模式 |
CSV / SQLite | 双模式数据持久化,按日期分文件或结构化存储 |
Microsoft.Extensions.Hosting | 依赖注入与应用程序生命周期管理 |
项目代码
整个项目的结构按功能拆得很清楚,从代码组织上能看出花了心思在分层上:
├── Models/ # 数据模型│ ├── SensorData.cs # 传感器数据│ ├── SensorConfig.cs # 配置模型│ └── AlarmRecord.cs # 报警记录├── ViewModels/ # 视图模型│ ├── MainViewModel.cs # 主窗口导航│ ├── MonitorViewModel.cs # 监控面板逻辑│ ├── ConfigViewModel.cs # 配置面板逻辑│ └── AlarmLogViewModel.cs # 报警日志逻辑├── Views/ # WPF 视图│ ├── MonitorView.xaml # 监控面板界面│ ├── ConfigView.xaml # 配置面板界面│ └── AlarmLogView.xaml # 报警日志界面├── Services/ # 业务服务层│ ├── ISensorSource.cs # 数据源接口│ ├── MockSensorSource.cs # 模拟数据源│ ├── SerialSensorSource.cs# 串口数据源│ ├── TcpSensorSource.cs # TCP 数据源│ ├── IDataStorage.cs # 存储接口│ ├── CsvDataStorage.cs # CSV 存储实现│ ├── SqliteDataStorage.cs # SQLite 存储实现│ ├── IAlarmService.cs # 报警服务接口│ └── AlarmService.cs # 报警服务实现├── Resources/ # 图标、样式、字体等资源└── App.xaml / App.xaml.cs # 应用入口与 DI 配置项目效果
主界面分为左侧导航和右侧内容区。左侧是深色背景的导航栏,从上到下依次是:实时监控、参数配置、报警日志、数据统计四个入口。右侧内容区随着导航切换展示对应面板。
实时监控面板的亮点在于 ScottPlot 绘制的实时曲线,数据流式进入,固定缓存点数防止内存膨胀。每个传感器卡片独立显示当前值、趋势曲线和统计摘要。报警触发时,界面右下角弹出通知卡片,同时伴随提示音——这个细节在嘈杂的车间环境里尤其有用。
参数配置页面把所有可调项聚合在一起:传感器参数表格、数据源下拉选择、串口/TCP 参数输入框、采样间隔滑块,改完点"保存配置"即可生效,不用重启。
项目源码
环境要求
.NET 8 SDK
Visual Studio 2022+(推荐)
克隆仓库
git clone xxxcd xxx还原依赖
dotnet restore运行
dotnet run初始配置
应用启动后会自动生成默认配置(温湿度、压力、振动三个传感器),默认使用 Mock 模拟数据源,无需外部设备即可体验全部功能。
总结
这套上位机的功能覆盖了工业传感器监控的核心场景,没有过度设计;技术选型围绕 .NET 8 原生生态展开,依赖可控;界面采用 Material Design 但不追求炫酷,工业场景下信息清晰比花哨重要得多。
如果正在找一个能快速上手的工业数据监控方案,或者想借鉴 WPF + Material Design 在工业软件中的应用思路,这个项目值得花时间翻翻源码。
关键词
工业传感器、上位机、WPF、Material Design、.NET 8、实时监控、数据采集、报警管理、MVVM、ScottPlot、数据持久化、串口通信、TCP通信 最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!