首页> 中国专利> 一种可灵活定义布局与内容的SCADA上位机人机界面

一种可灵活定义布局与内容的SCADA上位机人机界面

摘要

本发明公开了一种可灵活定义布局与内容的SCADA上位机人机界面,利用GUI开发框架中的内容管理概念,定义了包含内容的内容显示器类与包含内容容器的显示区类,以及一个依据用户请求动态切换显示区中内容显示器的内容管理器类,使人机界面中的窗口可以显示任意类型的内容,利用了GUI开发框架提供的布局管理功能,设计了一种方式,让用户能够动态地将显示区域划分为任意多个窗口,或对多个窗口进行合并,且能够根据窗口中的内容自由调整尺寸。本发明扩展灵活操作方便。

著录项

  • 公开/公告号CN104915198A

    专利类型发明专利

  • 公开/公告日2015-09-16

    原文格式PDF

  • 申请/专利号CN201510272676.0

  • 发明设计人 周金国;金舒;

    申请日2015-05-25

  • 分类号

  • 代理机构南京纵横知识产权代理有限公司;

  • 代理人董建林

  • 地址 210032 江苏省南京市浦口高新技术开发区星火路8号

  • 入库时间 2023-12-18 10:50:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-21

    授权

    授权

  • 2017-03-29

    著录事项变更 IPC(主分类):G06F9/44 变更前: 变更后: 申请日:20150525

    著录事项变更

  • 2015-10-14

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20150525

    实质审查的生效

  • 2015-09-16

    公开

    公开

说明书

技术领域

本发明涉及一种可灵活定义布局与内容的SCADA上位机人机界面,属于配网自动化应用系统技术领域。

背景技术

数据监控与采集系统(SCADA)上位机人机界面(HMI)系统作为系统与用户之间交互的媒介,将一切用户需要的信息与操作图形化为用户易于理解的形式。这些信息通常包括:

1、采集到的现场数据。通过画面组态,将现场数据采用文字、图形、图像、动画、声音等方式表现出来;

2、实时报警。用户通过对那些重点关注的现场数据预先定义报警规则,HMI系统根据接收到的实时数据生成报警信息,通过声音、颜色、文字、自动打印等行为主动推送给用户;

3、SCADA系统运行状态信息。HMI须要将系统时间、当前登录的用户信息、连接状态等信息显示在界面上;

4、报表与趋势。除了通过实时画面与报警了解现场设备工况之外,用户还需要通过报表、趋势等形式来表现数据信息。

为了在有限的显示区域显示出如此内容纷杂又形式多样的信息,SCADA HMI系统在界面布局上的通常做法是使用排列紧密的多窗口,将显示区域分隔为多个功能区,每个功能区(窗口)显示一类信息。比如实时画面窗口、实时报警窗口、系统状态栏等。在面对单个专业的SCADA系统中,通过定制,上述布局方式可以满足用户大部分监视与控制需求,偶有额外的界面需求,可以使用挂接第三方程序的方式来满足。

随着SCADA系统集成度越来越高,甚至有在SCADA HMI中完成部分OA、MIS等类似系统功能的需求,传统SCADA HMI(SCADS人机基面)提供的布局方式就有些捉襟见肘了,表现在:

1、窗口布局相对固定。SCADA HMI多窗口的窗口类型、排列方式、位置、窗口尺寸一般是相对固定的,不能够根据用户需求灵活的释放出不需要的显示空间或调整窗口大小适应显示内容。

2、窗口显示内容单一。组成HMI的窗口均只能显示定制内容,其中的画面显示窗口作为用户监视与控制操作的主窗口,仅能显示通过画面组态工具生成的特定格式的画面文件,而画面组态工具通常是围绕SCADA功能进行设计的,提供诸如绘制图元,定义动画等功能,当面对其它类型的应用的界面需求时,便不能制做出符合预期的画面。虽然一些SCADA HMI产品采用嵌入图形化插件的方式,能够实现一些复杂图表的显示,但是面对用户日益多样化的界面需求,这种方式提供的扩展能力还是远远不够。

