『7x24小时有问必答』

前言

工业现场的数据采集与监控,说复杂也复杂,说简单也简单。复杂在于涉及硬件通信、协议解析、数据存储和展示;简单在于如果能有一套趁手的工具,把这些环节串起来,事情就顺了。
这几年陆续接触过不少上位机软件,要么功能堆得满满当当但界面粗糙得像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 xxx

cd xxx

还原依赖

dotnet restore

运行

dotnet run

初始配置

应用启动后会自动生成默认配置(温湿度、压力、振动三个传感器),默认使用 Mock 模拟数据源,无需外部设备即可体验全部功能。

总结

这套上位机的功能覆盖了工业传感器监控的核心场景,没有过度设计;技术选型围绕 .NET 8 原生生态展开,依赖可控;界面采用 Material Design 但不追求炫酷,工业场景下信息清晰比花哨重要得多。
如果正在找一个能快速上手的工业数据监控方案,或者想借鉴 WPF + Material Design 在工业软件中的应用思路,这个项目值得花时间翻翻源码。

关键词

工业传感器上位机WPFMaterial Design.NET 8实时监控数据采集报警管理MVVMScottPlot数据持久化串口通信、TCP通信
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码