SMILE故障诊断引擎与VAPS XT人机界面设计工具的集成
2020-06-12石磊
石磊
(中航通飞研究院有限公司 广东省珠海市 519000)
VAPS XT是一款用于汽车、航空领域人机界面设计的工具,其的优势在于人机界面的快速开发,SMILE是一个基于贝叶斯网络的仿真接口引擎,其优势在于贝叶斯网络模型的分析,将前者的显示和后者的处理集成在一起,应用到带有故障诊断功能扩展的人机界面设计,可以提升故障诊断系统开发、验证的效率。
1 使用工具介绍
1.1 VAPS XT工具
如图1所示,VAPS XT是加拿大Presagis公司提供的一款商用货架软件开发工具,该软件为开发人员提供了驾驶舱人机显示图像的快速开发平台,简化了开发流程。凭借内置的代码生成工具CODE nGen工具,VAPS XT将开发人员从代码编写工作中解放出来,使其专注于图形界面的设计。开发人员无需将代码编译,就可以对设计效果进行实时的验证,相对于直接应用OpenGL进行开发,使用VAPS XT可以大大缩短人机界面开发的时间[1]。如果有需要,开发的架构还允许设计人员对自动生成的代码进行调整。VAPS XT还通过nCOM接口提供于当前各主流仿真设计软件的交互功能,包括DOORs,Simulinks等,实现显示与控制人机界面的实时仿真[2]。
1.2 GeNie工具
GeNIe Modeler是由BayesFusion,LLC公司开发的SMILE Engine图形用户界面,允许交互式模型构建和学习。它是为Windows环境编写的,但也可以在Wine下的macOS和Linux上使用。GeNIe可以创建和修改故障诊断网络模型,定义模型节点属性,输入节点证据,动态查看诊断结果。自1998年以来,它已在该领域进行了全面测试,在学术界和工业界得到了广泛认可,并在全球拥有数千名用户。本文演示使用的贝叶斯网络模型采用的是BayesFusion,LLC公司官方网站提供的发动机燃油系统故障诊断模型(Engine Fuel System)[3]。模型在GeNIe打开的界面如图2所示。
1.3 SMILE引擎
SMILE是结构化建模、推理和学习引擎(Structural Modeling,Inference,and Learning Engine)的缩写,SMILE引擎也是由BayesFusion,LLC公司推出的一款针对图形模型(如贝叶斯网络,影响图和结构方程模型等)的推理和学习/因果查找引擎。它是一个C++类库,可以通过其API接口被用户软件调用和集成,进而通过决策建模功能增强用户软件的功能[4]。通过对SMILE引擎的调用,可以直接应用贝叶斯网络、动态贝叶斯网络和影响图等工具进行故障诊断,快速利用多种推理算法进行故障诊断和预测。SMILE需要授权使用,本文使用的是学术试用版。
2 将VAPS XT与SMILE引擎集成
图1:VAPS XT人机接口设计工具软件界面
图2:GeNIe建模计算工具的用户图形界面
SMILE的功能集中在贝叶斯网络的故障诊断,如果要为SMILE引擎开发可视化界面,需要专门开展人机交互界界面的编程,工作量较大。VAPS XT提供的自动代码生成工具,以及灵活的第三方插件接口功能,为SMILE与VAPS XT的集成提供了条件。
2.1 用户自定义编程对象
VAPS XT支持通过C++编程定制用户编程对象,这种方式生成的对象拥有更灵活的功能。设计人员首先要使用VAPS XT创建一个空的对象,定义好出入输出接口后,通过CodeGEN自动生成模板C++工程,然后利用Microsoft Visual Studio对模板C++工程进行补充工程开发。不同版本VAPS XT支持的Visual Studio版本不同,其中VAPS XT4.1支持的Visual Studio版本2012版。在补充开发模板工程时,可以添加引用包括SMILE在内的第三方库,扩充VAPS XT的性能[5]。当用户完成代码编写、编译调试后,就可以生成动态链接库,进而被VAPS XT调用,如果要生成独立的界面可执行程序,则还要将用户自定义代码编译成静态库。
2.2 创建并编辑模板工程
生成模板工程的第一步是先定义一个空对象,如图3所示,在VAPS XT中新建——高级对象——class,输入对象名称并确定解可。
在编程对象定义窗口中,可以对这个对象的输入输出接口进行定义,如图4所示。其中,Base Class,是新创建的用户自定义对象的基类,如果是图形类的对象,则基类为GrObject,如果是计算类的对象,则基类为Calculator。此处由于是定制基于SMILE的模型处理接口,需要将基类改为Calculator。需要将Has Update Function的选项框选,以便对象能够实时根据输入证据的变化给出对应的诊断结果。
在“Properties”属性页中可以添加新的接口参数,输入每一个接口参数的“名称”、“类型”、“访问”、“默认值”等属性。其中,名称就是接口参数的名称,类型为接口参数的数据类型,可以在下拉菜单中选择接口的数据类型,包括浮点、整形、布尔、字符串等;访问属性指明该参数是作为输入还是作为输出,或者双向访问,默认值就是该参数在初始化时被设置的值。
在开展接口属性定义前,应当结合对象要实现的功能、对象与VAPS XT之间的交互方式等内容,对接口进行规划,因为修改接口的操作会导致后续一系列工作的反复。
完成自定义编程对象的属性定义后,保存对象,就可以通过VAPS XT自带的CODE nGEN功能生成模板工程。如图5所示。
自动生成的模板工程文件夹的存放位置默认在VAPS XT工程目录下的codedobject文件夹下,使用Visual Studio 2013打开Root Project PathCodedObjectclassNamemake下的vxtClsclassName.vcxproj文件,即可打开模板工程项目。
生成模板工程项目后,需要添加对SMILE引擎的引用。首先要更改模板工程项目的属性,在C/C++,General设置页中,找到Additional Include Directories,将SMILE头文件存在的路径添加进去。在Linker,General设置页中,找到Additional Library Directories,将SMILE引擎的静态库文件所在的路径添加进去。
在模板工程的源文件中找到“vxtClsclsFuelModel.h”,在该头文件中添加对Smile引擎头文件的引用。在模板工程的源文件中找到“vxtClsclsFuelModel.cpp”,在该源文件中添加对SMILE引擎License头文件的引用。至此,模板工程就可以利用SMILE引擎提供的接口调用各种贝叶斯网络算法开展编程了。
分析vxtClsclsFuelModel.cpp源文件的结构,除了构造函数,和析构函数外,还有一个主要的函数就是vUpdate函数。在构造函数中,主要添加SMILE引擎初始化需要做的工作,如模型文件的读取,将读取后的模型对象保存到一个全局变量中,然后就是模型对象属性的读取以及输出。可以在此处初始化DSL_network对象,制定后续的模型计算。在析构函数中,主要添加SMILE引擎关闭后需要做的工作,如文档对象的销毁、内存的释放等。
算法的过程都包含在vUpdate函数中,这个函数定义了在VAPS XT应用更新时,对象需要处理的工作。对象需要添加的故障诊断函数就添加到这里。可以参考SMILE引擎的接口定义文档,执行模型载入、节点证明设置、模型更新、获取节点属性等操作。将图2中定义的对象参数,作为vUpdate函数中模型计算的输入和输出参数,就实现了数据的更新。
2.3 创建用户自定义插件实例
图3:新建用户自定义编程对象
图4:定义输入输出接口
图5:使用CODE nGEN生成模板工程
生成用户自定义对象的动态连接库之后,还需要在VAPS XT中定义一个对象实体以便“实例化”这个自定义对象,这就需要再定义一个Coded Implementation对象。图6所示为创建Coded Implementation的界面。
在创建页面需要输入对象的名称、对象所在的项目,然后再Class Name下来菜单中选择刚刚定义好的用户自定义对象class,选择上一步生成的DLL的路径,然后VAPS XT会自动选择CPP和头文件的路径。点击确定后,在VAPS XT的资源窗口中,clsFuelModel对象下面就生成出了一个Implementation对象。
2.4 在VAPS XT的Format中使用新建对象
完成用户自定义对象的创建后,就可以在Format中调用这个对象了,调用方式与其他VAPS XT中内置的对象类似。需要注意的一点是,如果用户自定义对象中使用了内置的文件读取模式,则一定要确保访问路径下有对应的文件可以被访问到。否则在使用用户自定义对象时将会出错。建议在用户自定义对象的接口定义时,增加文件路径选择的输入接口,然后在实现
图6:创建Coded Implementation对象
图7:在Format中应用新定义的对象
图8:SMILE引擎在VAPS XT中可视化的效果
只要把这个对象从工程资源窗口中拖进Format的Implementation View窗口中即可。如图7所示。
选中clsFuelModel对象,可以在他的属性窗口中看到对象的输入输出参数,可以发现,自定义对象已经输出了初始化的数值。
接下来就可以在Format中开展设计,通过图8所示的多状态按钮,将证据的值传递给,然后将SMILE实时更新输出的节点属性输出给Format界面中的数据条和数字文本,实现故障的诊断。
3 集成后的调试、编译及运行
3.1 在VAPS XT环境下的调试
在VAPS XT中,可以通过运行指令,实时对Format中的界面进行功能验证。对于带有SMILE用户自定义对象的Format来说也是一样的,用户可以对Format界面的输出结果和显示逻辑进行验证,更改分以下几种情况:
(1)Format界面本身设计的问题,比如数据流定义错误、图形符号的样式不合适,可以随时对Format界面进行调整。
(2)SMILE自定义对象的问题,不涉及到接口的变更;比如诊断结果不正确,无法读取文件等错误,则需要对模板工程的源代码进行修改。然后重新编译生成动态链接库。
(3)SMILE自定义对象的问题,涉及到接口的变更。如需要增加接口参数,参数的数据类型要更改,这种更改,需要首先修改用户自定义对象的接口属性,再重新生成模板工程。重新生成用户自定义对象实例后,还需要重新加载该实例到Format中,替换掉原来的实例,如果在Format中有默认对象和用户自定义对象之间的数据流,则还需要重新定义数据流。涉及的更改量比较大,因此要尽量在前期定义好接口。
3.2 静态链接库的生成
自定义对象动态链接库是为了在VAPS XT环境下实时对Format界面的设计效果进行验证。一旦验证设计满足预期,为了能让Format界面运行在独立于VAPS XT的环境下,则需要将用户自定义对象编译为静态库。编译平台需要由Release改为StaticOGL。
3.3 代码自动生成
当完成用户自定义对象的编译调试,成功生成动态、静态链接库之后,就可以利用VAPS XT自带的CODE nGEN功能生成Format的工程代码,然后编译生成可执行程序。
此时在VAPS XT中通过CODE nGEN自动生成源代码,在编译的时候,会提示找到不smile.h,编译无法通过。因为CODE nGEN编译时使用的目标平台使用的是wogl.cfg,指的是Windows环境下,利用opengl库进行编译。该平台的编译设置,保存在VAPS XT根目录configwogl.cfg文件中,找到CUSTOM_INCS所在的行,添加SMILE引擎头文件的引用即可。
$(INCLUDE_DIR_COPTION)$(VAPSXT_ROOT_PRJ_DIR)$(DIR_SEP)smile
将smile的头文件拷贝至该路径下,然后将smile的库文件拷贝至:
VAPSXT_ROOT_PRJ_DIRCode Gen
3.4 通过脚本运行VAPS XT界面程序
编译生成的可执行程序可以直接运行。如果在自动生成代码前未设置系统参数,则有可能在首次直接运行时出现屏幕未对准,比例不匹配的问题。比较稳妥的方式就是通过脚本程运行界面可执行程序。新建一个txt文档,将下面的脚本程序粘贴进去。
start TestFormat_wogl.exe-noborder-fit
文件另存为start.bat,然后就可以通过双击bat文件的方式,启动显示界面程序。
除了显示配置的参数,脚本程序启动的方式还可以对nCom等功能进行配置,具体参见VAPS XT的CODE nGEN用户手册。
4 结语
本文对SMILE故障诊断引擎与VAPS XT人机界面设计工具集成的方法进行了介绍,在总结工具基本特点的基础上,说明了在VAPS XT中利用用户自定义编程对象调用SMILE引擎的过程,以及利用生成的插件实例开展人机界面设计的过程,利用SMILE引擎官方网站提供的模型,对集成过程进行了测试,对集成后的调试和运行方法进行了说明,表明通过两种工具的集成,可以在很短的时间内完成SMILE引擎的可视化,为后续开展基于贝叶斯故障诊断模型的用户界面设计提供了参考。