3、外接第三方程序的界面扩展方式不能适应日益提高的系统集成度。一种常用的解决SCADA系统扩展性的方法是外接第三方程序,扩展功能的HMI由第三方程序实现,仅在HMI中提供第三方程序的访问入口。这种方式可以解决SCADA HMI的扩展性问题,但是,由第三方程序实现的HMI是存在于SCADA HMI之外的,这种实现方式不但打破了整个SCADA系统HMI的视觉与操作上的整体感,而且单独打开的功能窗口会遮盖全部或部分原先SCADA HMI的显示区域,妨碍用户正常的监视工作。

4、传统方式设计的HMI,每开发一套新的应用系统就需要重新开发一套HMI,大大增加了一套新应用系统的开发工作量,也提高了系统后期的维护成本。

发明内容

本发明通过使用现代图形界面(GUI)开发框架中的内容管理与布局管理这两项通用的概念,提出一种不依赖具体编程语言与GUI开发框架的,可灵活定义布局的SCADA上位机人机界面。

为达到上述目的,本发明采用的技术方案如下:

一种可灵活定义布局与内容的SCADA上位机人机界面,所述人机界面的窗口设置内容显示器类和显示区类;所述内容显示器类与显示区类之间通过内容管理器类实现动态切换;

所述内容显示器类继承自GUI开发框架中图形开发工具包中的容器类,是所有内容容器类的基类;所述内容显示器类中定义了与显示区类和内容管理器类交互的通用接口;所述内容显示器中包含内容;

所述显示区类继承自GUI开发框架中图形开发工具包中的窗口类,表示人机界面中的一块独立的显示区域,提供布局管理与基本的内容导航功能;

所述内容管理器类记录人机界面中创建的显示区实例,依据显示区实例的请求,生成相应的内容显示器实例,添加到显示区中;所述内容管理器类在人机界面初始化时,实例化为一个Singleton,并提供一个全局唯一的引用来引用这个实例;

所述人机界面还定义有:

contents,用于存储系统中实现的内容的引用,所述内容指的是放置于内容容器中的,用户定义的内容;

displays,用于存储人机界面中打开的显示区实例;

register()接口,显示区实例调用该接口向内容管理器报到,内容管理器存储该显示区实例的引用,为其生成一个唯一的索引号,并返回这个索引号至该接口;

unregister()接口,显示区实例在销毁前,调用该接口,内容管理器根据该接口提供的索引号找到该实例的引用,销毁其中的内容显示器,移除该实例在displays中对应的条目;

getContent()接口,显示区实例调用该接口获取某项内容,具体为:内容显示器依据dispInd与alias分别检索displays与contents,取到对应的显示区实例引用与内容条目,然后比较显示区实例中当前内容显示器的类型与内容条目的类型是否匹配,若匹配,调用内容显示器的replaceContent()接口,直接替换掉其中的内容;若不匹配,移除该内容显示器,生成内容条目对应的内容显示器实例,将新的内容显示器实例添加到显示区中;

所述人机界面还可实现分割窗口,合并窗口,调整尺寸以及配置窗口布局配置文件;

所述分割窗口通过如下方式实现:移除显示区中的内容显示器实例,再新建两个显示区实例,将这两个新建的显示区实例添加到原先的显示区中,利用GUI开发框架提供的布局管理功能在水平方向或竖直方向上,将显示空间平分给这两个新建的显示区实例,两个显示区实例之间用分隔条隔开,分割后,多窗口之间形成层次组织结构;

所述合并窗口通过如下方式实现:移除父显示区中嵌套的两个显示区实例,向内容管理器重新申请内容,将生成的内容显示器添加到其中;

所述调整尺寸通过分隔条实现;

所述窗口布局配置文件定义记录将显示区域分割为某种布局所需的各项参数的格式,通过配置窗口布局文件,用户可将人机界面初始化为某种布局。

前述的内容显示器的实例可以添加到显示区实例中,在任一相同时刻,每个显示区实例中有且只有一个内容显示器实例。

前述的窗口还设置有画面显示器类,所述画面显示器类实现了内容显示器类中定义的通用接口在显示画面内容时的实现。

前述的窗口还设置有窗口部件显示器类,所述窗口部件显示器类实现了内容显示器类中定义的通用接口在显示窗口部件内容时的实现。

前述的窗口布局配置文件以xml文件为载体,定义一套文档描述符,记录用户的窗口布局操作与形成的窗口布局,当用户再次启动人机界面时,可选择将人机界面恢复为前次使用时的布局。

相比传统的SCADA HMI,本发明的HMI设计扩展灵活操作方便,在兼容过去HMI版本布局与显示功能的同时,还能够在同一套HMI中实现OA与MIS系统的界面与功能,避免了每开发一套新的应用系统就需要重新开发一套HMI,大大减少了一套新应用系统的开发工作量,降低了系统后期的维护成本。

附图说明

图1为人机界面定义的类图;

图2为创建DisplayArea实例的操作序列图;

图3是请求一份与当前内容显示器种类一致的内容的操作序列图;

图4是请求一份与当前内容显示器种类不一致的内容的操作序列图;

图5是销毁一个DisplayArea实例的操作序列图。

具体实施方式

在现代图形界面(GUI)开发框架中,内容管理与布局管理是两个通用的概念。内容管理指的是通过GUI开发框架提供的各种容器类与组件类,结合继承与多态机制,实现内容扩展与容器嵌套,获得具有复杂内容与窗口结构的界面组成;布局管理决定了容器中组件的位置与大小,当容器需要定位其中一个组件,它将调用布局管理器来确定。

本发明将传统SCADA上位机HMI实现方式中存在的不足归结为布局方式不灵活与显示内容单一,针对性地提出HMI在内容管理与布局管理两方面的技术方案,较好地解决了上述问题。

1 、内容管理

内容管理是让人机界面中的窗口可以显示任意类型的内容,为每个窗口提供基本导航工具,用户使用导航工具切换窗口的显示内容。

窗口是人机界面的基本单元。传统人机界面中,窗口与窗口中的内容紧密耦合,一个窗口中可以显示哪些内容往往在程序设计时即已确定。本发明将窗口与窗口内容分开实现,分别定义为包含内容的“内容显示器”与包含内容容器的“显示区”, 以及一个依据用户请求动态切换“显示区”中“内容显示器”的“内容管理器”。“内容管理器”提供接口生成、设置“显示区”请求的内容,从而能够为用户提供一致的方式在不同的内容之间进行切换。图1为本发明的人机界面定义的类图,包括:

Container:对应于GUI开发框架中的图形开发工具包中的容器类。

Window:对应于GUI开发框架中的图形开发工具包中的窗口类。

DisplayArea:“显示区”类,继承自Window,表示人机界面中的一块独立的显示区域,提供布局管理与基本的内容导航功能。“内容显示器”的实例可以添加到“显示区”实例中,在任一相同时刻,每个“显示区”实例中有且只有一个“内容显示器”实例。

ContentDisplay:“内容显示器”类,继承自Container类,是所有内容容器类的基类。该类中定义了与“显示区”类和“内容管理器”类交互的通用接口。

SchematicDisplay:“画面显示器”类,“内容显示器”在显示画面内容时的特化。该类实现了“内容显示器”中定义的通用接口在显示画面内容时的实现。

WidgetDisplay:“窗口部件显示器”类,“内容显示器”在显示窗口部件内容时的特化。该类实现了“内容显示器”中定义的通用接口在显示窗口部件内容时的实现。

ContentManager:“内容管理器”类,记录界面中创建的DisplayArea实例,依据DisplayArea实例的请求,生成相应的ContentDisplay实例,添加到DisplayArea中。该类在HMI初始化时,实例化为一个Singleton,并提供一个全局唯一的引用来引用这个实例。

contents:私有成员,用于存储系统中实现的内容的引用。此处内容指的是放置于内容容器中的,用户定义的内容,比如一幅画面,或是一组窗口部件的实现。

displays:私有成员,用于存储界面中打开的DisplayArea实例。

register(DisplayArea disp)接口:DisplayArea实例调用该方法向ContentManager报到,后者存储该DisplayArea实例的引用,为其生成一个唯一的索引号,并返回这个索引号。

unregister(unsigned short dispInd)接口:DisplayArea实例在销毁前,调用该方法,ContentManager根据提供的索引号找到该实例的引用,销毁其中的ContentDisplay,移除该实例在displays中对应的条目。

