C# 轻量级工业温湿度监控系统(含数据库与源码)

项目介绍

一套基于 Windows 平台开发的工业温湿度集中监控系统,主要服务于拥有多个监测站点(最多6个)的中小型制造或仓储场景。

系统通过 Modbus TCP 协议与现场控制器通信,实时获取各站点的温度、湿度数据,并同步展示设备运行状态。'

整个系统以桌面应用形式部署,无需复杂服务器环境,便于在工控机上直接安装使用。

项目功能

1、实时监控界面

动态刷新六个站点的温湿度数值及设备连接状态,辅以滚动报警条提示当前异常;

2、参数设置模块

允许配置通信地址、端口及各类报警阈值;

3、配方管理

支持保存多套温湿度控制策略(每套包含6个站点的上下限及报警使能状态),可一键下发至设备;

4、历史趋势模块

定时采集并存储数据,用户可按时间段查询并对比曲线;

5、报警追溯

自动记录所有触发与恢复事件,支持导出为报表;

6、用户管理

基于角色权限控制各功能模块的访问,确保操作安全。

项目特点

项目特点在于其实用性与工程化思维。

系统采用本地文件(INI 和 Excel)管理设备配置、变量定义与配方数据,避免了数据库依赖,在资源有限的工控环境中运行更稳定。

界面设计简洁直观,操作逻辑贴近一线人员习惯------例如配方名称直接对应 .ini 文件名,修改即存盘,应用即写入设备寄存器。

同时,系统内置自动重连机制和数据有效性校验,即便网络短暂中断也能快速恢复,保障监控连续性。

项目技术

  • 主窗体(FrmMain)通过后台任务持续轮询设备数据,利用 ObservableCollection 实现报警信息的自动刷新;

  • 数据解析部分封装了 BitLib、ShortLib、FloatLib 等工具类,精准处理不同数据类型在字节流中的偏移与字节序;

  • 配方管理窗体(FrmRecipe)展示了典型的 CRUD 操作:从界面上读取6个站点的参数,序列化为 JSON 存入本地 INI 文件;应用时将浮点值乘以10转为 short 类型,按固定顺序打包写入 Modbus 寄存器(起始地址36)。

这种设计既保证了配置灵活性,又满足了工业协议对数据格式的严格要求。

项目代码

复制代码
/// <summary>
/// 初始化设备参数
/// </summary>
/// <returns></returns>
private Device LoadDevice()
{
    Device device = new Device();
    try
    {
        if (!File.Exists(strDevicePath))
        {
            CommonMethods.AddLog(1, "Device.ini文件不存在!");
            returnnull;
        }

        device.IPAddress = IniConfigHelper.ReadIniData("设备IP", "IP", "127.0.0.1", strDevicePath);
        device.Port = IniConfigHelper.ReadIniData("设备端口号", "Port", "502", strDevicePath);
        device.CurrentRecipe = IniConfigHelper.ReadIniData("配方", "配方名称", "", strDevicePath);

        device.GroupList = LoadGroupList();
        return device;
    }
    catch (Exception)
    {
        CommonMethods.AddLog(1, "加载设备信息异常!");
    }
    returnnull;
}

/// <summary>
/// 获取通信组和变量
/// </summary>
/// <returns></returns>
private List<Group> LoadGroupList()
{
    try
    {
        if (!File.Exists(strVariablePath))
        {
            CommonMethods.AddLog(1, "Variable.xlsx文件不存在!");
            returnnull;
        }
        if (!File.Exists(strGroupPath))
        {
            CommonMethods.AddLog(1, "Group.xlsx文件不存在!");
            returnnull;
        }
        List<Group> groups = MiniExcel.Query<Group>(strGroupPath).ToList();
        List<Variable> variables = MiniExcel.Query<Variable>(strVariablePath).ToList();

        foreach (vargroupin groups)
        {
            group.VarList = variables.FindAll(v => v.GroupName == group.GroupName);
        }
        return groups;
    }
    catch (Exception)
    {
        CommonMethods.AddLog(1, "加载xlsx文件异常!");
    }
    returnnull;
}

项目效果

系统启动后自动加载设备配置与变量定义,建立通信连接,并开始每秒采集一次数据。当某站点温湿度超出设定范围,不仅界面立即弹出提示,还会在日志中记录触发/消除事件,供后续追溯。

配方切换过程流畅,写入成功后自动更新当前配方名称,确保操作闭环。整个流程无卡顿、无数据丢失,充分满足7×24小时连续运行需求。

系统登录

集中监控

参数设置

配方管理

报警追溯

历史趋势

用户管理

变量配置

项目源码

项目源码结构清晰,核心逻辑集中在 FrmMain 的 DeviceCommunication 方法和 FrmRecipe 的 btnUseRecipe_Click 方法中:

  • 前者体现了工业通信的典型模式:循环读取 → 解析变量 → 触发报警 → 断线重连;

  • 后者则展示了如何将用户配置转化为设备可识别的寄存器数据。

代码未使用高级框架,但模块划分合理、错误处理到位、注释充分,具备良好的可维护性和扩展潜力。

相关推荐
天空属于哈夫克312 小时前
企业微信消息回调处理:如何避免慢查询拖垮整个服务?
数据库·php·企业微信
十年Java程序媛12 小时前
Redis 分布式锁 + GZIP 压缩缓存踩坑|高并发缓存真实线上复盘
java·开发语言·spring boot·redis·分布式·缓存·面试
低频电磁之道12 小时前
C++ 中有符号与无符号类型混用可能导致的问题
开发语言·c++
烟雨归来12 小时前
Oracle备份NFS IO挂死引发PQ并行进程耗尽process
数据库·oracle
acd1200912 小时前
PHP 8.1 下 Swoole 协程 PDO 偶尔出现 MySQL 连接丢失问题排查
数据库·oracle
cc57250265313 小时前
2027校招:大数据管理与应用转财务数字化,会计业务、SQL与BI学习路线
数据库·sql·学习
慧都小妮子13 小时前
MSG 附件太占内存?Aspose.Email for .NET 26.9 延迟加载
c#·.net·aspose·内存优化·延迟加载·aspose.email·附件内存
梦想不只是梦与想13 小时前
SQLAlchemy:异步、连接池 (四)
数据库·fastapi·sqlalchemy
for_ever_love__13 小时前
LangChain Token 计数与成本控制:先知道钱花在哪
开发语言·langchain
m0_5474866613 小时前
《数据结构 (C语言)》期末试卷及答案(10套)2026版
c语言·开发语言·数据结构