THC-Ⅱ型温湿度测控仪是一个面向不同类型用户,可单独使用也可可多台组成网络,具有测量、记录、控制功能的温、湿度测控设备。它以单片微机为核心,通过对温湿度传感器信号的计算处理,来实时测量、显示、记录、控制温湿度的。可广泛用于办公室、档案馆、图书馆、机房、仓库等需要温湿度测控的场所。本产品通过了山东省科委的技术鉴定,获得了国家档案局科技进步三等奖,并被国家档案局选为全国推荐使用产品。产品型号分为两种:自带打印机型和不带打印机型。
为了提高自动化程度,实现机算机统一信息化管理,使管理人员足不出户就能灵活控制远程设备,要求设计软件实现以下目标:
Ø 实现远程实时监测温湿数据,并支持多台设备联网。
Ø 每日四次自动测量、记录、存贮温湿度数据。
Ø 计算机可查询温湿度数据,对每月及每年的数据汇总、分析、打印。
Ø 可设置参数阈值自动控制除湿机、空调或者加湿机等设备。
Ø 设备超出规定温湿度范围时,自动发出警告。
本系统作为计算机监控系统,主要分为两部分:一部分为下位机与计算机之间的通信问题;一部分为计算机在接收到下位机的数据的处理问题;现划分如下几个模块:
a) 上位机与下位机通信的模块;
b) 上位机数据显示模块
c) 报表打印模块
d) 自动监控并发出警告模块;
由于通信问题设及到多线程及其同步问题,串口通信问题,并结合人员技能资源状况,选用Microsoft Visual C++ 6.0作为开发工具.
1. 上位机与下位机通信模块
上位机与下位机采用RS485接口,上位机(计算机)与下位单片机采用串口通信。RS-485最多可以支持32个节点,多个结点构成的网络拓扑结构一般采用终端匹配的总线结构,不支持环形或星形网络。由于下位机和上位机通信时都要有一个协议,所以我们把对协议的解析处理与串口通信放在一个模块中,以供其他模块调用.
关于串口通信实现方式选择的取舍:
以VC++为例比较如下:
由于需求中要求上位机能够实时对多台设备进行状态监测,同时还要处理用户操作,并提供数据下载,任务比较复杂,要求较高,我们选择以多线程方式实现串口通信.
在VC中我们采用进程内组件的方式来实现.将所有与通信相关的API和与协议解析有关的API集成到一个进程内组件(VCCode.dll)中.
2. 上位机数据显示模块(用户界面设计)
整个用户界面采用MDI形式来设计如下:
用户可以查看联网内的任一台设备的状态,并可以对其进行参数设定.下图是设置界面:
由于设备内有存储器,可以存储一定量的数据,所以可以通过软件下载到数据库中:
主要功能及界面的实现方法:
实时显示数据模块采用一个后台线程从下位机提取数据.具体方式如下:
显示界面 |
后台读线程(ReadDataThread) |
进程内组件VCCode.dll |
数码管显示界面实现:通过扩展CStatic静态控件来实现,不依赖于外部控件;
各种所有风扇状态及人物报警变化分别通过后台线程:FanStateThread、ManSateThread来统一管理业实现。
线程同步采用基于信号量的方式来实现。
以上具体实现代码放在在详细设计中说明。
3. 报表打印模块
对任何一个工程软件来说,打印是不可缺少的一个功能。本系统提供了对下载的温湿数据进行汇总,分析所用的各种报表格式。大体分为四个主要报表:月温湿度曲线表、月温湿度数据表、年温湿度数据分析表一、年温湿度数据分析表二。
图3-1
图3-1为月温湿度曲线表,月中每一天的温湿度分布图,形成曲线图.
图3-2
图3-2为月温湿度数据表界面;某月中每一天中四个时段:0~5、6~11、12~-17、18~23时四个时段的温湿度平均值。形成如图所示的表格打印出来。
图3-3
图3-3为年度温湿度分析表一。显示每个月中温湿度在各个时段的天数。
图3-4
图3-4为年度温湿度数据分析表二,此表显示每月上中下旬的最高、最低及总平均温湿度。
以上报表由后台数据据库支持自动生成,支持坚打和横打,并且没有打印机的限制,属通用型。数据库采用Microsoft Accesss,考虑到用户是单机环境,并且由数据量和易用性讲,Access数据库已经可以满足一般办公室管理的需求。
其底层技术采用VC++中的DAO方法来实现。并达到了很好的效果。
4. 自动监控并发出警告模块
自动监控的任务由一个后台限程来实现。该线程在规定的时间段内,采样一次数据并进行分析,如果超出要求的范围,就提示用户,提示消息以MSN或者QQ的消息方式友好界面来实现。关于制作方法在本人写的一篇《制作MSN、QQ的消息提示窗口》一文中有详细说明(此文章以被VC知识库收集)。
完成以上四个主要功能模块后,整个应用程序的大体框架就出来了。但是要想实现其全部功能并且形成一个可以运行的商业程序,还有许多工作要做。
在详细设计中,我们将会探讨以下几个问题:
1.串口通信组件的制作。由于Windows2000与win98系统有非常重要的区别,串口通信的实现上也有一些差别,因些就注意这个细微之处。
2.在系统实现上,多次提到多线程,线程可以为应用程序提供非常娄活的处理机制,但是,它同时也会带来其他一些问题,如线程同步、互斥访问唯一个实例(如串口的句柄)等问题。
3.报表打印中设及到DC环境的一些问题,在VC++如何使用MFC集成的打印功能。
4.用户界面的实现,对些引入一些库如BCGPro6.21实现更好的UI元素。
当然其他还有一些算法不能一一列举。