getContent(unsigned short dispInd, string alias)接口:DisplayArea实例调用该方法获取某项内容。ContentDisplay依据dispInd与alias分别检索displays与contents,取到对应的DisplayArea实例引用与内容条目,然后比较DisplayArea实例中当前ContentDisplay的类型与内容条目的内型是否匹配,若匹配,调用ContentDisplay的replaceContent()接口,直接替换掉其中的内容;若不匹配,移除该ContentDisplay,生成内容条目对应的ContentDisplay实例,将新的ContentDisplay实例添加到DisplayArea中。

下面分别给出“创建DisplayArea实例”、“在DisplayArea中进行内容导航”、“销毁DisplayArea实例”三个用例的操作方法。

如图2所示,创建DisplayArea实例的方法如下:

步骤1:用户请求创建一个新的DisplayArea实例;

步骤2:新的DisplayArea实例初始化,向ContentManager注册,并保留返回的索引值;

步骤3:继续DisplayArea实例的初始化,将内容设置为Home Page;

       步骤3.1:向ContentManager请求Home Page内容对应的alias;

       步骤3.2:以Home Page的alias为参数向ContentManager请求对应内容;

       步骤3.3:ContentManager找到alias对应的内容条目;

       步骤3.4:ContentManager根据内容条目中的内容类型创建对应的ContentDisplay实例;

       步骤3.5:ContentManager将内容条目的uri传递给新建的ContentDisplay实例,让它载入相应内容;

       步骤3.6:ContentManager将新建的ContentDisplay实例添加到DisplayArea实例中,完成后者的创建操作。

如图3所示,请求一份与当前内容显示器种类一致的内容的方法为:

步骤1:用户请求DisplayArea,将当前内容切换到alias指定的内容;

步骤2:DisplayArea向ContentManager请求alias对应的内容;

步骤3:ContentManager找到alias对应的内容条目;

步骤4:ContentManager获取DisplayArea当前ContentDisplay;

步骤5:ContentManager比对请求内容类型与当前内容类型是否一致;

步骤6:类型一致,ContentManager将新内容的uri传递给ContentDisplay,让它载入新内容。

如图4所示,请求一份与当前内容显示器种类不一致的内容的方法为:

该操作前5个步骤与图3中表示的一致,区别从步骤6开始。

步骤6:类型比对结果为不一致,ContentManager从DisplayArea中移除当前ContentDisplay,并销毁后者;

步骤7:ContentManager根据新内容条目中的内容类型创建对应的ContentDisplay实例;

步骤8:ContentManager将新内容条目的uri传递给新建的ContentDisplay实例,让它载入相应内容;

步骤9:ContentManager将新建的ContentDisplay实例添加到DisplayArea实例中。

如图5所示,销毁一个DisplayArea实例的方法为:

步骤1:用户请求删除一个DisplayArea实例;

步骤2:在DisplayArea的析构过程中,以注册时ContentManager返回的索引为参数,向ContentManager反注册自己;

步骤3:ContentManager找到该DisplayArea实例的注册信息,移除并销毁其中的ContentDisplay实例;

步骤4:ContentManager移除该DisplayArea的注册信息。

2 、布局管理

布局管理的目标是提供一种方式,让用户能够动态地将显示区域划分为任意多个窗口,分配窗口尺寸。在此基础上,也提供对预定义窗口布局的支持。

本发明利用了GUI开发框架提供的布局管理功能,设计了一种方式,让用户能够动态地将显示区域划分为任意多个窗口,或对多个窗口进行合并,且能够根据窗口中的内容自由调整尺寸。

本发明实现了分割窗口,合并窗口,调整尺寸以及配置窗口布局配置文件,具体如下:

分割窗口

分割窗口学习了自然界中细胞分裂的方式,一个窗口可以在水平方向或竖直方向上分裂成两个窗口。以这种方式进行操作,一个窗口可分割为两个窗口,两个窗口可分割为四个窗口……理论上,可以使用这种方式将显示区域分割为无限多的窗口;实际使用中,窗口分割的数量也足以供用户使用。

实现时,分割窗口功能并不是在原有的一个DisplayArea实例旁新建一个DisplayArea实例,然后两个实例在水平方向或竖直方向平分原先显示区域的空间。而是移除DisplayArea中的ContentDisplay实例,再新建两个DisplayArea实例,将这两个新建的实例添加到原先的DisplayArea中,利用GUI开发框架提供的布局管理功能在水平方向或竖直方向上,将显示空间平分给这两个新DisplayArea实例,两个实例之间用分隔条隔开。

