为了能实时、高效、方便地监控、管理机房计算机电源设备,并实现对机房的计算机集中监控、少人值守的目标,本文提出了一个机房计算机电源集中监控系统方案。本系统的目标是:通过相关软件、硬件的设计,实现由1台主机(上位机)通过单片机(下位机)监控多个机房中多台计算机的开关情况。即利用主机的监控软件与单片机进行通信,以实现对计算机电源的监控功能。本系统应具备如下功能:
(1)通过键盘或鼠标对多台计算机进行开关控制并对整个机房的所有计算机进行开关状态的检测。
(2)上位机与下位机能进行可靠、实时的通信。
(3)界面设计清晰,功能齐全。备有菜单及各机房的电脑分布图,并带有右键快速菜单。
(4)能根据不同机房中不同电脑台数自动调整布局。
1 软硬件的选取及上下位机间通信协议的定义
基于上述目标与功能,要实现本系统,首先要解决以下几个问题:
1.1 主机与单片机之间通信信道的选取
串行通信一次只传1个位,处理的数据电压只有一个准位,因此不容易漏失数据。如果再加上一些防范措施,数据漏失就更不容易发生了。串行通信端口(RS-232)是每部计算机上的必要配备,通常含有COM1与COM2 2个信道,一般的计算机将COM1以9 Pin的接头接出,而以25 Pin的接头将COM2接出。新一代的计算机均以9 Pin的接头接出所有的RS-232通信端口。通常与计算机连接的沟通接口是RS-232,它不仅实用简单,而且价格便宜。因此本系统采用RS-232串行通信方式用于上、下位机间的通信。
1.2 监控软件开发平台的选取
Visual Basic是Windows环境下的一个可视化软件开发平台。由于开放式的结构,Visual Basic允许外挂控件,因此有更多的厂商为Visual Basic撰写控件,供系统开发者选用,从而为开发者提供了更方便的系统开发方案。这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效地提高了应用程序的运行效率和可靠性。所以,本系统采用Visual Basic作为监控软件平台。
MSComm是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件。MSComm控件提供了二种处理通信的方法:事件驱动法及查询法。
(1)事件驱动法:OnComm事件是MSComm控件提供的惟一的事件。当有数据到达端口或端口状态发生改变或有通信错误产生时,都将触发OnComm事件,以捕获和处理这些通信事件和通信中产生的错误信息。通过查询CommEvent属性值,可以获得关于通信事件和通信错误的完整信息,进而进行处理。这是一种功能很强的处理串行口活动的方法,具有程序响应及时、可靠性高等优点。
(2)查询法:MSComm控件的CommEvent属性返回通信中产生的事件和错误类型,由通信控件自动检测和跟踪通信状态后设置。因此,在小程序中,程序员可以在每个重要的程序功能之后通过检查CommEvent属性值来检测事件和通信错误。本系统采用查询法作为处理通信的方法。
1.3 单片机型号以及芯片的选取
单片机主要采用Intel公司MCS-51系列8031单片机,并使用MCS-51汇编语言开发。
1.4 监控软件与单片机之间通信协议的定义
主机与单片机要进行实时、可靠的通信,必须定义一套良好的通信协议。
本系统的通信参数设置如表1所示,采用的通信协议如表2所示。
其中:Roomadd:机房代码(即单片机的地址码),1个字节,由01H开始编码。
Command:命令码,1个字节(命令码的格式见表3)。
Byte count:数据长度,要监控的计算机总数量+1(最后1帧1为校验帧),1个字节。
PCadd:PC编号,每个PC编号1个字节,由01H开始编码。
Checksum:算术校验和,1个字节,是所有PC编号的算术相加后对256取模而得到的。
Cmdresponse:单片机回应的采集数据,具体格式见表4。
其中:D7为1,表示该PC状态为“开”;D7为0,表示该PC状态为“关”。PC地址由01H开始编码。约定00H为接收成功反馈信号。
2 系统总体设计模块
根据本系统要实现的功能,可以将系统划分为如图1所示的3个模块。
2.1 监控部分
监控部分可以分为监测和控制2个模块。监测模块的主要功能是对整个机房的所有计算机或某几台计算机进行开关状态的检测。主机通过串口向单片机发送监测信号,然后根据单片机的反馈信号(即模拟的计算机开关状态数据)在界面上显示出模拟状态。若没有收到单片机的反馈信号,则提示操作失败。控制模块的主要功能是对机房的所有计算机或某几台计算机进行开/关控制。主机通过串口给单片机发开/关信号。若主机收到单片机反馈的操作成功信号,则表示操作成功,在界面上显示对应计算机的开/关状态。若没有接收到单片机的操作成功反馈信号,则提示操作失败。
2.2 系统设置部分
该模块对本系统进行一些设定。如机房配置:包括机房代码、机房名称、机房计算机数量的设定,定时监测时间的设定,生成报告的设定等。这些设定使系统能适应不同需要,更灵活地在不同场合运作。
2.3 历史记录查询管理部分
该模块的主要功能是记录每间机房中所有计算机的开机、关机时间,并提供查询功能,使管理人员知道某台计算机开关时间及在某一时刻某台计算机开关状态。
3 主界面设计
用户界面应具备如下的特性:
(1)使用简单:界面简洁明了、操作方便。
(2)具有容错能力:具有错误诊断、修正错误以及出错保护的功能;
(3)系统能够按照用户的希望和需要,提供不同详细程度的系统响应信息,包括反馈信息、提示信息、帮助信息、出错信息等;
(4)在完成特定功能的前提下,使用户界面越简单越好。用户界面应能保证用户正确、可靠地使用系统,保证有关程序和数据的安全性。
为方便管理人员监控,在用户界面设计中采用图形化人机界面,力求简单灵活。在系统主屏幕中,以1个图标表示机房的1台电脑,并用不同颜色的图标来表示电脑开关的不同状态。
4 初始化设计
在进行功能设计之前,首先要对系统进行初始化设计,主要初始化流程如图2所示。
4.1 通信控件MSComm的设置
本系统对控件的具体设置如下:
MSComm1.CommPort=1//使用COM1作为通信端口
MSComm1.PortOpen=True//打开通信端口
MSComm1.InputMode=comInputModeBinary
//以二进制方式读取数据
MSComm1.InputLen=0//每次读取接收
//缓冲区的全部内容
MSComm1.RThreshold=0//使用查询方式,关中断
MSComm1.Settings=″9600,n,8,1″//通信参数设置,波
//特率9600,不作奇偶校验,8位数据位,1位停止位
由于每次发送和接收的数据长度都不相同,所以很难确定RThreshold的属性值,以产生中断;另外,由于系统采用面向对象编程,每次是以某个事件触发发送和接收数据的,因此系统采用查询InBufferCount的值来决定是否接收数据,而不采用中断的方式。
此外,对于微机与单片机组成的数据采集处理系统,由于数据的传输多采用十六进制方式,所以将MSComm设置为以二进制方式读取数据。
4.2 根据机房配置数据表对系统进行初始化
因为本系统是采用动态方式显示数据的,机房的配置(机房代码、机房名、计算机数量)是存储在数据库(“机房监控.mdb”)中的机房配置数据表中,所以在装载系统时要取出数据表中的数据来初始化系统。
本系统定义了一个二维全局数组Public pcroom(1 To 100,1 To 2)As Variant来存储机房配置数据表中的机房数据。第一维表示机房代码,设定为最多可以有100间机房,并可以根据需要更改数组的下标来增加或减少机房的数量。Pcroom(i,1)表示机房名,Pcroom(i,2)表示该机房的计算机数量,i表示机房代码(1≤i≤100)。
4.3 界面中与机房有关的控件的初始化
在本系统中,与机房名有关的控件有4个,其中2个是ComboBox(Combo1,用来显示当前机房列表),一个在主界面(Form1),一个在历史记录查询窗口(frmhistory);另外2个是ListBox,它们在定时监测机房设定窗口(fixchkset),名称为lstall和lstsel。
5 功能设计
5.1 监测模块
监测模块的主要功能是发监测信号给单片机,要求读取特定计算机的电源开关状态。监测部分根据操作方式可分为定时操作与非定时操作(人工操作);根据所监测的计算机数量分类,可以分为监测全部和部分监测(要监测的计算机数量大于等于1,小于机房的计算机总数)。
定时监测功能是为了使机房管理人员能够及时了解特定计算机的开关状态而设置的。它允许使用者通过设定时间间隔及选取要操作的计算机,实现每隔一段时间驱动一次监测事件,从而返回特定计算机在当前时刻的开关状态。此项功能不但免去了人工操作的麻烦,而且提高了系统的实时性。使用者不必长时间在电脑面前观察每台计算机的状态。只要设置了定时监测功能,系统就会每隔一段时间自动进行监测,管理人员只要查看历史记录就可以知道这些计算机的使用情况。定时监测实际上利用一个定时器控件,当到达定时器的时间间隔时,就触发一次监测事件。
5.2 控制模块
控制部分要实现的功能是发开/关信号给下位机,要求将特定计算机的状态设为开/关。若接收到下位机的正确反馈信号,则在界面上将相应计算机的图标置为开/关;若接收出错,则给出出错提示。根据要控制的计算机数量,可以分为部分控制(开/关)和全部控制(全部开/全部关)二类,前者控制一台或多台计算机,后者控制当前机房的所有计算机。
5.3 设置部分
5.3.1 修改密码
本系统在启动时要求管理员输入正确的密码才能登录系统。在登录之后可以重新修改密码。
5.3.2 生成报告设定
本系统提供了将机房计算机当前时刻的状态、相关数据生成报告的功能。报告的格式为以机房名命名的文本文件。使用者可以根据需要选择不同的报告生成方式。
5.3.3 定时监测机房设定
除了提供定时监测功能外,本系统还提供了定时监测机房功能,以方便管理者定时自动监测多间机房的计算机。
5.3.4 生成报告设定
本系统提供了将机房计算机当前时刻的状态及相关数据生成报告的功能。报告的格式为以机房名命名的文本文件,使用者可以根据需要选择不同的报告生成方式。
5.3.5 定时监测机房设定
除了提供定时监测功能外,本系统还提供了定时监测机房功能,以便管理者能定时自动监测多间机房的计算机。
5.3.6 机房配置
本系统可以根据不同的机房配置来动态改变界面的相关显示。本系统提供了机房配置功能以方便管理者在系统运行时更改机房的配置。
5.4 历史记录查询管理
本系统能够对所有计算机的开关机时间做系统记录。每台计算机只要经过了开机→关机这个过程,就将它的数据存放到数据库中。这些记录有助于管理人员管理机房,了解计算机的使用情况。
6 系统的安全性、可靠性和实时性
6.1 系统的安全性
本系统运行时有二种登录方式,一种是一般用户,以用户名guest登录;另一种是管理员,以用户名administrator登录。第一种登录方式不需要登录密码,但它的功能有限,只能进行监测和监测机房操作,不能做其他操作,也不能对系统进行设定或者查询历史记录;第二种登录方式的登录者为管理员,需要输入正确的密码才能登录,登录成功后可以使用系统的全部功能,包括监控、设定和查询功能。
当使用者试图以其他用户名登录的时候,系统会弹出提示框,提示用户要以guest或administrator用户名登录。当使用者以用户名administrator登录,但输入了错误的密码时,系统会提示输入密码错误,让用户重新输入。如果连续3次输入错误,则强行退出系统。登录密码存放在当前路径的psw.txt文件中,并进行了简单的加密,其他人可以打开该文本文件,但是看到的是加密后的字符,不是原文,所以具有一定的安全性。
6.2 系统的可靠性
6.2.1 通信可靠性
本系统对各机房进行了编码(机房代码),并将它作为下位机的地址码,编号从01H开始。上位机与某下位机通信时,先发送地址码,待握手成功后再发送监控命令码。若在限定时间内收不到单片机的正确响应信号或收到的信号不是00H,则转出错处理。
第一次握手成功后,上位机继续发监控命令码和数据长度(要监控的计算机数量+1,1为校验和帧)给下位机。发送完毕后,就等待单片机回送正确响应信号00H,若在限定时间内收到正确反馈信号,则第二次握手成功。否则,转出错处理。
第二次握手成功后,上位机开始发送要监控的PC地址,并累加求校验和。发送完毕后,再发一帧校验和帧。然后等待单片机回送正确反馈信号00H(第三次握手)。若超时或信号错误,则转出错。
第三次握手成功后,上位机接收单片机传来的一帧数据,这帧数据的值表示下位机即将要向上位机发送的数据长度。上位机接收单片机回送的数据并累加校验和,若接收正确,则向单片机发送00H信号,表示此次操作成功。
上述三次握手,为上位机与下位机的通信提供了较高的可靠性。
6.2.2 系统可靠性
本系统提供了较完善的出错处理机制及丰富的提示信息,从而提高了系统操作的可靠性。如:输入出错提示,包括文本框输入非法字符,输入错误密码等等。
6.3 系统的实时性
在上位机与下位机通信时,系统根据要接收的数据长度定义了不同的超时时限,以保证系统的实时性。
7 总 结
在本系统中,单片机负责采集电源的模拟开关量,主机通过该系统的监控软件,可以得到单片机采集到的监测信号,在界面上显示出来。同时,该监控软件能对多台电脑进行开关控制,将这些控制信号发送到单片机。当单片机接收到这些控制信号之后,能驱动相应的模拟器件,将这些信号在硬件上反映出来并反馈信号给主机,从而在软件界面上显示出模拟状态。本系统界面菜单结构清晰,布局合理,功能齐全,响应实时;电路部分设计合理,芯片选择恰当,调试方便;主机与单片机通信可靠,数据的实时采集和传输次序正确。