CN114860388B - FMU模型转换为Modelica模型的联合仿真方法 - Google Patents

FMU模型转换为Modelica模型的联合仿真方法 Download PDF

Info

Publication number
CN114860388B
CN114860388B CN202210791133.XA CN202210791133A CN114860388B CN 114860388 B CN114860388 B CN 114860388B CN 202210791133 A CN202210791133 A CN 202210791133A CN 114860388 B CN114860388 B CN 114860388B
Authority
CN
China
Prior art keywords
model
fmu
simulation
modelica
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210791133.XA
Other languages
English (en)
Other versions
CN114860388A (zh
Inventor
侯庆坤
蒋荣
何绍清
程旭
张聪聪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Automotive Technology and Research Center Co Ltd
Automotive Data of China Tianjin Co Ltd
Original Assignee
China Automotive Technology and Research Center Co Ltd
Automotive Data of China Tianjin Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Automotive Technology and Research Center Co Ltd, Automotive Data of China Tianjin Co Ltd filed Critical China Automotive Technology and Research Center Co Ltd
Priority to CN202210791133.XA priority Critical patent/CN114860388B/zh
Publication of CN114860388A publication Critical patent/CN114860388A/zh
Application granted granted Critical
Publication of CN114860388B publication Critical patent/CN114860388B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供一种FMU模型转换为Modelica模型的联合仿真方法,包括两个以上的FMU模型转换为Modelica模型并在Modelica编译环境下联合仿真,至少一个FMU模型转换为Modelica模型并与Modelica语言模型在Modelica编译环境下联合仿真;本发明在Modelica编译环境下实例化FMU模型,解析FMU模型的描述文件,调用Modelica的外部函数,完成在Modelica语言编译环境下的模型变量、输入输出接口、方程、算法的声明与定义,将FMU模型转换为Modelica模型,在Modelica编译环境下联合仿真,实现多学科、跨平台的多源异构模型集成。

Description

FMU模型转换为Modelica模型的联合仿真方法
技术领域
本发明的实施例涉及多源异构模型联合仿真技术领域,尤其涉及一种FMU模型转换为Modelica模型的联合仿真方法。
背景技术
目前,由于计算机技术和数值计算技术的发展,各工业领域逐渐发展出各自专用商用仿真软件,同时正是因为不同的仿真软件各有所长,很难彻底基于统一的建模规范实现多学科的联合仿真。对于多学科联合仿真接口而言,国内外均在积极参与与开发,2016年华中科技大学董政等人将Simulink模型成功封装为FMU模型,实现了Simulink中创建的模型在其他仿真环境的调用。而浙江大学和哈尔滨工程大学分别在航天和车辆领域展开了基于FMI的多学科联合仿真研究。
由此可见,当前跨平台、跨学科的联合仿真很大一部分是通过FMU模型来完成的。不同的FMU模型在联合仿真时一般是通过TCP或者Proxy代理完成相互间的数据交互的,这个过程一般需要依赖服务器或者网络的稳定性。
为了满足复杂物理系统建模和仿真的发展,出现了基于方程的陈述式非因果建模语言——Modelica,实现了复杂模型多领域建模与仿真,Modelica具有建模方便、模型重用性高、无需符号处理、开放的模型库、建模与仿真相对独立等优点,逐渐成为多领域物理系统建模的仿真主流。但是目前尚没有一种可行的方案实现FMU到Modelica的转换以及在Modelica编译环境下的联合仿真。
发明内容
本发明提供了提出一种FMU模型转换为Modelica模型的联合仿真方法,实现FMU模型转换为Modelica模型并在Modelica语言编译环境下仿真。在多FMU系统仿真时,能够对各种来源的FMU模型进行联合仿真,或者与Modelica语言本身创建的模型进行联合仿真。
本发明提供的一种FMU模型转换为Modelica模型的联合仿真方法,包括:
两个以上的FMU模型转换为Modelica模型并在Modelica语言编译环境下联合仿真,或者,至少一个FMU模型转换为Modelica模型并与Modelica语言本身创建的模型在Modelica编译环境下联合仿真;
其中,任一FMU模型转换为Modelica模型并在Modelica语言编译环境下的仿真,包括:
在Modelica编译环境下调用构造函数对待转换的FMU模型进行实例化,得到FMU实例;
对从FMU的模型描述文件中解析出的FMU模型的各个变量与输入输出接口并进行初始化,并获取所述变量的初始值与类型信息;
对所述FMU实例进行初始化;
在开始仿真时,将所有变量的初始值传递至所述FMU实例,调用外部函数更新所述变量的值;在下一仿真时刻时,将所有变量更新后的值传递至所述FMU实例,并返回调用外部函数更新所述变量的值的操作。
从上面可以看出,本发明在Modelica语言编译环境下实例化FMU模型,初始化模型变量和FMU实例,调用外部函数,完成在Modelica语言编译环境下的模型变量、输入输出接口、方程、算法的声明与定义,将FMU模型转换为Modelica模型,从而可以在Modelica语言编译环境下仿真;进而两个以上的FMU模型在Modelica语言编译环境下联合仿真,或者,至少一个FMU模型与Modelica语言本身创建的模型在Modelica编译环境下联合仿真,有效实现多学科、跨平台的多源异构模型集成以及联合仿真。
附图说明
为了更清楚地说明本发明或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种FMU模型转换为Modelica模型的联合仿真方法的示意图;
图2是本发明实施例提供的Mwork中的电堆模型的仿真结果示意图;
图3是本发明实施例提供的电堆模型FMU转换为Modelica模型后的仿真结果的仿真结果示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
需要说明的是,除非另外定义,本发明的实施例使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明的实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
图1是本发明实施例提供的一种FMU模型转换为Modelica模型的联合仿真方法的示意图,适用于对FMU模型转换为Modelica模型,并在Modelica编译环境下进行联合仿真的情况。本发明提供的方法由配置有Modelica语言编译环境的电子设备执行,该方法包括以下操作:
S110、两个以上的FMU模型转换为Modelica模型并在Modelica语言编译环境下联合仿真,或者,至少一个FMU模型转换为Modelica模型并与Modelica语言本身创建的模型在Modelica语言编译环境下联合仿真。
FMU模型可以来源于同一软件或不同软件,可选的,FMU模型是从Carsim、Simulink或MWorks软件创建的模型中导出的,以实现任一种FMU模型到Modelica的转换。两个以上的FMU模型转换为Modelica模型后可以在Modelica编译环境下联合仿真。此外,也可以与Modelica语言本身创建的模型进行联合仿真,Modelica语言本身创建的模型的仿真方案参见现有技术。具体的联合仿真方式可以根据需求设计,本实施例不作限定。
本实施例着重描述任一FMU模型转换为Modelica模型并在Modelica语言编译环境下的仿真,在FMU模型转换为Modelica模型并在Modelica语言编译环境下仿真之前,还需要构造一些外部函数,声明FMU模型参数以及编写模型的算法与方程。
第一步:利用Modelica语言的ExternalObject派生类定义构造函数;利用Modelica语言的ExternalObject派生类定义析构函数。
构造函数实现对FMU模型动态链接库中函数调用与实例化,析构函数用于在仿真结束后释放内存等操作。
第二步:在Modelica语言编译环境下定义与声明符合FMI标准的外部函数。
本实施例中的FMU模型包括联合仿真(Co-Simulation)模式或者模型交换(ModelExchange)模式,不同模式下需要声明和定义不同的外部函数,具体而言:
1、针对Model Exchange模式的FMU模型在Modelica语言编译环境下完成不同函数的定义与声明:
(1)定义fmuSetTime()函数,用以完成仿真时间的设定;
(2)定义fmuSetContinuousStates()和fmuGetContinuousStates()函数,用以设置和获取当前仿真状态为连续时间模式;
(3)定义fmuCompletedIntegratorStep()函数,用以执行每一个积分步长;
(4)定义fmuNewDiscreteStates()函数,用以判断仿真是否依然为事件模式;
(5)定义fmuEnterInitializationMode()函数,用以初始化FMU实例;
(6)定义fmuExitInitializationMode()函数,用以退出初始化模式;
(7)定义fmuSetReal/Boolean/Integer/String()函数,用以对FMU模型中的变量进行赋值;
(8)定义fmuGetReal/Boolean/Integer/String()函数,用以获取FMU模型中的变量值;
(9)定义fmuGetDerivatives()函数,用以获得仿真状态导数;
(10)定义fmuGetEventIndicators()函数,用以获得事件指示器向量。
2、针对Co-simulation模式的FMU模型在Modelica语言编译环境下完成不同函数的定义与声明:
(1)定义fmuDoStep()函数,用以执行模型单步仿真;
(2)定义fmuEnterInitializationMode()函数,用以初始化fmu实例;
(3)定义fmuExitInitializationMode()函数,用以退出初始化模式;
(4)定义fmuTerminate()函数,用以终止仿真;
(5)定义fmuReset()函数,用以重置fmu实例;
(6)定义fmuSetReal/Boolean/Integer/String()函数,用以对fmu中的变量进行赋值;
(7)定义fmuGetReal/Boolean/Integer/String()函数,用以获取fmu中的变量值。
第三步:解析所述FMU模型的模型描述文件得到模型变量的信息,在Modelica语言编译环境下定义与声明所述FMU模型变量。
通过解析xml模型描述文件中<ModelVariables></ModelVariables>得到所有变量的信息,包括但不限于变量名、个数、变量类型、变量之间的依赖关系和属性(如连续或离散,初始值或中间值)。
根据解析得到的变量的信息,进行同样变量的定义与声明,包括以下三种情况:
第一种情况适用于模型交换模式和联合仿真模式,根据任一变量的因果关系属性Causality和初始属性initial以及是否有初始值,声明所述变量为公有变量或者私有变量,对变量赋予所述初始值。
具体而言:(1)当变量的Causality=“CalculatedParameter”或者Causality=“Parameter”且变量有初始值时,声明为paramter公有变量,并将xml中的初始值赋值给该变量;(2)当变量的Causality=“CalculatedParameter”或者Causality=“Parameter”且没有初始值时,仅声明为parameter公有变量,如果变量本身有单位,则注明单位;(3)当变量具有initial属性,且initial=“exact”或者initial=“approx”时,声明为私有变量,如果变量同时具有初始值,则需对应新增一个paramter公有变量,用于存储变量的初始值。
第二种情况仅适用于模型交换模式,定义与声明如下私有变量:模型中含求导的状态向量fmu_States,模型事件指示器向量fmu_Indicators,模型实数输入接口数量fmu_nRealInput,模型布尔型输入接口数量fmu_nBooleanInput,模型整型输入接口数量fmu_nIntegerInput,模型事件触发向量fmu_Events,模型仿真状态变量fmu_StateChanged。
第三种情况仅适用于联合仿真模式,定义与声明如下私有变量:模型实数输入接口数量fmu_nRealInput,模型布尔型输入接口数量fmu_nBooleanInput,模型整型输入接口数量fmu_nIntegerInput,模型实数输出接口初始值fmu_Real_y_start,模型布尔型输出接口初始值fmu_Boolean_y_start,模型整型输出接口初始fmu_Integer_y_start,仿真开始时间fmu_StartTime,当前仿真时间fmu_Time,判断单步仿真是否成功的变量fmu_StepSucceed,判断仿真是否终止的变量fmu_Terminated。
在完成外部函数和参数的定义与声明后,执行任一FMU模型转换为Modelica模型并在Modelica编译环境下的仿真,其实质为FMU模型转换为Modelica模型时的方程、初始化方程、算法与初始化算法执行步骤,包括:
S111、在Modelica语言编译环境下调用构造函数对待转换的FMU模型进行实例化,得到FMU实例。
构造函数利用Modelica语言的ExternalObject派生类定义,通过调用构造函数constructor()实现对FMU模型的动态链接库的加载,以便调用其中的接口函数,完成FMU模型的实例化。
S112、对从FMU模型的描述文件中解析出的FMU模型的各个变量与输入输出接口并进行初始化,并获取所述变量的初始值与类型信息。
对于不同模式的FMU模型,初始化的方式也不同。
第一种情况适用于FMU模型为联合仿真模式,从所述FMU模型的描述文件中查找可变变量,根据所述可变变量的类型调用外部函数对所述可变变量赋初始值;调用外部函数获得变量的初始值;
当变量的variability不等于“constant”,同时属性initial=“exact”或者“approx”,且变量存在初始值的情况时,根据变量类型调用fmuSetReal/Boolean/Integer()函数为相应的变量赋初始值;在调用外部函数获得变量的初始值时,当变量的causality=“parameter”或者“calculatedparameter”且variability=“fixed”,同时变量不存在初始值时,调用fmuGetReal/Boolean/Integer()函数获取变量值;当变量的variability=“constant”且变量没有初始值时,调用fmuGetReal/Boolean/Integer()函数获取变量值。
第二种情况适用于FMU模型为模型交换模式,从所述FMU模型的模型描述文件中查找可变变量,根据所述可变变量的类型调用外部函数对所述可变变量赋初始值;调用外部函数获得初始的连续状态向量。
当变量的variability不等于“constant”,同时属性initial=“exact”或者“approx”,且变量存在初始值的情况时,根据变量类型调用fmuSetReal/Boolean/Integer()函数为相应的变量赋初始值。然后,调用fmuGetContinuousState()函数获得初始的连续状态向量。
如果FMU模型为模型交换模式,当变量的initial=“calculated”或者variability=“constant”时,调用fmuGetReal/Boolean/Integer()函数获得相应变量的初始值。
此外,还需要从描述文件中解析FMU模型的输入接口和输出接口,并进行初始化。
S113、对所述FMU实例进行初始化。
对于模型交换模式和联合仿真模式,调用fmuEnterInitializationMode()函数初始化fmu实例,初始化成功后调用fmuExitInitializationMode()函数退出初始化模式。
可选的,如果FMU模型为联合仿真模式,在对FMU实例进行初始化之前还包括:如果FMU模型存在输入接口,即causality=“input”时,调用外部函数fmuSetReal/Boolean/Integer()设置所述输入接口的初始值。在对所述FMU实例进行初始化之后还包括:如果FMU模型存在输出接口,即causality=“output”时,调用外部函数fmuGetReal/Boolean/Integer()获取输出接口实例化后的值。
可选的,如果FMU模型为模型交换模式,在对FMU实例进行初始化之后还包括:如果FMU模型存在离散输入接口,即variability=“discrete”且causality=“input”时,调用外部函数fmuSetReal/Boolean/Integer()设置所述离散输入接口的初始值。
S114、在开始仿真时,将所有变量的初始值传递至所述FMU实例,调用外部函数更新所述变量的值;在下一仿真时刻时,将所有变量更新后的值传递至所述FMU实例,并返回调用外部函数更新所述变量的值的操作。
如果FMU模型为模型交换模式,在开始仿真时将当前的仿真时刻传递给FMU实例,查找所有的连续变量,即数据类型为Real类型,调用fmuSetReal()函数为所述连续变量赋值。
如果FMU为联合仿真模式,在开始仿真时获取输入接口变量的值,调用fmuDoStep()函数执行单步仿真。具体的,如果变量variability不等于“constant”且不存在causality属性时,调用fmuReal/Boolean/Integer()函数获得相应变量的值。再者,用相同的函数获取输出接口在仿真起始状态的值。在执行每个仿真步长之前,调用fmuSetReal/Boolean/Integer()函数设置FMU实例输入接口变量的值。接着调用fmuDoStep()函数执行单步仿真,若单步执行成功则继续仿真,否则终止仿真。
当获取到仿真终止信号或者到达仿真结束时间时,仿真结束。
可选的,在仿真结束后,在Modelica语言编译环境下调用所述析构函数。
本发明在Modelica语言编译环境下实例化FMU模型,初始化模型变量和FMU实例,调用外部函数,完成在Modelica语言编译环境下的模型变量、输入输出接口、方程、算法的声明与定义,将FMU模型转换为Modelica模型,从而可以在Modelica编译环境下仿真;进而两个以上的FMU模型在Modelica语言编译环境下联合仿真,或者,至少一个FMU模型与Modelica语言本身创建的模型在Modelica语言编译环境下联合仿真,有效实现多学科、跨平台的多源异构模型集成以及联合仿真。
在一些实施例中,模型交换模式的FMU模型的仿真具有事件模式和连续时间模式,在事件模式下,所有连续时间方程和离散时间方程均为活动状态,此时可以对连续变量和离散变量进行赋值与取值,而在连续时间模式下,模型的所有离散时间方程均不可用。
在调用外部函数更新所述变量的值之后还包括:
1、如果所述FMU模型为模型交换模式,判断是否进入事件模式。
判断是否进入事件模式,包括以下任一种操作:每按照积分步长完成一次积分,调用fmuCompleteIntegratorStep(),当该函数的返回值enterEventMode为真时,仿真进入事件模式;当所述FMU模型存在离散输入接口时,即causality=“input”且variability=“discrete”,在每个仿真时刻通过调用change()函数监测变量值是否发生变化,一旦变化,仿真进入事件模式;如果事件指示器数量numberOfEventIndicators不为0,通过调用fmuGetEventIndicators()函数获得事件指示器向量,如果事件指示器向量中有值发生变化,仿真进入事件模式。
2、如果进入事件模式,通过调用外部函数获取返回值。通过调用fmuNewDiscreteState()函数获得其返回值newDiscreteStatesNeeded是否为真。
3、根据所述返回值的真假,确定维持事件模式或者返回连续时间模式。
若返回值为真,仿真模式依然为事件模式,若为假,则调用fmuEnterContinuousTimeMode()函数返回连续时间模式。
本发明基于Functional Mock-up Interface(FMI)标准,将任意不同仿真软件导出的FMU模型进行解析与翻译,从而形成Modelica模型,使得跨学科的工业仿真更加便利。与现有技术相比,本发明的有益结果为:
在多FMU系统仿真时,能够对各种来源的FMU进行解析,借助本发明将多源异构模型解析翻译为同一建模语言(Modelica语言),完成模型函数、参数、算法与运算方程的翻译,完成不同软件创建的模型在Modelica的编译环境下和普通的Modelica模型一样使用,真正实现了跨平台、多学科融合的联合仿真。
本发明以Carsim、Simulink以及MWorks等软件创建的模型导出对的FMU模型为例,对转换为Modelica模型的FMU与Modelica语言本身创建的模型进行联合仿真运算,图2是本发明实施例提供的Mwork中的电堆模型的仿真结果示意图,图3是本发明实施例提供的电堆模型FMU转换为Modelica模型后的仿真结果的仿真结果示意图,横坐标为时间,纵坐标为变量取值范围,图2的图例pump1.fluid.T[K]为MWorks软件下泵内流体的开氏温度,pipe_liquid_simple.friction.T[K]为MWorks软件下管道内液体的温度,图3的图例‘pump1.fluid.T’[K]为与Mwork中同一电堆模型的fmu的泵内流体的开氏温度,‘pipe_liquid_simple.friction.T’[K]为与Mwork中同一电堆模型的fmu的管道内液体的温度。
对比仿真结果发现,两张图的吻合程度较高,转换为的Modelica模型与原本模型搭建软件的仿真结果一致,充分体现了该发明方法的有效性。
本发明的实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本发明的实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种FMU模型转换为Modelica模型的联合仿真方法,其特征在于,包括:
两个以上的FMU模型转换为Modelica模型并在Modelica编译环境下联合仿真,或者,至少一个FMU模型转换为Modelica模型并与Modelica语言本身创建的模型在Modelica语言编译环境下联合仿真;
其中,任一FMU模型转换为Modelica模型并在Modelica语言编译环境下的仿真,包括:
在Modelica语言编译环境下调用构造函数对待转换的FMU模型进行实例化,得到FMU实例;
对从FMU模型的描述文件中解析出FMU模型的各个变量与输入输出接口并进行初始化,并获取所述变量的初始值与类型信息;
对所述FMU实例进行初始化;
在开始仿真时,将所有变量的初始值传递至所述FMU实例,调用外部函数更新所述变量的值;在下一仿真时刻时,将所有变量更新后的值传递至所述FMU实例,并返回调用外部函数更新所述变量的值的操作;
在调用外部函数更新所述变量的值之后,还包括:如果所述FMU模型为模型交换模式,判断是否进入事件模式;如果进入事件模式,通过调用外部函数获取返回值;根据所述返回值的真假,确定维持事件模式或者返回连续时间模式;
其中,所述判断是否进入事件模式,包括以下任一种操作:
每按照积分步长完成一次积分,调用fmuCompleteIntegratorStep(),当该函数的返回值enterEventMode为真时,仿真进入事件模式;
当所述FMU模型存在离散输入接口时,在每个仿真时刻监测变量值是否发生变化,一旦变化,仿真进入事件模式;
如果事件指示器数量numberOfEventIndicators不为0,获得事件指示器向量,如果事件指示器向量中有值发生变化,仿真进入事件模式。
2.根据权利要求1所述的方法,其特征在于,在Modelica编译环境下调用FMU模型的构造函数进行实例化,得到FMU实例之前,还包括:
在Modelica编译环境下定义与声明符合FMI标准的外部函数;
解析所述FMU模型的模型描述文件得到模型变量的信息,在Modelica编译环境下定义与声明所述FMU模型变量。
3.根据权利要求2所述的方法,其特征在于,所述FMU模型包括模型交换模式的FMU模型和联合仿真模式的FMU模型;
所述在Modelica编译环境下定义与声明所述FMU模型变量,包括:
如果所述FMU模型为模型交换模式,根据任一变量的因果关系属性和初始属性以及是否有初始值,声明所述变量为公有变量或者私有变量,对变量赋予所述初始值;
定义与声明如下私有变量:模型中含求导的状态向量fmu_States,模型事件指示器向量fmu_Indicators,模型实数输入接口数量fmu_nRealInput,模型布尔型输入接口数量fmu_nBooleanInput,模型整型输入接口数量fmu_nIntegerInput,模型事件触发向量fmu_Events,模型仿真状态变量fmu_StateChanged;
如果所述FMU模型为联合仿真模式,根据任一变量的因果关系属性和初始属性以及是否有初始值,声明所述变量为公有变量或者私有变量,对变量赋予所述初始值;
定义与声明如下私有变量:模型实数输入接口数量fmu_nRealInput,模型布尔型输入接口数量fmu_nBooleanInput,模型整型输入接口数量fmu_nIntegerInput,模型实数输出接口初始值fmu_Real_y_start,模型布尔型输出接口初始值fmu_Boolean_y_start,模型整型输出接口初始fmu_Integer_y_start,仿真开始时间fmu_StartTime,当前仿真时间fmu_Time,判断单步仿真是否成功的变量fmu_StepSucceed,判断仿真是否终止的变量fmu_Terminated。
4.根据权利要求2所述的方法,其特征在于,在Modelica语言编译环境下定义与声明符合FMI标准的外部函数之前,还包括:
利用Modelica语言的ExternalObject派生类定义构造函数;
利用Modelica语言的ExternalObject派生类定义析构函数;
将所有变量更新后的值传递至所述FMU实例,并返回调用外部函数更新所述变量的值的操作之后,还包括:在仿真结束后,在Modelica语言编译环境下调用所述析构函数。
5.根据权利要求1所述的方法,其特征在于,所述对从FMU模型的描述文件中解析出的FMU模型的各个变量与输入输出接口并进行初始化,包括:
如果所述FMU模型为联合仿真模式或者模型交换模式,从所述FMU模型的模型描述文件中查找可变变量,根据所述可变变量的类型调用外部函数对所述可变变量赋初始值;
如果所述FMU模型为模型交换模式,调用外部函数获得初始的连续状态向量;
如果所述FMU模型为联合仿真模式,调用外部函数获得变量的初始值。
6.根据权利要求1所述的方法,其特征在于,在对所述FMU实例进行初始化之后还包括:
如果所述FMU为模型交换模式且存在离散输入接口,调用外部函数设置所述离散输入接口的初始值;
在对所述FMU实例进行初始化之前还包括:
如果所述FMU模型为联合仿真模式且存在输入接口,调用外部函数设置所述输入接口的初始值;
在对所述FMU实例进行初始化之后还包括:
如果所述FMU模型为联合仿真模式且存在输出接口,调用外部函数获取输出接口实例化后的值。
7.根据权利要求1所述的方法,其特征在于,所述在开始仿真时,将所有变量的初始值传递至所述FMU实例,调用外部函数更新所述变量的值,包括:
如果所述FMU模型为模型交换模式,在开始仿真时将当前的仿真时刻传递给FMU实例,查找所有的连续变量,调用fmuSetReal()函数为所述连续变量赋值;
如果所述FMU为联合仿真模式,在开始仿真时获取输入接口变量的值,调用fmuDoStep()函数执行单步仿真。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述FMU模型是从Carsim、Simulink或MWorks软件创建的模型中导出的。
CN202210791133.XA 2022-07-07 2022-07-07 FMU模型转换为Modelica模型的联合仿真方法 Active CN114860388B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210791133.XA CN114860388B (zh) 2022-07-07 2022-07-07 FMU模型转换为Modelica模型的联合仿真方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210791133.XA CN114860388B (zh) 2022-07-07 2022-07-07 FMU模型转换为Modelica模型的联合仿真方法

Publications (2)

Publication Number Publication Date
CN114860388A CN114860388A (zh) 2022-08-05
CN114860388B true CN114860388B (zh) 2022-09-20

Family

ID=82626447

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210791133.XA Active CN114860388B (zh) 2022-07-07 2022-07-07 FMU模型转换为Modelica模型的联合仿真方法

Country Status (1)

Country Link
CN (1) CN114860388B (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200063848A (ko) * 2018-11-28 2020-06-05 (주)사라 스프레드시트 기반 공조기 해석 방법
CN111414695A (zh) * 2020-03-19 2020-07-14 苏州同元软控信息技术有限公司 一种基于Modelica的联合仿真系统及其构建方法
CN112558498B (zh) * 2020-12-04 2023-01-13 中国航空工业集团公司成都飞机设计研究所 一种基于数据池的mbse飞行器系统间联合设计与验证方法
CN112632860B (zh) * 2021-01-04 2024-06-04 华中科技大学 一种基于强化学习的动力传动系统模型参数辨识方法
CN113076622B (zh) * 2021-02-22 2023-12-12 南京远思智能科技有限公司 Fmu仿真模型规范性分析与校验系统及方法
CN114488850A (zh) * 2022-01-14 2022-05-13 中航航空模拟系统有限公司 基于Modelica的飞行模拟器运动系统建模方法

Also Published As

Publication number Publication date
CN114860388A (zh) 2022-08-05

Similar Documents

Publication Publication Date Title
Jensen et al. Colored Petri nets: a graphical language for formal modeling and validation of concurrent systems
CN108376221B (zh) 一种基于aadl模型扩展的软件系统安全性验证与评估方法
CN105701277A (zh) 一种基于aadl建模的航电系统架构实时性分析方法
Kozyrev Estimation of the execution time in real-time systems
CN111209203A (zh) 一种基于源代码的模型验证方法
Patil et al. Formal modelling and verification of IEC61499 function blocks with abstract state machines and SMV-execution semantics
CN114896755A (zh) 一种支持模型属性量化评估的指标验证技术
CN114860388B (zh) FMU模型转换为Modelica模型的联合仿真方法
CN111709138A (zh) 面向cps时空性质的混成aadl建模与模型转换方法
Daszczuk Verification of temporal properties in concurrent systems
van der Meyden Finite state implementations of knowledge-based programs
Tsai et al. Knowledge-based software architectures: acquisition, specification, and verification
Balbo et al. On the computation of performance characteristics of concurrent programs using GSPNs
Siegel et al. Analyzing BlobFlow: A case study using model checking to verify parallel scientific software
CN113609633A (zh) 一种基于模型的复杂体系协同仿真与验证评估系统和方法
Morelli et al. A system-level framework for the evaluation of the performance cost of scheduling and communication delays in control systems
Renya et al. AADL-based reliability modeling method of cyber-physical systems
CN114579084A (zh) 发动机的控制软件的形式化处理方法和装置
Dotti et al. Specification and analysis of fault behaviours using graph grammars
Lantreibecq et al. Model checking and co-simulation of a dynamic task dispatcher circuit using CADP
Hugues et al. Integrating AADL and FMI to Extend Virtual Integration Capability
Dotti et al. Verifying object-based graph grammars: An assume-guarantee approach
Aoki et al. An axiomatic formalization of UML models
Madelaine et al. Using SMT Engine to Generate Symbolic Automata
Ramdane-Cherif et al. Dynamic reconfigurable software architecture: Analysis and evaluation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant