APP下载

水电站多业务一体化人机交互模型设计与实现

2021-11-15李继伟李雪强迟海龙李亦凡

水电站机电技术 2021年10期
关键词:脚本数据源调用

李继伟,李雪强,迟海龙,李亦凡

(北京中水科水电科技开发有限公司,北京 100085)

0 引言

随着智能化水电站、一体化平台的不断建设,计算机软件、硬件性能的提高,业主对水电站监控系统人机交互的需求越来越复杂,不同业务之间的交互功能要求也越来越高,运行人员希望在一体化平台中获取更多的业务展示。水电站业务数据主要分水调、电调两类,其中水调业务专业性较强,成果展示手段非常丰富,而电调业务实时性较强,数据也比较全。一体化平台的建设需要深入融合水调和电调业务,双方的业务数据需要实时交互;同时为了支持、简化第三方应用的接入以及为满足未来扩展的需要,保护业主已有投资,需支持后续业务的无缝接入,最终实现多业务模型与数据在跨平台、跨主机上数据展示层的集中统一展示。

在现有的水电一体化平台中,普遍采用中间库的方式实现数据交换,存在数据实时性不高、交互逻辑组态复杂的困难,因此本文基于数据信息流模型,设计了一套水电站多业务一体化人机交互模型框架,为水电站复杂业务交互提供了一种简单、有效的集成手段。本框架通过对信息流数据的构建、接口转换、后台引擎驱动、集成展示等多项技术,使得水电调一体化平台可以简单有效地进行水电调业务组态、数据集成,支持不同业务之间的复杂交互需求,满足了新平台多业务数据在统一平台内共享的要求。

1 系统总体架构

水电站多业务人机交互框架主要有模型建立、信息数据流化、数据处理、脚本引擎驱动、模型展示、信息交互等多方面,其整体设计图如图1所示。其中模型建立负责确定业务之间交互的接口,信息数据流化按照固定的协议规则负责接口数据与流数据之间的相互转换,数据处理是指在数据到达业务服务端后,业务端对业务请求分析后的响应。脚本引擎驱动是利用脚本引擎驱动交互脚本,实现数据的获取及业务交互展示,是整个框架的核心。模型展示以及信息交互主要负责对业务返回数据的统一展示,以及在数据修改后的数据回存。

图1 水电站多业务交互框架设计图

2 交互模型建立及展示

交互模型是不同业务之间数据转换、交互的核心。为整合不同业务之间的异构数据源,简单地将多个应用系统连接起来是远远不够的,软件的数据交换标准化才是业务融合的前提条件。因此在人机交互框架中,本平台设计并提供了统一的数据建立接口、数据流化接口,同时为满足多编程语言使用、跨平台调用的需求,提供标准的C语言库接口函数,提高了接口使用的易用性,降低了第三方集成人员的使用难度。

3 模型建立

在水电站业务平台中,不同业务应用平台多由不同厂家开发,相互之间直接调用的难度很大,增加了一体化平台适配的难度。借鉴微服务及SOA的架构,不同业务模型间应该尽量解耦合,服务之间通用接口实现弱耦合调用,服务提供方与调用者只依赖于接口定义描述。根据服务接口定义文件,集成工具可以生成框架代码,服务方负责提供具体的响应实现,客户端代码只需要根据接口直接调用即可,数据转换、目标获取等统一由平台内部的数据服务总线统一提供,应用系统只需要基于被动响应合理、合法的请求返回对应数据,不需要关心数据请求来自哪个系统,也不用了解该系统的连接协议等信息。业务使用方只需要使用标准接口进行调用即可,故而对数据应用系统是透明的。

为支持跨语言调用的需要,接口定义的数据类型只支持简单类型及由简单类型的树状结构组合,即int、long、double、string及这些简单类型构成的数组,以及这些简单类型的组合。业务双方交互时只需要设计具体的服务交互接口、相关参数(输入、输出参数),形成业务交互的协议(交互协议主要由服务交互接口名,由不同数据类型组合构成的输入、输出参数)。交互参数设计图如图 2所示,复杂结构体之间支持嵌套,但是不允许结构体之间的循环嵌套,在生成接口协议时支持对循环嵌套的接口定义做合理性检查,以避免运行时错误。

图2 交互参数设计图

3.1 信息数据流化

对具体的业务协议,经过标准的打包拆包操作,最终转换为跨平台的C数据结构,实现信息的数据流化。

序列化格式为:固定消息格式的消息头加上消息内容。

消息头主要包括消息类型(请求还是回应),消息长度以及消息校验和;消息内容按又细分为服务名字段、服务请求名字段、参数打包字段集合序列化内容。

具体打包某一字段时又包括字段类型、字段名、字段数据等,同时在数据流化时,为提高传输效率,对int、long数值型数据采用变长方式流化。

3.2 数据展示与交互

在人机交互配置界面中可以配置界面交互图元点击后的交互逻辑,以及服务取得的数据展现到展示图元。对每一类型的显示图元,统一定义图元数据源数据格式,以标准输出流格式由图元自身动态解析服务交互结果,并展示成合适的格式。对图元间可以关联二级图元,支持数据间联动,支持model/view模型,一个数据源可以关联多个数据视图,在数据有变化时支持多个数据源的同时更新,有修改后支持数据结果的回存。

3.3 数据处理

不管是客户端还是服务端,交互的数据都需要处理方能使用,对于服务端业务,只需要根据服务协议动态解析信息流数据,并将服务响应结果按照服务协议打包返回到客户端即可,服务端框架里核心内容是如何支持多客户端访问的线程安全及负载均衡。对客户端平台,需要考虑接续的是不同业务之间的交互模型,尤其是后续第三方业务的集成,故必须支持后续业务的无限扩展需求。设计时考虑了对序列化消息支持脚本动态解析,在协议扩展时实现消息内容的动态获取,这些功能必须依赖可靠的脚本引擎才具可行性。

4 脚本引擎驱动

