近年来,面向对象的程序设计方法(OOP)已成为人们构造程序的事实标准,很多采用OOP方法设计的程序成为程序设计的典范,Windows应用程序就是一例。借鉴Windows应用程序界面设计思想,将面向对象的方法引入控保单元人机界面的设计,使人机交互程序变得清晰简洁,同时大大提高了在不同功用控保单元上的可移植性。
1 变电站自动化系统控保单元人机界面功能分析
1.1 控保单元
1.1.1 控保单元简介
变电站综合自动化系统已经从早期的集中式单CPU发展到今天的分层分布式多CPU系统。目前变电站综合自动化的发展趋势是将功能强大的微机监控系统与全数字化的微机保护测控技术、高速网络通信技术结合起来,取代传统的RTU,实现无人值班。目前国内变电站综合自动化发展的趋势是将传统上集中在一起的监控 、保护功能分散到各个现场中分布实施。具体来说就是在变电站中按照电气间隔划分单元,每一个独立控保装置(如进线、出线、变压器、母联、电容器等)分别安装各自独立的控保单元。这些分散的控保单元再通过通信网络与监控主机连起来,构成一个有机的整体,从而实现集中管理、分散控制。这种体系结构符合变电站自动化系统的发展趋势,设计规范,调整扩建简单,设备布置整齐,运行维护方便。
1.1.2 控保单元人机界面正面示图
图1控保单元操作界面图图1所示的某种典型控保单元操作界面可分为4个区域:区域A为液晶显示区;区域B为键盘输入区;区域C为控制命令输入区;区域D为指示灯及扬声器输出区。注意:为了防止误操作,特意将控制命令键同键盘输入区域B分开,单独列为区域C,并且加密码保护。
1.2 键盘
键盘作为控保单元人机交互系统的主要组成部分,担负着传递用户命令至控保单元的任务。按人机交互系统对其不同的响应过程可将按键分为以下5类:
(1) 数字键+小数点键+回退键
这些键用做单个或连续数字的输入,并由交互系统软件赋予其意义。
(2) 上/下移动选择键
这两个键用做菜单选择、屏幕翻页、选项选定等。
(3) 确认键
此键用做选定操作项,类似于Windows中的[OK]键。
(4) 取消键
用做取消当前操作项或菜单退回到上级目录,类似于Windows中的[CANCEL]键。
(5) 命令键
这些键用做合分闸、远动就地切换、事故复位等重要命令的输入。
1.3 液晶屏幕
液晶屏幕在控保单元人机交互系统中担负着传递控保单元信息至用户的任务。为了使操作简单方便,液晶屏幕信息的显示采用了分层菜单结构,辅以上/下移动选择键、确认键、取消键就可完成整个菜单的完全检索。菜单结构是建立在“页面”的基础上的,所谓“页面”,指的是液晶上显示的一屏,由两部分组成:静态文本和动态数据。静态文本包括说明性的文字及提示信息等,由汉字和字符组成,在人机交互软件中是用字符串来表示的;动态数据指实时刷新的数值或可由用户修改的信息,在人机交互软件中是用数值变量来表示的,液晶页面根据其组成的不同可分为以下几类:
(1)纯文本页面。如目录,这类页面不包括数据,因此显示时只要刷新一次即可。
(2)文本+实时数据页面。如测量电量显示页面,这类页面由于包含实时刷新的数据,显示时,数据显示部分须不断刷新以保持实时有效,但用户不能通过键盘对数据进行修改等操作。
(3)文本+可修改数据页面。如定值修改页面,这类页面包含的可修改数据可由用户通过键盘的数字键进行改动。
(4)帮助信息页面。如错误操作警告等,这类页面通常由纯文本组成,但与以上3类页面都不同的是页面在显示一段时间后会自动切换到引起该帮助信息的页面。
2 以页面为对象的控保单元人机交互设计
2.1 Windows应用程序界面与控保单元界面相似之处
Windows应用程序的设计过程是典型的面向对象的设计方法,同时Windows应用程序“窗口”界面与控保单元人机交互界面有很大相似之处:(1)窗口通过消息响应机制响应键盘或鼠标等输入设备的输入信息,而在控保单元的某个页面也是响应键盘的输入;(2)两者都是在一简单的while()循环中响应外部输入的;(3)都用多层嵌套的switchcase语句来决定某一消息对应进行何种操作[2]。由此,自然想到借鉴Windows应用程序的设计思路设计控保单元人机界面。当然,在单片机上设计菜单不同于Windows环境下软件的开发,因为许多Windows内部的消息响应机制以及由Windows封装的数据结构、对象和标准处理函数,在单片机系统中统统不存在[1]。尽管如此,设计控保单元人机界面时仍然可以借鉴大量的Windows程序开发思路。
2.2 控保单元页面
控保单元的页面与Windows应用程序中的窗口有很多相似之处。首先页面处理的核心也是一个循环机制,它一直运行并响应外部有效按键输入,直到得到切换窗口的键码。这与Windows窗口消息循环机制有很大相似之处;当然,基于单片机的页面按键响应机制不能借用Windows的消息响应机制,而只能每得到一个按键响应就处理一个。一个页面生命周期流程表示如图2:
图2表示的流程实际上也是控保单元人机界面程序的入口程序main()的主体部分,只需在前面加上液晶、通讯模块的初始化及全局变量的初始化就构成了main()程序。流程图中的几个重要模块说明如下:
初始化并显示页面包括以下几个操作:
(1) 调用一清屏函数ClearPage(),清除上次页面的遗留物;
(2) 显示当前页面内容。如前所说,页面由静态文本和动态数据两部分组成,因此这里也分两步显示页面内容:
a.调用DisplayTxt(unsigned char*)函数显示当前页面的静态文本,静态文本在屏幕上是逐行分布的,举例来说,一个256*128点阵的液晶屏幕,显示一个汉字需16*16,英文字符需8*16,因此,整个屏幕可以分成8行,每行可显示16个汉字或32个英文字符。调用8次DisplayTxt函数就可完成页面的静态文本的显示。DisplayTxt函数所带的行参就是指向某一行文本的指针。
b.显示当前页面的动态数据。首先页面应刷新保存在缓冲区内的当前页面的动态数据,此步骤调用Refr eshData(STRUCT*),传递参数是一个指向页面结构的指针。该函数负责从控保单元的数据采集CPU得到实时动态数据,并保存在本地缓冲区以备显示。然后页面调用DisplayData()显示动态数据。
键盘扫描循环是一无条件的while()循环,它通过键盘扫描函数ScanKeyboard()返回键码并进行相应的操作,直到接收到的按键会导致页面切换为止,这时,根据当前页面的一个指针所指的新页面,程序结束当前页面,转而进入新页面的生命周期。循环中,除了包含键扫描函数ScanKeyboard()外,如果该页面有动态数据,还应包含刷新数据的函数RefreshData(STRUCT*),以保持数据的实时性。
处理按键是用一个两层嵌套的switch-case语句来实现的。如前面1.2节所述,将按键分为5类,而每一类按键又根据当前页面不同类型分别进行处理。
默认处理一般可设为不响应。
3 页面操作的具体实现
3.1 按键处理
按键处理函数是整个应用程序的核心,在这里,程序定义某一页面下对何按键作何处理。下面分析一下每种按键的处理。
3.1.1 数字键+小数点键+回退键
这些键只有在有可修改数据的页面下才会响应,因此对它们只有一种处理,即将输入数字键翻译成对应的数值。
3.1.2 上/下移动选择键
不同的页面下,这两个键的响应处理也不同,分为:
(1)切换到新的页面。例如,显示测量电量时,一屏显示不下,需多屏显示时,在显示其中某一屏时按上/下移动选择键,将显示相连的屏幕。 (2) 操作条目的移动。菜单的当前操作条目是用反色显示的方法表示的,上/下移动选择键使反色显示区移动到用户选择的操作条目。
(3)可选项的选择。可选项指的是界面提供给用户通过上/下选择键选定的值,例如界面提供通讯速率的几种选择,上/下选择键使用户在这些可选速率之间切换,直到选中所需通讯速率。
3.1.3 确认键
确认键的响应有以下几种可能:
(1)切换到新的页面。
(2)切换当前条目的状态。在设置参数时,选中条目有修改态和查询态两种状态,用确认键使设置值在反色和正常之间切换,来代表修改态和查询态之间的切换。
(3) 确认当前的输入。
3.1.4 取消键
取消键只有一种响应处理:退出当前页面,进入新的页面显示(通常是返回到当前页面的前一页面)。
3.2 页面结构
上述页面显示流程的分析以及按键处理的分析,给出了一个页面生命周期内的所有活动以及这些活动所需的页面属性。下面我们就根据上述页面显示流程的分析以及按键处理的分析,定义页面结构。由上述的分析,页面活动分显示和响应按键两大部分,因此页面结构也分与之相关的两部分。如下所示:
上面只定义了部分与显示有关的变量,与按键响应有关的变量也只定义了有关取消键的变量。这是因为本文的目的只是给出借鉴Windows程序的页面设计框架思路,具体到页面结构中各变量的具体定义,只需根据前面流程的分析以及按键处理的分析用到了那些页面的属性,加入对应的页面变量即可。而按键处理随实际情况而定,人机界面的设计风格也因人而异,所以具体定义页面结构变量由读者需要而定。
4 完成控保单元整个人机界面设计
上一节完成了以页面为中心的控保单元人机界面主流程,并给出了页面结构的定义。要完成控保单元整个人机界面设计,还缺少基本的显示、键扫描、通讯接口函数。不同于Windows应用程序可以利用大量现成的Windows API函数,在控保单元人机界面的设计中,这些底层接口函数都需自己设计。另外在接口函数基础上的一些页面方法(函数)也需自己设计。由于接口函数随硬件而异,页面方法随用户需要而定,下面只按功能列出它们:
(1) 有关按键处理的功能模块。应包括按键扫描模块、输入转换模块(将输入一串数字键翻译成一个浮点数)。
(2) 有关显示功能模块。应包括文本显示模块、数值显示模块等。
(3) 通讯模块。应包括通讯接口模块、转换模块(将数据打包传送给通讯接口及将接受到的数据包还原)。
5 结束语
上文将面向对象的方法应用于控保单元人际界面设计的全过程,尤其借鉴了Windows应用程序的设计思路,虽然基于单片机的人际界面程序不可能实现Windows应用程序的核心——消息响应机制,但是仍然大大提高了界面友好性及程序的可移植性,显示了面向对象方法设计的优越性。
参考文献
[1]朱泳康.MPS4000系统中控保单元软件的设计、开发和实现.清华大学硕士论文.2000,6.
[2]Peter Norton,Rob McGregor.孙凤英,魏军,徐京等译.MFC开发Windows 95/NT4应用程序.北京:清华大学出版社,1998,4.
[3]朱艺颖,沐连顺,孙培略.运用面向对象的方法设计人机系统.电网技术,1998,(9).