一种基于FMI标准的协同仿真方法及装置与流程

文档序号:18031138发布日期:2019-06-28 22:40阅读:1089来源:国知局
一种基于FMI标准的协同仿真方法及装置与流程

本发明涉及仿真技术领域,尤其涉及一种基于fmi标准的协同仿真方法及装置。



背景技术:

传统的基于fmi标准封装fmu技术仅面向多源异构模型,即基于fmi标准,将多源异构模型封装成fmu,在系统仿真软件中实现协同仿真。

然而,随着用户对系统仿真的要求不断提高,比如介入半实物系统的协同仿真,仅将多源异构模型封装为fmu不能满足其要求。



技术实现要素:

有鉴于此,本发明提供了一种基于fmi标准的协同仿真方法及装置,用以解决现有技术中随着用户对系统仿真的要求不断提高,比如介入半实物系统的协同仿真,仅将多源异构模型封装为fmu不能满足其要求的问题。具体方案如下:

一种基于fmi标准的协同仿真方法,包括:

解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;

接收所述仿真模块中的包含的仿真数据;

依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;

将所述目标仿真数据进行显示。

上述的方法,可选的,所述fmu模型为多源异构模型,所述伪fmu模型为外部硬件、外部软件和脚本中的至少一个。

上述的方法,可选的,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,对所述外部硬件的封装过程包括:

获取目标板卡的通用接口,其中,所述目标板卡为与所述外部件硬件通过总线连接的板卡;

依据第一预设类调用第二预设类解析所述目标板卡参数、管理所述目标板卡并提供所述通用接口。

上述的方法,可选的,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,对所述外部软件的封装过程包括:

构建目标动态链接库;

依据所述目标动态链接库对所述外部软件进行封装。

上述的方法,可选的,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,对所述脚本的封装过程包括:

解析所述脚本的脚本类型;

确定与所述脚本类型对应的目标封装规则;

依据所述目标封装规则对所述脚本进行封装。

上述的方法,可选的,所述脚本的类型可以为自定义变量接口、python脚本和csv文件中的至少一种。

上述的方法,可选的,依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,包括:

确定所述目标仿真系统中所述fmu模型和所述伪fmu模型之间的数据传输关系;

在预设的仿真步长内,将对应的仿真数据由主线程并行的分配给对应的fmu模型和/或伪fmu模型对应的执行线程进行仿真计算;

获取所述fmu模型和所述伪fmu模型中预设步骤的计算结果;

依据所述数据传输关系,将对应的计算结果在fmu模型和/或伪fmu模型中进行交换,完成所述fmu模型和所述伪fmu模型的更新。

一种基于fmi标准的协同仿真装置,包括:

解析模块,用于解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;

接收模块,用于接收所述仿真模块中的包含的仿真数据;

更新模块,用于依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;

显示模块,用于将所述目标仿真数据进行显示。

上述的装置,可选的,所述解析模块中所述fmu模型为多源异构模型,所述伪fmu模型为外部硬件、外部软件和脚本中的至少一个。

上述的装置,可选的,所述更新模块包括:

确定单元,用于确定所述目标仿真系统中所述fmu模型和所述伪fmu模型之间的数据传输关系;

分配计算单元,用于在预设的仿真步长内,将对应的仿真数据由主线程并行的分配给对应的fmu模型和/或伪fmu模型对应的执行线程进行仿真计算;

获取单元,用于获取所述fmu模型和所述伪fmu模型中预设步骤的计算结果;

交换更新单元,用于依据所述数据传输关系,将对应的计算结果在fmu模型和/或伪fmu模型中进行交换,完成所述fmu模型和所述伪fmu模型的更新。

与现有技术相比,本发明包括以下优点:

本发明公开了一种基于fmi标准的协同仿真方法,包括:解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;接收所述仿真模块中的包含的仿真数据;依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;将所述目标仿真数据进行显示。上述的仿真方法,在仿真系统中加入了伪fmu模型,实现了半实物系统的协同仿真。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例公开的一种基于fmi标准的协同仿真方法流程图;

图2为本发明实施例公开的一种基于fmi标准的协同仿真方法又一流程图;

图3为本发明实施例公开的一种基于fmi标准的协同仿真方法又一流程图;

图4为本发明提供的一种基于fmi标准的协同仿真系统结构框图。

具体实施方式

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

本发明公开了一种基于fmi标准的协同仿真方法及装置,应用于协同仿真过程中,传统的基于fmi标准封装fmu技术仅面向模型,即基于fmi标准,将多源异构模型封装成fmu,在系统仿真软件中实现协同仿真。然而,随着用户对系统仿真的要求不断提高,比如介入半实物系统的协同仿真,仅将数字模型封装为fmu不能满足其要求。因此,我们研究了基于fmi标准的将外部软件系统、外部硬件系统、脚本等多种形式的对象封装为“伪fmu”,与fmu一起集成到系统仿真软件上进行协同仿真的技术。所述仿真方法的执行流程如图1所示,包括步骤:

s101、解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;

本发明实施例中,所述目标仿真系统为当前需要进行仿真的系统,其中,优选的,所述目标仿真系统可以为一个工程,其余可以进行仿真的系统、平台等都可以作为所述目标仿真系统,本发明实施例对所述目标仿真系统的形式不作限制。

其中,本发明采用gcair平台对所述目标仿真系统进行解析,其中,gcair是一款适用于多源异构模型集成的虚拟飞行器仿真工具,本发明实施例中仅以gcair进行举例,对解析的执行主体不进行限制。解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型,其中,所述fmu模型为多源异构模型,所述伪fmu模型为外部硬件、外部软件和脚本中的至少一个。

s102、接收所述仿真模块中的包含的仿真数据;

本发明实施例中,接收所述仿真模块中的所述fmu模型和所述伪fmu模型的仿真数据,在所述仿真模块中的所述fmu模型和所述伪fmu在集成到所述gcair平台过程中,需要对仿真模块进行接口校验和接口描述。当验证完成后,获取所述仿真模块中包含的仿真数据。

其中,优选的,可以将常用的仿真模型存储到仿真模型库,当需要采用重复使用该仿真模型时,将参数重新配置,对流程进行设计。

s103、依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;

本发明实施例中,在每一个预设的仿真步长内,将对应的仿真数据并行的分配给所述fmu模型或所述伪fmu模型进行仿真,实现对所述fmu模型和所述伪fmu模型的更新;若仿真步长执行完所有执行线程后,进行下一个仿真步长的仿真,当仿真完成时,得到目标仿真数据,其中,所述预设的仿真步长可以依据经验值或者具体情况进行设定

s104、将所述目标仿真数据进行显示。

本发明实施例中,将所述目标仿真数据通过数据发送线程发送给上位机进行显示,优选的,将所述目标仿真数据进行保存。

本发明公开了一种基于fmi标准的协同仿真方法,包括:解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;接收所述仿真模块中的包含的仿真数据;依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;将所述目标仿真数据进行显示。上述的仿真方法,在仿真系统中加入了伪fmu模型,实现了半实物系统的协同仿真。

本发明实施例中,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,对所述外部硬件来说外部硬件(如试验台等)信息通过各类总线传输到目标板卡中,将所述目标板卡处理后传送到主板,显示在上位机上,用户可通过上位机对所述外部硬件进行查看和修改。其中所述外部硬件的封装过程包括:

获取目标板卡的通用接口,其中,所述目标板卡类通用接口包括:initcard:初始化板卡,uninitcard:关闭板卡,addiovarinfo:增加一个变量关系映射,releaseiovarinfo:解除所有变量关系映射,setdata:设置output数据,getdata:取得input数据。

依据第一预设类调用第二预设类解析所述目标板卡参数、管理所述目标板卡并提供所述通用接口。其中,所述第一预设类为chardwarectrl类,所述第二预设的类为cparsexml类。