相对于编译型语言(C++、Java、C#等),脚本语言存在着计算性能低的先天不足,以前在电力SCADA系统里也仅在性能要求不高的系统综合计算等非核心逻辑中使用,而且其驱动引擎也多采用自研脚本语言,以提高性能,但也同时牺牲了脚本语言的灵活性。随着计算机计算水平的提高,分布式应用在网络带宽足够大的情况下引入脚本语言,利用脚本语言提供的灵活性仅需要工程人员简单的配置能够实现复杂的交互功能,这在以前依赖编译型语言实现的系统里必须要研发人员依据客户的需求定制,增加了工程集成的难度。

4.1 脚本语言之选择

当前主流的脚本语言有JS、Python、Lua等,其中JS主要使用于前端开发,Python作为强大的脚本语言,其依赖众多的第三方库可实现非常复杂的功能,也比较重量级,而Lua语言一方面具有性能高、与其他语言黏合性好的特点,在游戏领域应用较多,目前初步应用在了水电站监控系统中,扩大了脚本的应用范围;另一方面,当前SCADA系统普遍采用性能较高的C/C++语言开发,而Lua作为纯C开发的脚本语言,同样具有较强的跨平台特性,在对脚本性能有特殊要求时还可以采用LuaJIT的方式。

在水电调一体化平台人机交互框架中,在业务执行多个服务请求、响应分析的同时,还需要保证常规画面的正常刷新,故必须要选择一种能支持大量脚本引擎可同时运行、执行性能高的语言,对比JS、Python,Lua作为框架人机交互语言是不二之选。

4.2 画面脚本引擎之数据驱动

水电站多业务人机交互主要体现在不同业务模型在统一展示平台的数据展示、方案制作、保存等,主要由前期服务数据的工程配置和运行时的动态获取解析两部分构成,都需要脚本引擎对配置文件的解析功能,前者属于脚本文件的静态解析,后者属于脚本文件的运行解析。

为屏蔽不同图元交互时的配置差异,集成工具提供了一套统一的界面以实现数据源的统一配置,由脚本语言动态存取,对保存后的配置,图元解析功能设计时选择用脚本引擎解析图元的自定义配置,利用脚本语言解析的灵活性实现图元属性的易扩展性,降低了模型间的耦合,图元数据源配置有服务名、服务函数名、服务请求参数集合、服务结果数据集绑定、请求类型(周期、发布/订阅等)。

脚本引擎作为人机交互业务的脚本语言解释器和执行器,其支持的脚本类似于高级编程语言,在具体应用时还需要针对特殊用途扩展特定的接口,以实现与平台内其他应用的实时交互。脚本引擎的常规工作流程是:①脚本引擎的解释器将一定格式的脚本程序翻译成中间代码,这些中间代码主要由组态中其他模块的访问接口和相应的数据结构组成;②系统投入运行时,系统根据工程配置,主动加载相应的脚本程序,交给引擎执行器动态解析并执行。

当前人机交互界面的刷新,多采用发布/订阅技术或周期刷新技术,取决并依赖于数据源数据的刷新方式,发布/订阅技术比较灵活,实现技术也较为复杂;而周期刷新技术数据通常来自实时内存库,性能很高,但需要提前定义固定的数据结构,适用有其局限性。框架在设计时同时支持上述两种刷新方式,对实时性能要求较高的服务调用,采用实时库周期刷新的方式,对每个控件绑定唯一的数据源ID,多个数据展示图元(曲线、棒图、表格等)支持绑定同一数据源;对采用发布/订阅机制的数据源刷新方式,一般具有请求响应的数据量比较大、计算周期较长、刷新不频繁、响应结果展示复杂的特点,还需要支持同一数据源不同的展示方式,支持数据源的model/view展示机制,以提高刷新显示性能。

框架对展示图元(曲线、棒图、表格等)、交互图元(按钮等)的包装,采用封装开源控件库的方式实现,以支持控件事件的触发,但控件操作一般是不可重入的,相应操作也必须在GUI主线程完成。为不影响界面的正常刷新,对发布订阅的请求,必须支持异步调用的方式,其实现时主要分为以下3个步骤:

(1)对待刷新的控件,在GUI主线程中读取对应的控件数据,并将取得的数据打包发到统一的子线程池;

(2)每一个子线程对应一个独立的脚本引擎,并由脚本引擎负责对服务请求内容进行统一打包并执行;

(3)对异步返回结果的处理分两种情况,周期刷新的数据只需要将数据保存到全局缓存中,由界面刷新定时取用即可;对发布订阅的数据,需要将返回的执行状态/实际数据打包发送信号到主线程,由主线程对返回结果进行统一分析处理。

4.3 平台交互

脚本引擎作为通用的解释性语言,与其他语言交互时一般也只提供了较为简单的库函数,特殊应用使用时必须依赖语言提供的标准API进行封装。脚本引擎与一体化平台的交互,既需要脚本引擎对平台功能的正向调用/交互,也需要平台功能对脚本引擎函数的逆向调用。

与一体化平台交互时,必须注册相应的函数到脚本引擎,脚本动态解析时方能识别,对Lua引擎,所有注册给Lua的C函数具有typedef int (*lua_CFunction) (lua_State *L)的原型;框架设计时,已针对公用需求,将一体化平台内的常规平台交互函数注册到脚本引擎,主要分为以下几种功能:

(1)实时库操作:脚本可以调用实时库中的读写函数,并调用消息总线接口实现数据的实时同步;

(2)历史库服务操作:实现历史数据的写库以及数据查询;

(3)日志分析:记录服务请求、读取的处理流程,对数据的关键路径,记录其执行流程,供日后查询、日志统计及分析以及在请求异常后的故障分析;

(4)平台权限管理:在脚本引擎里的操作,可调用平台权限的统一判断函数,对用户操作进行判断并记录,并通过一体化系统的数据总线同步操作判断结果;

(5)高级应用功能:为其他高级应用功能提供逻辑运算支撑,以及复杂逻辑功能的组态。

平台功能对脚本引擎的解析调用,采用固定功能key的方式,平台读取脚本数据时,按照对象名、特定功能key的方法读取脚本中的数据,当前系统定义的功能key主要有以下几个:PlatFormName(平台名)、ServiceName(服务名)、FuncName(函数名)、InputParas(输入参数集合配置)、OutputParas(输出参数集合配置)、bPeriodRefresh(是否周期刷新)、FreshPeriod(刷新周期)等。

5 结语

一体化人机交互模型满足了多业务数据在水电调一体化平台中数据共享和集成展示的要求。在水电调一体化SOA平台架构中,基于服务总线提供的统一数据传输机制,结合自身业务特点,对人机交互界面提供了一套操作简单的配置、显示画面,利用脚本驱动引擎驱动复杂业务的交互逻辑,满足了不同业务间的复杂交互需求,为水电调一体化平台多业务数据在统一平台内数据共享、集中展示、平台的可靠运行提供了技术支撑。

猜你喜欢

脚本数据源调用
酒驾
安奇奇与小cool 龙(第二回)
一种多源数据融合过程中的实体关联性计算方法
核电项目物项调用管理的应用研究
利用属性集相关性与源误差的多真值发现方法研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
自动推送与网站匹配的脚本
Web 大数据系统数据源选择*
利用RFC技术实现SAP系统接口通信
装备保障数据集成平台