『7x24小时有问必答』

前言

工业自动化和环境监控领域,实时掌握现场的温湿度数据至关重要。传统的监控方式往往依赖人工记录或简单的报警装置,缺乏直观性和连续性。
本文推荐一个基于WinForm开发的上位机温湿度采集系统,通过Modbus通信协议与下位机进行数据交互,实现数据的实时采集、可视化展示与智能监控。

项目介绍

项目是一个典型的工业上位机软件,主要用于采集现场温湿度传感器的数据。系统通过串口与Modbus从站设备(如温湿度变送器)建立连接,定时轮询设备数据,并在界面上以数值和模拟仪表的形式进行双重展示,让操作人员能够一眼看穿当前的环境状态。

项目功能

1、设备连接管理
支持选择电脑的串口号(COM端口)及通信波特率(如9600、19200等),通过点击按钮实现与设备的连接或断开。
2、实时数据读取
利用定时器(Timer)机制,系统每隔1秒自动向设备发送Modbus读取指令,获取最新的温湿度寄存器值。
3、数据解析与显示
将接收到的字节数据进行高低位转换和缩放计算(乘以0.1),在文本框中显示精确的温湿度数值。
4、可视化仪表盘
通过自定义控件(UserControl)模拟温湿度计,根据数据大小动态改变白色遮罩层的高度,形成直观的柱状图升降效果。
5、状态反馈
连接成功后,按钮颜色变红并显示"断开连接",状态栏变绿,提供明确的操作反馈。
6、异常处理
在窗体关闭时自动停止定时器并断开串口,防止资源占用;对非法数据范围进行拦截提示。

项目特点

直观易用:界面设计简洁,既有数字的精确性,又有图形的直观性,符合人机工程学。
稳定可靠:通过定时器控制读取频率,避免了频繁通信导致的串口阻塞,保证了数据的稳定性。
可扩展性强:Modbus通信类(ModBusRTU)封装良好,便于移植到其他工业采集项目中。
安全校验:在数据展示前进行了范围校验(0-90),防止程序因异常数据而崩溃。

项目技术

技术领域
使用的技术/组件
说明
开发平台
WinForm
桌面应用程序界面。
开发语言
C# (.NET Framework)
主要编程语言,具备强大的面向对象特性。
通信协议
Modbus RTU
工业领域最常用的串行通信协议。
硬件接口
SerialPort 类
.NET提供的串口通信类库,用于收发数据。
数据处理
CRC校验、字节解析
确保数据传输的完整性,处理高低位字节序。
UI设计
自定义控件 (UserControl)
继承Control类,实现个性化的温湿度仪表盘。
多线程
Timer (UI线程)
定时触发数据读取,保证界面流畅。

项目效果

运行程序后,用户首先在下拉框选择正确的串口号和波特率(默认9600),点击"连接设备"按钮。连接成功后,按钮变为红色,状态栏变绿。 随后,界面上的温湿度数值开始跳动刷新,模拟仪表的"水银柱"也随之升降。
例如,当接收到湿度数据为589时,程序自动换算为58.9%,并在湿度计控件中显示对应高度的绿色填充,让监控过程变得生动且直观。

项目源码

1、主窗体逻辑  
负责界面交互与数据调度。
// 定时器事件:循环读取寄存器

private  void  timer_Read_Tick(object  sender, EventArgs e)

{

       // 读取2个寄存器,起始地址0

       byte[] result = modBusRTU.ReadHoldingRegister(Convert.ToByte(this.nud_slaveId.Value),  0,  2);

       if  (result !=  null  && result.Length ==  4)

      {

             // 解析字节:高位*256 + 低位

             int  humidity = result[0] *  256  + result[1];

             int  temperature = result[2] *  256  + result[3];

            

             // 显示数据

             this.txtB_H.Text = (humidity *  0.1).ToString();

             this.thcMeter_H.SetHTValue = humidity *  0.1;  // 更新仪表

      }

}

2、自定义仪表控件
实现了可视化的温湿度计。
public  double  SetHTValue

{

       set

      {

             if  (value  <  0  ||  value  >  90)  // 范围限制

            {

                  MessageBox.Show("温湿度值必须在0-90之间");

            }

             else

            {

                   // 计算遮罩高度,实现柱状图效果

                   double  realValue = barHight /  90.0  *  value;

                   this.lblBar.Height = (int)(barHight - realValue);  

            }

      }

}

3、Modbus通信模拟
在实际应用中,ModBusRTULib.ModBusRTU类负责拼接包含从站地址、功能码、起始地址、数据长度及CRC校验码的报文,并通过串口发送。
为了防止丢失,后台回复关键字「温湿度采集系统」,即可获取完整源码地址。

总结

本文介绍的温湿度采集系统,虽然是一个基础的项目,但麻雀虽小五脏俱全。它完美地展示了如何利用C强大的串口通信能力和灵活的UI自定义能力,开发一个工业级的上位机监控软件。不管是学习Modbus协议,还是快速搭建监控原型,这个项目都具有很高的参考价值。

关键词

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注【加群】

推荐阅读

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

收藏
点赞
分享
在看

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

本帖子中包含更多资源

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

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

本版积分规则

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

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

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


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