针对所述第二预设类cparsexml类:解析xml类(板卡配置文件)格式:

<devicename=“m35n02”slot=“6”>

<type>ai8</type>

<range>unipolar</range>

<gain>1</gain>

</device>

<devicename=“m62n00”slot=“7”>

<type>ao16</type>

<range>bipolar</range>

</device>

最后返回一个包含板卡类实例的vector

针对所述第一预设类为chardwarectrl类:chardwarectrl类负责调用cparsexml类解析板卡参数,管理板卡,提供板卡对外操作接口,包含上面那个板卡类实例的vector,vector<chardwarebase*>m_veciocard。

本发明实施例中,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,针对所述外部软件:gcair使用tcp模块将用户现有的可执行程序通过简单改造封装为伪fmu,以此作为一个仿真模块加入到当前的仿真工程中,完成外部软件系统的集成操作。为了降低用户的使用难度,软件提供一个名为gctcpcomponent.dll的动态库供用户调用,动态库文件的接口函数如表1所示:

表1

本发明实施例中,所述伪fmu模型是通过对所述外部硬件、外部软件和脚本中的至少一个进行封装得到的,其中,针对所述脚本:gcair参照fmi标准,按照不同脚本的不同作用和特点,对uservar(自定义变量接口)、python脚本、csv文件三种类型脚本制定了不同的规则,并通过这些规则将脚本文件封装为伪fmu。通过图2所示执行流程,将所述脚本伪fmu集成到仿真平台上,并进行交互运算。

用户添加所述脚本伪fmu后,软件根据文件添加的入口自动识别脚本类型,并按照gcair中规定的相应格式进行解析和语法/词法检测。解析过程中,发现语法/词法不符合格式要求时,自动反馈语法/词法规则错误,提醒用户修改文件,并重新加载修改后的脚本;若语法/词法检测通过,解析完成。用户开始仿真时,系统检测源文件是否被占用,避免仿真过程中源文件修改而造成结果偏差,解除占用的文件将检测是否已修改,若修改则重新加载,若未修改,则继续执行后续任务,上位机生成配置文件发送给引擎,引擎执行动态运算。

其中,各类型脚本规则如下:

uservar允许用户根据需要自定义添加、修改以及删除变量信息,方便用户对一些经常改变的关系和简单算法进行较为频繁的操作,对平台的灵活性有重大意义。

uservar信息由变量名字和表达式两部分组成,gcair中对uservar类型的伪fmu的变量命名和表达式分别制定了如下规则:

1)变量命名规则:

a1.自定义变量名不能为空;

b1.自定义变量名中只能出现字母、数字以及下划线,不能出现其它特殊字符和汉字字符;

c1.自定义变量名的首字母不能是数字。

2)表达式的计算规则:

a2.常见的混合运算:+、-、*、/、0、负号、取余%、幂运算、逻辑运算>、<、=、>=、<=、<>等;

b2.常见的数学公式:三角函数、integral(积分)、delay(信号延迟)、noise(噪声函数,噪声分布满足均值为0,标准差为1。噪声设置参数为噪声幅值。例如:out=in+noise(amplitude))等;

c2.自定义宏:steptime(单步仿真时间)、simtime(当前仿真位置时间)。

当用户编辑完自定义变量和表达式后,软件自动对uservar信息进行检测,如果不符合上述要求,软件会有针对性地提示用户,方便用户修改,编辑完自定义变量信息后,点击“确定”按钮,软件将把自定义信息加入到仿真工程,同时在工程信息窗口中显示新添加的自定义变量信息。

gcair软件平台中用到的是python2.7版本,它允许用户使用强大且灵活性高、不需要每次编译的python语言来编写按照自己意图运行的仿真模块,它作为比自定义变量更加灵活强大的可扩展部件存在,主要应用于仿真工程中会灵活改变的模型(自定义变量功能的定位在于变量,两者关注的粒度不一样)以及控制等方面,和真实的fmu相比,其省去了每次修改模型还要打开模型(fmu)生成软件的诸多麻烦。

