郑 旭 耿 健 王玉亮
(南京熊猫汉达科技有限公司,江苏南京210000)
实验室中对温湿度的监测有着很高的要求,比如在长度计量中,温度发生零点几摄氏度的变化就可能对测量结果产生很大的影响。公司目前是使用机械式温湿度计和数显温湿度计采集温湿度,温湿度记录由人工填写,温湿度的准确性和数据记录的连续性都无法保证,所以迫切需要研制一套温湿度自动采集监控系统,以满足平时工作的需求。本项目旨在开发一套温湿度自动采集监控系统,对整个实验室的工作环境进行实时监测。
采集通道数:16路;温度测量范围:-40~125℃;相对湿度测量范围:0~99%RH;准确度:温度±0.2℃、相对湿度±3%RH;分辨力:温度0.1℃、相对湿度1%RH。
在Visual C#中UDP协议的实现,最为常用也是最为关键的类就是UdpClient类,UdpClient类位于命名空间System.Net.Sockets中,Visual C#中UDP数据包的发送、接收都是通过UdpClient类实现的。下面对UdpClient类中常用方法和属性进行简要说明。
2.1.1 常用方法说明
Close:关闭UDP连接。
Connect:建立与远程主机的连接。
Receive:返回已由远程主机发送的UDP数据包。Send:将UDP数据包发送到远程主机。
2.1.2 常用属性说明
Active:获取或设置一个值,该值指示是否已建立了与远程主机的连接。
Client:获取或设置基础网络套接字。
2.1.3 C#中UdpClient类发送UDP数据包
“Send”方法的调用语法如下:
Public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);
下面是程序中使用UdpClient发送UDP数据包的代码:
2.1.4 C#中UdpClient类接收UDP数据包
“Receive”方法的调用语法如下:
Public byte[]Receive(ref IPEndPoint remoteEP);
下面是程序中通过侦听端口号“2040”来获取UDP数据包的代码:
该系统软件采用Windows操作系统,以C#语言编制,软件采用模块化的设计,其功能模块如图1所示,软件系统的流程图如图2所示。
图1 系统模块框图
图2 系统流程图
2.2.1 温湿度传感器模块
温湿度传感器模块包括传感器配置模块和通信模块。温湿度传感器配置模块对应程序中的系统设置和条件设置功能,配置传感器的各类参数如温湿度上下限、所在房间名称、IP地址、采样时间、温度波动范围等。温湿度传感器通信模块负责上位机与传感器间进行UDP通信,获取各个传感器的数据。
2.2.2 屏幕显示模块
屏幕显示模块包括小屏幕配置模块和小屏幕通信模块。小屏幕配置模块负责对小屏幕的参数进行配置,包括小屏幕的IP地址和显示颜色,并将设置写入配置文件中。小屏幕通信模块负责程序与小屏幕之间的SOCKET通信,即向小屏幕发送要显示的温湿度数据和自定义显示的字符。
2.2.3 数据处理模块
数据处理模块包括温湿度数据存储模块、温湿度数据实时显示模块和温湿度历史数据查询模块。温湿度数据存储模块负责将从传感器获取的温湿度数据信息写入相对应的数据库文件中。温湿度数据实时显示模块负责将从传感器获取的各个通道的温湿度数据在软件主界面上实时显示。温湿度历史数据查询模块分为按间隔查询、按点查询和自动生成各个房间温湿度记录三个功能:按间隔查询功能负责查询一段时间内某个房间每隔一个固定时间间隔的温湿度历史数据和温湿度曲线图,并可以保存到指定路径的word文件中;按点查询功能负责查询一段时间内某个房间每天某几个固定时间点的温湿度历史数据,并可以保存到指定路径的word文件中;自动生成温湿度记录功能是自动把每个房间整点的温湿度数据写到对应的word中,供用户查看。
通过程序的编译、调试,最后在LED显示屏和上位机显示出实时的温度和湿度,如图3所示。从整个实现过程来看,首先是温湿度模块对环境温湿度采集后,将相应数据传输到上位机;然后通过上位机将温湿度数据传输到每个小屏幕上实时显示。
图3 温湿度显示界面
通过此次温湿度自动采集监控系统的开发,笔者对C#中Socket通信原理有了更深刻的理解,这对后面的项目开发起到很大的帮助。另外,这次系统的开发也验证了理论与实际相结合的重要性,这样才能更好地完成系统设计工作。