基于分离式设备行为库的交互式虚拟训练系统设计方法与流程

文档序号:12271801阅读:268来源:国知局
基于分离式设备行为库的交互式虚拟训练系统设计方法与流程

本发明涉及仿真测试方法技术领域,尤其涉及一种基于分离式设备行为库的交互式虚拟训练系统设计方法。



背景技术:

交互式虚拟训练系统是对实际操作训练过程的仿真,属于一类过程仿真系统,目的在于由计算机提供的虚拟环境中熟练掌握某一装置或某一系统的操作使用方法。这样的人在回路仿真系统中,对频繁的人机交互和装备的复杂操作逻辑规则提出了较高的要求。当前交互式虚拟训练系统中,对设备行为的描述是最为繁重的一项任务。目前主要的手段是通过源代码编程的模式将各种装设备和各类型部件通过编程的模式嵌入到软件中。这种模式给系统修正、维护和升级带来了极大困难。



技术实现要素:

本发明所要解决的技术问题是提供一种基于分离式设备行为库的交互式虚拟训练系统设计方法,所述方法将部件库和部件行为逻辑库分离设计, 通过所述方法建立交互式虚拟训练系统,降低了系统的复杂性,提高该类系统的易维护性、通用性和可移植性,降低开发成本和维护成本。

为解决上述技术问题,本发明所采取的技术方案是:一种基于分离式设备行为库的交互式虚拟训练系统设计方法,所述方法包括以下步骤:

S1,设计交互式训练主体的仿真模型构成部件库,所述部件库包括装备面板实例和机械部件实例,根据所有的装备面板实例和机械部件实例名称建立部件索引;

S2,设计与上述部件库相对应的装备面板实例和机械部件实例的部件行为逻辑库,并根据上述部件索引建立与之相对应的逻辑索引。

所述装备面板实例采用虚拟仪器开发工具来创建三维的或照片级的交互图形显示界面;所述机械部件采用三维建模软件实现。

所述装备面板实例和机械部件实例在实现中具体为对象的指针;部件行为逻辑库包括各部件之间的逻辑以及外部数据对部件的驱动逻辑,部件行为逻辑库中只识别部件名称或其索引;回演库保存各部件状态改变时的状态值和时间。

将部件库和部件行为逻辑库存入数据库,系统初始化时,将所有的数据载入内存,并建立相应的索引。

数据库包括字典表和逻辑表,字典表包括:战位字典、面板字典、机械装置字典、部件类型字典、部件字典和逻辑类型字典;逻辑表包括:总逻辑表、分逻辑表和逻辑状态表。

所述数据库的逻辑响应流程如下:

(1)将逻辑分为两个级别,总逻辑和分逻辑,所述总逻辑包括若干个分逻辑,遍历所有唤醒的总逻辑,获得每条总逻辑当前节点的平行逻辑;

(2)根据所获得平行逻辑,判断当前响应是否符合条件,如果符合条件并且该平行逻辑可以重复则执行该平行逻辑,跳转到第(5)步,否则,执行下一步;

(3)获得下一节点所有平行逻辑;

(4)根据所获得的平行逻辑,判断当前响应是否符合条件,如果符合则执行该平行逻辑,执行下一步,否则,返回响应失败消息;

(5)判断该总逻辑是否完成,如果没有完成,则节点数加一,如果完成则判断该总逻辑是否可以重复,如果可以重复,置该总逻辑节点数为1,否则冻结该总逻辑;

(6)总逻辑响应完成,返回响应成功消息。

采用上述技术方案所产生的有益效果在于:所述方法将部件库和部件行为逻辑库分离设计,将军事训练业务(即数量众多的的设备部件和纷繁复杂的行为逻辑转换)整理后按照规则填入部件行为逻辑库中,而代码只读取部件行为逻辑库的内容,对库中的部件状态变换、行为变化等进行提取、分析和实现,从而达到了业务与软件驱动代码分离的目的。在开发此类系统时只需把设备行为数据填入数据库,而代码部分可完全复用,因此该方案具有较好的易维护性、通用性和可移植性,为复杂的交互式虚拟训练系统提供了一种优良的开发手段。

附图说明

下面结合附图和具体实施方式对本发明作进一步详细的说明。

图1是交互式虚拟训练主体流程图;

图2是交互及状态响应数据流程图;

图3是设备行为库逻辑结构图;

图4是状态逻辑迁移示意图;

图5是部件字典表;

图6是部件状态迁移图。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

本发明公开了一种基于分离式设备行为库的交互式虚拟训练系统设计方法,所述方法包括以下步骤:

