# 智能仓储环境监控系统 **Repository Path**: small-code-library/SmartWarehouseMonitor ## Basic Information - **Project Name**: 智能仓储环境监控系统 - **Description**: 基于Winform+.NET Framework 4.8+C#7.3+Dapper+Sqlite数据库 环境下的上位机软件系统 开发一套 **WinForm 上位机软件**,实现对仓库温湿度、烟雾浓度等环境参数的 **实时采集、可视化监控、自动报警、数据管理与云端联动**,形成完整的“采集→处理→存储→报警→审计”闭环。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2026-08-26 - **Last Updated**: 2026-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能仓储环境监控系统(WinForm 上位机) > 本文件由仓库内全部项目文档提炼而成,是后续一切编码工作的**最高权威约定**。 > 任何新代码、新会话在动手前必须先通读本文件,并按“参考文档索引”回查细节。 --- ## 1. 项目是什么 一个用于求职作品集 / 面试演示的工业上位机个人项目: - 项目名:**智能仓储环境监控系统**(`SmartWarehouseMonitor`,版本 V2.0) - 形态:WinForm 桌面应用(上位机),模拟电力智能仓储场景 - 功能:通过串口(Modbus RTU)与 TCP(Modbus TCP)采集温湿度 / 烟雾传感器数据, 完成实时监控、阈值报警、设备控制、巡检、审计、本地存储(SQLite)与云端 HTTP 上报的闭环 - **零硬件依赖**:用 VSPD + Modbus Slave + 网络调试助手做“软件在环”仿真 --- ## 2. 核心需求 | 需求类型 | 具体内容 | | :----------- | :------------------------------------------------------- | | **数据采集** | 通过串口(Modbus RTU)和 TCP(Modbus TCP)采集传感器数据 | | **设备控制** | 手动/自动控制通风、空调、报警设备 | | **实时监控** | 仪表盘、曲线图展示温湿度、烟雾浓度 | | **报警机制** | 超阈值声光报警,记录报警日志 | | **数据存储** | SQLite 本地存储实时数据与报警记录 | | **历史查询** | 按时间、设备查询历史数据并导出 | | **云端对接** | 通过 HTTP/RESTful API 推送报警信息 | | **设备扩展** | 支持反射机制动态加载新设备驱动 DLL | ------ ## 3. 技术选型 | 类别 | 技术 | 版本/说明 | | :------------ | :-------------------------------------------- | :---------------------------- | | 开发平台 | Visual Studio 2019 | 社区版/专业版 | | 目标框架 | .NET Framework 4.8 | 工业上位机主流稳定版本 | | 编程语言 | C# | 语言版本 7.3(VS2019 默认) | | UI 框架 | Windows Forms | 原生 WinForm,启用双缓冲 | | 串口通信 | `System.IO.Ports` | .NET Framework 内置 | | 网络通信 | `System.Net.Sockets.TcpClient` | 内置 | | Modbus 协议 | NModbus4 (NuGet) | 支持 RTU 与 TCP | | 本地数据库 | System.Data.SQLite (NuGet) | v1.0.118,兼容 .NET Framework | | ORM 工具 | Dapper (NuGet) | 轻量级,高性能 | | HTTP 客户端 | `System.Net.Http.HttpClient` | 采用单例模式,配置 TLS1.2 | | 日志框架 | log4net (NuGet) | v2.0.15,配置灵活 | | 依赖注入/解耦 | 手动构造函数 + 工厂模式(暂不引入重量级 IoC) | 保持轻量 | | 仿真工具 | VSPD(虚拟串口)、Modbus Slave、网络调试助手 | 纯软模拟 | ## 4. 硬性技术约束(不可违反) | 项 | 约束 | | --------- | ------------------------------------------------------------ | | 开发环境 | Visual Studio 2019(不用 VS2022 专有语法) | | 语言/框架 | C# 7.3 + .NET Framework 4.8(禁止 .NET Core/.NET 5+ 语法与 API) | | UI | Windows Forms;主窗体最低支持 1366×768;界面文字中文;启用双缓冲 | | 通信 | `System.IO.Ports` 串口;`System.Net.Sockets.TcpClient`;NModbus4 实现 Modbus RTU/TCP | | 数据库 | System.Data.SQLite + Dapper(本地 SQLite,禁止接入其它 DB 作为默认实现) | | HTTP | `HttpClient` 单例(防 Socket 耗尽),HTTPS + JSON + ApiKey | | 日志 | log4net(按日期滚动,保留 6 个月) | | 依赖注入 | Autofac(构造函数注入;不引入其它 IoC) | | 运行平台 | Windows 10/11、Server 2016+ | | 编码 | 源文件 UTF-8;XML 注释覆盖核心类与公共方法;注释率目标 ≥20% | | 并发能力 | 支持 ≤50 台设备并行采集;采集周期默认 2000ms(可配 500–10000ms) | ### 5.NuGet 包(版本锁定) `Dapper 2.0.78`、`Dapper.Contrib 2.0.78`、`System.Data.SQLite.Core 1.0.118`、 `NModbus4 2.0.0/2.1.0`、`log4net 2.0.15`、`Newtonsoft.Json 13.0.3`、 `Autofac 6.4.0`、`ReaLTaiizor 3.7.9.7`(UI 主题)、`ScottPlot.WinForms 5.0.36`(曲线图)。 分项目安装建议(Model 装 Dapper/Dapper.Contrib/SQLite;DAL 装 SQLite/Dapper;Communication 装 NModbus4;Common 装 log4net/Newtonsoft.Json;Service 装 Newtonsoft.Json/Autofac;UI 装 ReaLTaiizor/ScottPlot/Autofac/SQLite.Core/log4net)。 ## 6. 系统逻辑架构 采用 **分层架构**,自下而上: - **Model 层**(数据契约):定义实体类、枚举、常量,无任何外部引用。 - **Common 层**(基础设施):日志、配置读取、CRC校验、扩展方法等。 - **Communication 层**(通信抽象):封装串口/TCP 通信,实现 Modbus 协议帧构造与解析。 - **Device 层**(设备驱动):定义 `IDeviceDriver` 接口,实现各类传感器驱动,支持反射动态加载。 - **DAL 层**(数据访问):基于 Dapper + SQLite 实现 Repository 模式。 - **Service 层**(业务服务):数据采集调度、报警引擎、云端 API 调用。 - **UI 层**(表示层):WinForm 主程序,通过事件订阅与 Service 交互,不直接操作硬件或数据库。 > **依赖方向**:UI → Service → { DAL, Device } → Communication → Common → Model(单向无循环) ## 7.完整表结构清单 | 序号 | 表名 | 分类 | 说明 | | :--- | :------------------------ | :----- | :------------- | | 1 | `DeviceConfig` | 配置表 | 设备配置 | | 2 | `UserAccount` | 配置表 | 用户账号 | | 3 | `ShiftConfig` | 配置表 | 班次字典 | | 4 | `SensorCalibrationRecord` | 配置表 | 传感器校准记录 | | 5 | `SensorData` | 数据表 | 传感器历史数据 | | 6 | `AlarmRecord` | 数据表 | 报警记录 | | 7 | `PatrolRecord` | 数据表 | 巡检记录 | | 8 | `OperationLog` | 日志表 | 操作日志 | | 9 | `ConfigChangeLog` | 日志表 | 配置变更日志 | | 10 | `PendingUploadQueue` | 队列表 | 待补传队列 | ## 8. 功能模块与角色 九大模块 :用户认证与权限 / 实时监控 / 报警管理 / 设备控制 / 巡检管理 / 系统配置(工程师) / 数据管理 / 云端通信 / 系统自运维。 角色(角色枚举):`Operator` 操作员 / `ShiftLeader` 班长 / `Engineer` 工程师 / `Manager` 主管 / `SysAdmin` 系统管理员。继承关系:班长、工程师泛化继承操作员全部权限;主管、系统管理员独立。 **功能码** | 码 | 含义 | 项目用在哪 | | ----------- | ----------------------- | ---------------------------- | | 0x01 | 读线圈 | 常量已定义未使用 | | 0x02 | 读离散输入 | 常量已定义未使用 | | 0x03 | 读保持寄存器 | **主用**:读温湿度/烟雾/状态 | | 0x04 | 读输入寄存器 | 常量已定义未使用 | | 0x05 | 写单个线圈 | 报警状态位(仿真用 06 代替) | | 0x06 | 写单个寄存器 | **主用**:写控制/阈值/校准 | | 0x0F / 0x10 | 写多个线圈 / 多个寄存器 | 常量已定义未使用 | **寄存器** - 单位是 16 位;浮点/大整数要拆两个寄存器。 - 本项目统一 **INT16 + 缩放**,例如温度实际值 = 寄存器值 × 0.1。 - 地址一律走常量表 `ModbusRegisterConst.cs`,不写魔法数字: - 温湿度:0x0000 温度、0x0001 湿度、0x0002 报警状态、0x0005 温度偏移、0x0006 湿度偏移、0x0007 满量程增益 - 烟雾:0x0000 浓度、0x0001 阈值、0x0002 报警状态 - 通风/除湿/空调:0x0000 控制、0x0001 目标值、0x0002 状态 ## 9.项目展示(简单示例) ### 登录页面 ![登录界面](SWMimage/%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2.png) ### 管理员界面 ![设备监控](SWMimage/%E8%AE%BE%E5%A4%87%E7%9B%91%E6%8E%A7.png) ### 维护工程师界面 ![仪表盘](SWMimage/%E4%B8%BB%E7%95%8C%E9%9D%A2.png) 其他身份界面此处省略... # 10.小结 该项目为个人学习项目,仅作为学习参考