这种实现方式最大程度的利用了GUI开发框架提供的布局管理功能,并且最终分裂形成的多窗口之间的组织是层次结构的,方便后续操作。

合并窗口

合并窗口为可以将原先由同一窗口分割出去的两窗口合并为一个窗口。虽然有这样的限制,但是辅以窗口分割与内容导航,仍能够方便地在特定的区域显示用户预期的内容。

合并窗口在一侧为完整窗口,另一侧被分割地任意复杂这种情况下,仍能将窗口精确地合并。这是由于层次结构的窗口组织,可以使用递归,由底向上层层合并,最终完成整个窗口的合并操作。这项特性使得用户能够方便快速地一个分割为多窗口的显示区域合并为一个显示窗口。

实现时,合并窗口移除父DispalyArea中嵌套的两个DisplayArea实例,向ContentManager重新申请内容,将生成的ContentDisplay添加到其中。

调整尺寸

调整尺寸是利用GUI开发框架提供的布局管理功能,在分割窗口时,用来分隔窗口的分隔条便具备通过移动调整左右(上下)窗格尺寸的功能。

窗口布局配置文件

窗口布局配置文件定义记录将显示区域分割为某种布局所需的各项参数的格式。通过配置窗口布局配置文件,用户可以将人机界面初始化为某种布局。此外,用户在运行时进行的窗口调整操作也以该格式记录下来,当用户再次启动人机界面时,可选择将人机界面恢复为前次使用时的布局。

由于人机界面中的窗口是以层次结构组织的,因此窗口布局配置文件以xml文件为载体,定义一套文档描述符,记录用户的窗口布局操作与形成的窗口布局。窗口布局配置文件DTD定义如下:

<!DOCTYPE  LAYOUT [

       <!ELEMENT  LAYOUT (DISPLAY+)>

       <!ELEMENT  DISPLAY (DISPLAY+ | CONTENT)>

       <!ELEMENT  CONTENT (#PCDATA)

       <!ATTLIST    LAYOUT       WIDTH CDATA #REQUIRED>

       <!ATTLIST    LAYOUT       HEIGHT CDATA #REQUIRED>

       <!ATTLIST    DISPLAY      INDEX CDATA #IMPLIED>

       <!ATTLIST    DISPLAY      WIDTH CDATA #REQUIRED>

       <!ATTLIST    DISPLAY      HEIGHT CDATA #REQUIRED>

       <!ATTLIST    CONTENT     ALIAS CDATA #REQUIRED>

       <!ATTLIST    CONTENT     TYPE CDATA #REQUIRED>

       ]>

<layout>元素的width与height属性用来记录配置文件中定义的显示区域的坐标尺寸,该尺寸数据来自于前次记录或用户配置。配置文件中其它元素定义的尺寸或坐标属性均为该坐标尺寸下的相对坐标尺寸。在应用时,须要将实际显示区域的坐标尺寸与文件中定义的相对坐标尺寸进行映射,得到窗口布局在实际显示区域中的真实尺寸。采用这种方式进行坐标映射,可以让配置文件中的内容合乎比例的显示在任意尺寸的显示区域中。

<display>元素的index属性记录了运行时DisplayArea在ContentManager中的索引号。在运行时,程序使用该索引号作为id查找引用该<display>元素的dom element。配置文件中的该属性没有实际意义,因为每次载入配置文件生成布局时,DisplayArea的索引号会重新生成。

一个简单的布局配置文件示例如下所示:

<layout width="800" height="600">

              <display index="1" width="800" height="600">

                     <display index="2" width="400" height="600">

                            <content type="svg" alias="foo_svg">

                     </display>

                     <display index="3" width="400" height="600">

                            <content type="grid" alias="foo_table ">

                     </display>

              </display>

       </layout>

这个例子配置记录了在一个宽度为800px高度为600px的显示区域中,左右两个窗格水平排列,各占显示区域宽度的一半。在左窗格中显示一幅SVG画面内容,在右窗格中显示一份表格。

实现时,程序载入窗口布局配置文件,生成相应的DOM树,通过遍历DOM树重建文件中配置的布局。在使用过程中,用户对界面布局做出的任何修改都将被记录到DOM树中,程序退出时,将DOM树回写到配置文件中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号