李由,付卫强,包涵,孟志军
(1.国家农业信息化工程技术研究中心,北京 100097;2.北京农业智能装备技术研究中心;3.国家农业智能装备工程技术研究中心;4.农业部农业信息技术重点实验室)
随着农业现代化步伐的加快,农业生产现场使用到越来越多的电子设备,这些设备的显示方式大致分为声光信号,点阵式黑白屏幕,高分辨率彩色屏幕。其中以LCD 为主的点阵式单色屏,因具有显示清晰,成本低廉,接口简单,强光下可读等优点,在一些以监测控制为主的车载设备上得到广泛的应用。
然而在编写其界面显示时,由于程序可移植性差,导致在不同设备中需要完全重写界面。在界面修改时牵一发而动全身,不仅拖延了设备开发周期,而且还降低了设备可靠性。彭良清等提出了基于树形菜单结构的通用界面的一些模型和方法[1-3],这些方法将菜单数据和显示函数分离开来,解决了程序可移植性差的问题,但是存在界面修改困难、函数复用性差等问题,并且受嵌入式设备屏幕大小的限制,一些功能缺少实际用途。宋晓辉等对树形菜单结构做了一些改进[4],将功能型菜单项和数据型菜单项分开,一定程度上解决了函数冗余的问题;但仍采用适应于桌面操作系统的菜单操作方式导致其数据结构复杂,并不能很好应用于小屏幕的嵌入式系统。
因此,提出了一种新型的界面显示框架,实现多种农业装备常见的界面应用类型,解决了小屏幕嵌入式系统显示界面移植性差问题。
农业现场的电子设备通常以监测控制为主,监测和控制设备一般是在农机运行前进行参数设置,在运行过程中进行数据显示,在很多情况下监测和控制是合二为一的,因此要求界面是非阻塞式的,能在各种状态下方便的相互切换,并可以通过菜单项选择实现一定的功能(如:启动,停止)。农业上常用的计量单位标准尚不统一,通常还需实现计量单位切换功能。
工业控制常用的界面分为5 种类型:菜单屏、变量屏、选择屏、设定屏和显示屏[5]。与之类似将界面类型分为:菜单选择屏、静态文本屏、动态文本屏和参数设定屏。各个类型界面的功能见表1。
基于以上界面类型,参照一般人机交互的按键系统考虑到通用性及便捷性,系统设计时采用7 键制,分别为:上、下、左、右、确定、设置、返回。
表1 界面功能分类表Table 1 The classification of interface features
以下介绍各界面的元素类型和操作分析:
菜单选择界面主要用于自顶向下的树状界面操作,为界面设计中常用的类型,用户通过此类界面进行界面跳转,功能设定。静态标签一般为提示性文字,静态选项为带被选择功能文字。
菜单选择界面的一般操作为:上下键变更选项,左右键翻页,确定键进入下一界面,或实现某一功能,返回键返回上一界面,设置键的功能一般不使用。
静态文本界面主要用于显示固定的内容,一般用于信息提示,帮助文档,版权信息的显示,即它只包含静态标签。
因为静态文本界面本身操作较少,所以其按键响应也相对简单,只包含滚屏和返回,操作方法与菜单选择界面类似。
动态文本界面主要用于变量数据,运行状态的实时显示,用户主要通过这类界面实现对系统实时状态的了解,其界面由静态标签和动态标签组成,而动态标签又由固定文字,变量文字组成。
像静态文本界面一样动态文本界面本身并不需要太多操作,所以其按键响应也相对简单与静态文本界面相同。
参数设定界面也是用户界面中常用的界面,主要用于用户对系统中的变量进行设置。它包含了几乎所有的界面常用功能,其组成如图1 所示。这里的动态选项指的是既可以被选中,又会因变量和单位的改变而变化显示内容的选项。
图1 参数设定界面组成Fig.1 The interface elements of parameter setting
参数设定界面的操作相对复杂,因其有两种状态,即选项切换和变量修改,其操作逻辑如图2所示。
图2 参数设定界面操作Fig.2 The operating procedures of parameter setting interface
以上分析了界面的组成和操作。在操作上采用了和目前大多数手持设备相仿的操作模式,并且在各种类型界面间保持了操作风格的统一。
目前常见的界面框架数据结构都以菜单为单位,缺少对菜单项的精细化分,这使得界面显示和操作函数对各种类型的菜单很难做到通用,而基于菜单项的菜单组织结构可以很好解决这个问题。将以上分析抽象为实际的数据结构,则形成菜单和项两种数据结构,其中项是菜单的子结构,为了适应较小的屏幕,并简化显示和操作函数,一项即实际屏幕显示中的一行。
项中含有文本内容,即格式化字符串,用于格式化输出的字符串;含有数据变量地址和单位变量地址,用于填入格式化字符串中的变量内容;含有项状态标志,用于区别项的类型,以便在显示和操作时加以区分;含有跳转菜单指针,用于表明该项所应该跳转的菜单。特别指出将数据变量类型定义为无类型指针,从而使得同一种数据结构可以实现多种数据变量类型的表示。具体数据结构如下:
一个常见的项数据如下:
其中第一个元素表示了要显示的数据和变量元素的显示格式;第二、三个元素分别是数据变量地址和单位字符串首地址,在设置模式时可以利用这些指针修改变量原始值,实现数据设置和单位更改;第四个元素是项状态标志,表示该项是可选中项,用于区分标题和选项;最后一个元素表示选择此项后跳转的目标菜单。通常定义项数据时是定义一个项数组用来组成一个菜单,以减少存储空间,并实现随机存储。
菜单是用于表达一个界面内容和状态的数据结构。它应该含有项数组首地址,用于表示界面显示的内容;含有界面状态标志位,用于表明界面的状态和界面的功能;含有被选项,用于表明当前界面的被选项;含有页顶项,用于控制界面视图位置;含有最大项数,用于防止项数组越界;含有按键响应函数,用于相应按键操作。其中按键响应函数采用带参函数指针形式,利用界面的状态和按键共同决定需要执行的操作,既实现了统一接口,又增强了可扩展性。菜单间的关系只由项与菜单的指针决定,而与项的顺序无关。具体代码如下:
一个常见的菜单数据如下:
其中第一个元素表示了该菜单对应的项数据数组;第二个元素是菜单状态标志,表示该菜单是参数设置类型,该元素也可以在运行过程中被改为正在设置状态;第三、四个元素默认填充0,在程序实际运行中可更改,以变更选项或视图;第五个元素是菜单最大项,与项数据数组长度相当;第六个元素是操作响应函数,对应的函数为参数设定界面的操作函数。
将以上数据结构作为基础,菜单的操作实现也呼之欲出。界面显示函数,每次从PageTopSelect 对应项开始显示,显示接下来的若干项到屏幕(受屏幕显示最大行影响),显示项数据时,先分析项字符串中的变量类型和显示宽度,再将项数据中对应的变量插入到显示字符串中。同时可以利用MenuSelect 变量值反显选中行。如此可以显示超过屏幕长度本身的菜单,每次只显示对应屏幕大小的一部分内容,相当于扩展了屏幕。具体流程图如图3 所示。
图3 显示函数流程图Fig.3 The flowchart of display function
实现树状菜单结构使用堆栈,即主界面为栈底,每次执行菜单跳转时执行压栈操作,菜单返回时执行出栈操作,并且堆栈操作都使用指针方式实现,这样既可以较少的代价实现多级菜单跳转,又将菜单的操作和菜单数据本身分离,使得在修改菜单数据时避免了对其他菜单关系的影响。
每个菜单可以使用不同的按键响应函数,相同类型菜单之间还可以共用响应函数,兼顾了灵活性与复用性。
将菜单显示和操作分开,用户可以将显示刷新放在定时中断中,将操作放在外部中断中,增强了编程的灵活性。
一个典型的界面操作流程如图4 所示。
图4 界面操作Fig.4 The interface operation
菜单操作对应的软件实现方式见表2。
表2 菜单操作实现对照表Table 2 The implementation of menu operation function
对于已经编写好的菜单对其修改非常简单,以下介绍几种常见的菜单修改方式:
(1)要增加(删除)菜单中某项,直接增加(删除)该项数据,并修改相关菜单数据的最大项参数即可。
(2)要修改项数据显示格式,直接修改项数据中的格式化字符串即可。
(3)要调节菜单项顺序,直接调整项数组的顺序而不用修改其他数据内容。
(4)要修改某项跳转的菜单,直接替换掉该项数据后的跳转菜单指针。
(5)要修改某项显示的变量,直接修改该项数据中的变量指针指向即可。
(6)要将菜单中的某项移至同类型其他菜单,直接将相关项数据移至目标菜单项数组,并修改两个菜单数据的最大项参数即可。
(7)要增加(删除)某菜单只需将与其相关的项数据同时增加(删除),并修改相关菜单数据的最大项参数即可。
这些修改完全不涉及整个菜单的结构调整,项与项,菜单与菜单之间没有直接关系,在修改时也不会相互影响。
文章提出的界面框架适用于农业装备显示,解决了小屏幕嵌入式系统显示界面移植性差问题。采用线性存储结构减少了数据冗余,提高了访问速度。简化优化了菜单关系,使得操作函数可以统一,菜单建立和改写方便。利用抽象方法使得一种菜单数据结构实现多种界面类型以满足农业设备的一般交互需求。
[1]彭良清.基于节点编号的通用树状菜单设计方法与实现[J].单片机与嵌入式系统应用,2002(9):36-40.
[2]黄声野,陈秀华,王东生.一种用C51实现的单片机系统菜单管理方案[J].计算机工程,2004,30(3):191-192.
[3]陆铮,罗嘉.单片机C语言下LCD多级菜单的一种实现方法[J].工矿自动化,2006(1):50-51.
[4]宋晓辉,叶桦,丁昊.基于单片机的多级菜单实现方法改进[J].东南大学学报:自然科学版,2007,37(S1):66-70.
[5]陈冬,徐文立,夏遂华.液晶显示多层菜单结构的软件设计[J].电气传动,2001,31(4):56-59.
[6]周雪珍,朱志明,符策健,等.多功能数字化弧焊逆变电源人机交互系统[J].电焊机,2007,37(1):6-10.
[7]纳新,赵东风.非阻塞模式LCD多级菜单的设计及其数据结构[J].云南民族大学学报:自然科学版,2007,16(4):347-349.
[8]古容江,张珣.基于ARM的图形用户界面软件开发平台的搭建[J].液晶与显示,2009(6):901-906.
[9]贾志成,程敏,宋涛,等.基于状态机的LCD多级菜单设计[J].单片机与嵌入式系统应用,2012,12(2):73-75.
[10]陈慧,王宏远.一种基于AVR单片机的树状菜单界面的设计[J].电子工程师,2005,31(6):68-70.
[11]许秀英,韩静,石建飞,等.水稻田间环境参数无线智能监测系统[J].黑龙江八一农垦大学学报,2013,25(5):70-73.
[12]李敏通,张战国.一种建立单片机应用系统菜单的新方法[J].计算机工程,2006,32(16):259-260.