前言
工业物联网与智能仓储日益普及,环境数据的实时采集与监控已成为保障物资安全的关键环节。传统的温湿度记录方式往往效率低下,且难以做到异常情况的及时预警。
本文推荐一个基于.NET 8 与 WPF 开发的一套轻量级的温湿度远程监测系统。系统通过 TCP 协议接收下位机上报的数据,不仅提供了直观的实时显示与趋势曲线,还集成了完善的报警功能与多用户权限管理,为中小型场景提供了一套可靠的桌面端解决方案。
项目介绍
一个集数据采集、处理、分析和展示于一体的综合性上位机系统。它利用 TCP 服务端被动接收模式,与各类下位机设备进行通信,实时获取库房或机房内的温度、湿度等关键参数。使用 WPF 现代化的界面表现力,管理人员可以直观地查看环境的实时状态和历史数据。同时,系统内置了强大的报警机制,当环境参数超出预设范围时,能够自动触发警报并生成日志,提醒运维人员迅速采取应对措施。
项目功能
1、实时数据监控
主界面大字显示当前温湿度数值,并通过状态指示灯反映服务运行情况;右上角实时统计在线设备数量,支持多设备并发接入。
2、动态趋势展示
采用 LiveCharts 绘制实时折线图,红色曲线代表温度,蓝色曲线代表湿度;保留最近 200 个数据点防止内存溢出,并支持鼠标滚轮缩放 X 轴。
3、智能报警机制
根据后台配置的阈值(如温度 10~30°C,湿度 20~80%)自动判断状态。一旦超限,界面文字变红并在左下角弹出橙色消息栏;仅在状态变化时写入数据库,避免重复记录。
4、多用户权限管理
系统区分管理员与操作员角色。管理员拥有启停服务器、修改阈值及管理用户的最高权限;操作员仅能查看数据与报警信息,确保系统操作的安全性。
5、数据持久化存储
使用 SQLite + FreeSql ORM 进行数据落盘,包含用户账户、历史数据、报警记录及系统配置四张核心表,启动时自动建表,无需手动维护数据库结构。
6、设备模拟测试
内置控制台模拟器程序,以内置正弦波动加随机噪声模拟真实物理环境,方便在无硬件环境下进行联调与功能验证。
项目特点
|
|
|
|---|---|
| 架构分层清晰 |
|
| 轻量化部署 |
|
| 高安全性设计 |
|
| 内存安全控制 |
|
| 灵活扩展能力 |
|
项目技术
基础框架:.NET 8 SDK + WPF
MVVM 工具包:CommunityToolkit.Mvvm (源生成器实现属性与命令绑定)
数据可视化:LiveChartsCore.SkiaSharpView.WPF (SkiaSharp 硬件加速渲染)
ORM 框架:FreeSql + FreeSql.Provider.Sqlite (CodeFirst 自动迁移)
网络通信:原生 TCP Socket 异步模型 (被动接收下位机数据)
安全加密:PBKDF2 密码哈希工具 (PasswordHasher)
项目效果
系统启动后会自动完成数据库初始化并弹出登录窗口。默认管理员账户为 admin / admin123,登录成功后进入主控台。
点击"启动服务"按钮(默认端口 8080),再运行设备模拟器,WPF 窗口便会开始跳动实时数据。
如果模拟器发送的温度超过 30°C,界面上的状态文字会立刻变红,左下角的橙色报警栏也会同步提示"高温异常"。
管理员可以在右侧控制面板随时调整阈值并保存,所有操作都会即时生效并持久化到本地数据库中。
常见问题
实际部署和使用过程中,可能会遇到一些常规问题,以下为对应的解决指南:
1、端口占用报错
若启动服务时提示"通常每个套接字地址只允许使用一次",说明端口被占用。建议修改端口号后重试,或等待约 30 秒让系统释放端口。
2、模拟器连接断开
请检查上位机是否已正确点击"启动服务",并确认两端配置的端口号完全一致。
3、图表数据清理
如果觉得图表上的数据点过多影响观察,可以直接点击右侧面板的"清除图表"按钮。
4、历史数据查询
所有的历史监测数据均存储在 SQLite 数据库文件(Data/monitor.db)的 data_records 表中。可以使用 DB Browser for SQLite 等任意客户端工具打开并执行 SQL 查询。
5、真实硬件对接
无需更改上位机代码,只需让您的真实硬件/下位机严格按照规定的通信协议格式,向"上位机 IP:端口"发送 TCP 数据即可无缝对接。
6、忘记管理员密码
如果不慎忘记密码,可直接删除程序运行目录下的 Data/monitor.db 文件。重新启动应用后,系统将自动重建数据库并恢复默认的 admin/admin123 账户。
7、修改默认管理员密码
出于安全考虑,admin 主账户本身不可删除。可以先用 admin 登录,通过"管理用户"功能添加一个新的管理员账户,然后用新账户登录后删除旧的 admin 账户即可完成替换。
项目源码
项目的核心目录结构如下,代码逻辑高度模块化:
├── TempMonitorApp/ # WPF 上位机主程序
│ ├── Entities/ # FreeSql ORM 实体映射
│ ├── Repositories/ # 数据仓库层封装 CRUD
│ ├── Services/ # TCP 服务端、报警检测、用户认证等业务逻辑
│ ├── ViewModels/ # 界面状态与 RelayCommand 绑定
│ └── Converters/ # 布尔值转颜色等 UI 转换器
└── DeviceSimulator/ # 独立的下位机设备模拟器
在通信协议上,下位机只需按照 TEMP:25.5;HUMI:60.2;ID:DEV01\n 的格式发送文本流,上位机解析后即可返回 OK\n 确认。整个依赖注入链在 App.xaml.cs 中手动构建,保证了启动的高效性。
总结
这套基于 .NET 8 的温湿度监测系统摒弃了传统上位机臃肿的设计,以极简的架构实现了从数据采集、实时渲染到权限管控的完整闭环。
不管是用于学习,还是作为实际工程项目的使用,它都展现出了极高的实用价值。对于希望快速掌握 C# 桌面应用开发、TCP 网络编程以及现代 MVVM 架构的开发来说,这是一个非常值得参考的实践案例。