步骤一、设计交互式训练主体的仿真模型构成部件库,所述部件库包括装备面板实例和机械部件实例,根据所有的装备面板实例和机械部件实例名称建立部件索引;

在交互式虚拟训练实际操作过程中,操作人实际接触到的部件可以归结为两类:一是仪器面板,比如按钮、旋钮等;二是机械部件,比如螺丝、插头等。前者的实现采用目前较为流行的虚拟仪器开发工具来创建实时的、三维的、照片级的交互图形显示界面。第二类部件的实现主要采用三维建模的方法来完成。在交互式虚拟训练中,两类部件在部件抽象与规整的前提下,最终可统一到一个整体的框架中,交互式虚拟训练主体流程如图1所示。

不管是装备面板还是机械部件对象,在图形驱动引擎中通过相关的API函数都可获得其名称。反过来,如果为所有的装备面板实例和机械部件实例建立索引,即可通过名称获得该对象的实例。部件库包括面板和机械部件的实例集,并且根据所有实例的名称建立索引。

步骤二、设计与上述部件库相对应的装备面板实例和机械部件实例的部件行为逻辑库,并根据上述部件索引建立与之相对应的逻辑索引(参见附图3);

交互式虚拟训练系统中所有的面板实例和机械部件实例都可以在外部进行集中的管理。因此,使用外部的部件行为逻辑库对所有的部件进行驱动,交互及状态响应数据流程如图2所示。

需要指出的是,所谓的实例在实现中具体为对象的指针;逻辑库包括各部件之间的逻辑以及外部数据(一般为网络数据)对部件的驱动逻辑,逻辑库中只识别部件名称或其索引。

步骤三、当操作人员或者外部数据影响到部件库中的某个部件状态改变时,首先搜索部件库,得到由图形驱动引擎获得的部件实例的索引;然后遍历部件行为逻辑库,获得该部件状态改变时所对应的逻辑索引;然后根据逻辑索引,搜索部件库,获得执行逻辑状态所涉及的面板和机械部件实例;最后驱动这些面板和机械部件实例,变换其逻辑状态值,并且将该仿真时刻、部件索引和状态值存入回演库,完成一次完整地逻辑操作(参见附图1)。

为了方便逻辑的编辑和维护,将部件库和逻辑库存入数据库,当交互式虚拟训练系统初始化时,将所有的数据载入内存,并建立相应的索引。这样,通过数据库提高开发和维护效率,通过初始载入和建立内存索引提高系统运行效率。

回演库保存了各部件状态改变时的状态值、时间等。设备行为库设计:数据库包括字典表和逻辑表,字典表包括:战位字典、面板字典、机械装置字典、部件类型字典、部件字典和逻辑类型字典;逻辑表包括:总逻辑表、逻辑表和逻辑状态表,各表之间的关系如图3所示。

具体的所述方法如下:

1、装备三维建模

装备的机械部件三维建模和外部测试仪器的虚拟面板建模要按照部件字典表(如图5所示)的规划进行,内部的部件状态迁移按照具体业务转换过程建立(如图6所示)。

2、定义数据库接口

数据库接口根据具体数据库的不同稍有区别,以下以ADO接口为例:

系统采用ADO数据接口,具体实现如下:

//初始化com接口

CoInitializeEx(NULL, COINIT_MULTITHREADED);

TESTHR(m_connection.CreateInstance(__uuidof(Connection)));//创建连接实例

TESTHR(m_recordset.CreateInstance(__uuidof(Recordset)));//创建数据集实例

m_connection->ConnectionString = DataBaseSourse;//设置数据源

m_connection->ConnectionTimeout = 5;//设置连接时间

m_connection->Open("","","",adConnectUnspecified);//打开连接

VARIANT v;

V_VT(&v) = VT_DISPATCH;

V_DISPATCH(&v) = (IDispatch*) m_connection;

V_DISPATCH(&v)->AddRef();

m_recordset->Open(sql,v,adOpenDynamic,adLockOptimistic,adCmdUnknown);//打开数据集。

3、行为逻辑结构的响应

某型导弹测试训练仿真系统中虚拟仪表操作逻辑可表示为图4所示的结构,图中每个圆圈代表一个逻辑,将逻辑分为两个级别,总逻辑和分逻辑。下图中,包括三条总逻辑,1,2,3,4为总逻辑1;5,6,7为总逻辑2;8,9为总逻辑3。每条逻辑(包括总逻辑)都有两个属性:“必须完成”和“可以重复”。“必须完成”为真表明该逻辑必须完成,它后面的逻辑才有效。比如,如果逻辑3“必须完成”为真,则当逻辑1完成后,只要逻辑3没有执行,则逻辑4无效,反之,如果逻辑3“必须完成”为假,即使逻辑3没有完成,只要满足逻辑4的条件即可执行逻辑4。“可以重复”属性表明该逻辑是否可以重复执行,比如,逻辑3“可以重复”为真,则执行完逻辑3后该逻辑仍然有效,反之该逻辑无效。需要注意的是,图中体现了平行逻辑的概念。所谓平行逻辑是指多条逻辑在同一个节点,只要前一个节点逻辑执行完毕,满足这些逻辑中的任何一条,即可执行。图中,逻辑2和3为平行逻辑,总逻辑1和总逻辑2也为平行逻辑。每条总逻辑可以冻结和唤醒,这样可以大大提高总逻辑之间跳转的灵活性。下图中,当逻辑4或逻辑7完成时应唤醒总逻辑3,同时冻结总逻辑1或总逻辑2;当逻辑9完成时,应唤醒总逻辑1,同时冻结总逻辑3。

4、外部驱动程序接口及行为响应流程

逻辑响应接口:BOOL TranslateMessage(int bujianindex,char* value,BOOL fromout),该接口中,bujianindex为状态值改变部件的索引,value为该部件当前的状态值,fromout指明该消息是否来自于网络或外部。显然,如果是由于操作人员的操作而引起的逻辑响应,需要将部件实例转换为索引值,假设station为战位,panel(ComponentBase* 类型)为面板实例,part(DisplayObject* 类型)为部件实例,其转换的具体过程如下:

CString mb=mianban->InstanceName();//获得面板的名称

CString bj=bujian->InstanceName();//获得部件名称

CString classname=bujian->ObjectClassName();//部件类型

if(classname!="InputDevice")

return false; //如果该部件不为“输入设备”,则返回

int value=((InputDevice*)bujian)->State();//获得部件状态值

//根据战位、面板和部件名称搜索部件库得到部件索引

int xiangyingbujian_index=GetBujianIndex(station,mb,bj);

逻辑响应流程如下:

Ⅰ、遍历所有唤醒的总逻辑,获得每条总逻辑当前节点的平行逻辑;

Ⅱ、根据所获得逻辑,判断当前响应是否符合条件,如果符合条件并且该逻辑可以重复则执行该逻辑,跳转到第Ⅵ步,否则,执行下一步;

Ⅲ、获得下一节点所有平行逻辑;

Ⅳ、根据所获得的逻辑,判断当前响应是否符合条件,如果符合则执行该逻辑,执行下一步,否则,返回响应失败消息;

Ⅴ、判断该总逻辑是否完成,如果没有完成,则节点数加一,如果完成则判断该总逻辑是否可以重复,如果可以重复,置该总逻辑节点数为1,否则冻结该总逻辑;

Ⅵ、逻辑响应完成,返回响应成功消息。

某条逻辑在执行时,应当注意其执行事件是某些部件一连串状态的改变,它们随时间而改变,并且每一次改变状态的同时可以唤醒和冻结一条总逻辑。

5、某型导弹操作过程实例

以具有典型意义的某型导弹的测试设备打开过程为例,按照操作流程,依次为:

1、接通交流稳压电源;

2、接通计算机显示器电源;

2、接通打印机电源;

3、接通计算机主机电源。

在第一步接通交流稳压电源的前提下,第二步可以是接通计算机显示器电源,也可以是打印机电源,两者没有严格的先后关系;在计算机显示器电源和打印机电源都接通的情况下。才可以执行第三步接通计算机主机电源。在设备行为库中定义好该状态迁移过程,即可仿真出三维的效果。操作人员在第二步可以不分先后顺序,但是在第二步两个部件都打开的前提下,才能执行第三步的操作,否则对比设备行为库的正确过程并提示错误,且记录下该错误的操作,为后期操作训练成绩评分提供条目。

所述方法将部件库和部件行为逻辑库分离设计,将军事训练业务(即数量众多的的设备部件和纷繁复杂的行为逻辑转换)整理后按照规则填入部件行为逻辑库中,而代码只读取部件行为逻辑库的内容,对库中的部件状态变换、行为变化等进行提取、分析和实现,从而达到了业务与软件驱动代码分离的目的。在开发此类系统时只需把设备行为数据填入数据库,而代码部分可完全复用,因此该方案具有较好的易维护性、通用性和可移植性,为复杂的交互式虚拟训练系统提供了一种优良的开发手段。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1