在gcair中,制定了变量声明、初始化函数、执行函数的语法规则,并提供了三种内置函数,通过此种方式实现将python脚本封装为伪fmu。具体规则如下:

a3.变量的声明格式:

name=variable("front_wheel.om","input","a_input",0.2)

#其中,name:变量的名字。

#variable:声明一个变量的关键字。

#"front_wheel.om":将要显示在gcair软件工程信息窗口模型树中的变量名字。

#"input":该变量的类型,在此可以是"input"、"output"和"parameter"三种,如果写的是其它信息,此变量将不会出现在变量列表中。

#"a_input"是变量的备注信息(comment),0.2是变量的默认值,如果采用其它方式定义变量,将会被python模块认为是此模型的内部变量,不会被解析到工程信息窗口的变量树中显示。

b3.初始化函数init。

init函数作为python脚本模块和gcair软件平台交互的一个接口,将会在开始仿真之前被平台调用一次,在此函数中,脚本编写者可以根据实际需要完成脚本中需要初始化的信息和操作,为脚本在参与进仿真操作之前提供一个控制接口。

c3.执行函数dostep。

dostep函数的名字模仿fmi1.0标准中的执行函数名称,其包含两个参数,脚本编写者可以在该函数中对两个参数变量进行使用。dostep函数将会被软件平台在每一个仿真步骤中均调用一次,是具体脚本计算方法的体现者。

d3.内置函数

gcair在python中新增3个函数,分别是getworkspacepath();getinstallpath()和getprojectpath(),可以实现返回gcair的工作路径;安装路径和工程路径。

对于前文规定外的其他函数,用户可以依照python语言的语法添加自定义的函数接口,这些函数仅仅被脚本中的其它函数所调用完成指定的功能,gcair软件平台不做处理。

目前很多飞行数据(实验数据)都是csv文件格式,为提高仿真过程的准确性和实用性,gcair支持将csv文件封装为伪fmu,作为一个模块加入到仿真过程。

csv文件主要为系统中的其他模型提供按照时间序列添加的输入数据,按照其数据特点和gcair软件的执行规则,gcair中为csv类型的伪fmu制定了如下数据规则:

a5.第一列表头必须为t或者time,且所有表头项不能为空。

b5.数据部分从第二行开始,第二行以下为数据,且不能为空。

c5.时间列数据必须是依次增大的,且不能有空白。

d5.第一行表头部分不能存在重复,不能存在除字母、数字,点和下划线以外的字符。

e5.文件内容不能为空。

f5.csv文件的名字不能存在除字母、数字,点和下划线以外的字符。

g5.当数据结束后执行方式选择循环使用所有数据时,csv文件的第一行和最后一行除时间外的值必须一样。

在gcair主机工具程序的建模菜单中,当用户增加了csv文件模块后,gcair软件平台首先对所增加的csv文件模块进行词法检查,若词法错误,则提示用户“加载csv文件错误”。若词法正确,则继续执行。当用户开始仿真时,gcair软件平台要先判断所加载的csv文件是否被修改,若未被修改,则继续仿真。若已被修改,则重新加载修改后的csv文件,然后对该csv文件进行词法检查,若词法错误,则提示用户“检查格式失败”,仿真停止,若词法正确,则继续仿真。

本发明实施中,优选的,仅以上述三种类型的脚本的封装进行举例说明,但本发明实施例中对脚本的类型不作限制。

本发明实施例中,软件基于fmi1.0和fmi2.0协议实现了相应的接口功能,能够将多源异构模型封装成的fmu,将外部软件系统、硬件系统、脚本封装为伪fmu,并提供fmi标准接口,按照标准加载fmi格式模型,与fmu一同组成模型库,并调度模块进行仿真,具体的执行流程如图3所示:

仿真引擎通过tcp网络协议,接收到数据后,执行命令处理线程,将不同的fmu或伪fmu分配到不同的线程执行操作:

1)命令处理线程:接收上位机发送的仿真命令和仿真参数,控制仿真进行;

2)主控制线程:在仿真开始后,按照仿真步长调度fmu等执行线程进行仿真及中间数据处理,并把结果数据交给数据发送线程;

3)数据发送线程:实时发送仿真结果数据到上位机;

4)fmu执行线程:处理fmu模型;

5)伪fmu_外部硬件系统执行线程:从外部硬件系统实时读取输入数据参与仿真计算;

6)伪fmu_外部软件系统执行线程:与第三方软件系统进行交互,完成模型的3d显示等功能,并处理来自外部软件系统的反馈信息;

7)伪fmu_脚本执行线程:读取并处理python脚本、csv文件、uservar(用户自定义脚本模型)等模块封装成的伪fmu模型;

其中,最开始会由主线程对(伪)fmu进行格式检查和初始化操作,之后由上位机对(伪)fmu模型进行参数设定,然后准备工作结束,可以开始仿真。

本发明实施例中,在仿真过程中,在每一个仿真步长中,主线程会等待所有fmu线程执行完各自的任务,然后分别从各个fmu模型中把模型计算数据获取到,再对工程中的所有fmu模型进行数据交换,确保每一个fmu模型得到了最新的输入,然后将所有fmu模型的计算数据保存到发送缓冲区中,当达到采样时间时,才会将当前时刻数据发送到上位机上进行显示/分析,然后清空缓存区,其中,本发明实施例中,所述采样时间为仿真步长的整数倍,且所述采样时间≤10000仿真步长。最后主线程会唤醒所有的fmu线程,调度他们开始下一个仿真步长的工作,在fmu线程被唤醒后会和主线程同步当前的仿真步长数,之后便调用实际的fmu进行模型计算,在模型计算完成后会自行挂起,等待下一个步长。

基于上述的一种基于fmi标准的协同仿真方法,本发明实施例中还提供了一种协同仿真装置,所述协同仿真装置的结构框图如图4所示,包括:

解析模块201、接收模块202、更新模块203和显示模块204。

其中,

所述解析模块201,用于解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;

所述接收模块202,用于接收所述仿真模块中的包含的仿真数据;

所述更新模块203,用于依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;

所述显示模块204,用于将所述目标仿真数据进行显示。

本发明公开了一种基于fmi标准的协同仿真装置,包括:解析目标仿真系统中包含的仿真模块,其中,所述仿真模块包含fmu模型和伪fmu模型;接收所述仿真模块中的包含的仿真数据;依据所述仿真数据,更新所述fmu模型和所述伪fmu模型,得到目标仿真数据;将所述目标仿真数据进行显示。上述的仿真装置,在仿真系统中加入了伪fmu模型,实现了半实物系统的协同仿真。

本发明实施例中,所述解析模块中所述fmu模型为多源异构模型,所述伪fmu模型为外部硬件、外部软件和脚本中的至少一个。

本发明实施例中,所述更新模块203包括:

确定单元205、分配计算单元206、获取单元207和交换更新单元208。

其中,

所述确定单元205,用于确定所述目标仿真系统中所述fmu模型和所述伪fmu模型之间的数据传输关系;

所述分配计算单元206,用于在预设的仿真步长内,将对应的仿真数据由主线程并行的分配给对应的fmu模型和/或伪fmu模型对应的执行线程进行仿真计算;

所述获取单元207,用于获取所述fmu模型和所述伪fmu模型中预设步骤的计算结果;

所述交换更新单元208,用于依据所述数据传输关系,将对应的计算结果在fmu模型和/或伪fmu模型中进行交换,完成所述fmu模型和所述伪fmu模型的更新。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的一种基于fmi标准的协同仿真方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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