FMU中时间概念的连续性和离散性实际上是变量的属性。并且FMU都能够包含连续时间的变量或是离散时间的变量。在模型交换类型和联合仿真类的FMU通信中可以看到这一点。
在FMI2.0中通过通信点来进行数据交换的通信结构是离散的。
一、模型交换:导入工具提供求解器
- 仿真工具之间模型集成非常紧密。
- 在导入工具和模型之间的接口非常复杂。
- 导入工具必须提供合适的求解器。
二、联合仿真:导出工具提供求解器
三、联合仿真的接口 Interface
通信时间步长可以和内部步长不同,通信时间步长主要是不同FMU之间交换信息,而在各自的内部可以时是不同的可变时间步长。
在联合仿真接口中,参数会根据FMI标准有着典型的调用顺序:
- 得到输出:fmiGetXXX(...)
- 触发计算直到下一个通信节点:fmidoStep(...)
- 设置输入值:fmi2SetXXX(...)
以C代码为例:
- 使用FMI2Instantiate函数实例化FMU
CALL (FMI2Instantiate(S, resourceURI, fmi2CoSimulation, modelDescription->instantiationToken, fmi2Flase, fmi2Flase))
其中涉及到的参数分别是FMI实例、FMU资源的URI、声明FMU的类型为联合仿真、唯一标识符、是否显示FMU的GUI和是否启动日志记录的参数。
- 应用初始值和输出
CALL(applyStartValues(S,settings)); CALL(FMIApplyInput(S,input,setttings->startTime,true,true,false));
- 设置参数并进入初始化模式,如果有FMU初始状态文件的话,可以在实例化FMU后执行
CALL(FMI2SetupExperiment(S,settings->tolerance>0,settings->tolerance,settings->startTime,fmiFalse,0)); CALL(FMI2EnterInitializationMode(S)); CALL(FMI2ExitInitializationMode(S));
- 进入仿真循环,按照时间步长进行采样和应用输入
or(ubsignedlongstep=0;;step++){constfmi2Realtime=settings->startTime+step*settings->outputInterval;... CALL(FMISample(S,time,result)); CALL(FMIApplyInput(S,input,time,true,true,false)); ...... constFMIStatusdoStepStatus=FMI2DoStep(S,time,settings->outputInterval,fmiTrue); ...... CALL(FMIGetBooleanStatues(S,fmi2Terminated,&terminated)) ...... CALL(FMI2GetRealStatus(S,fmi2LastSuccessfulTime,&lastSuccessfulTime)); CALL(FMISample(S,lastSuccessfulTime,result)); ......
联合仿真算法作用
- 联合仿真算法不属于FMI标准的一部分,其作用主要是用于:
- 推进整个仿真系统的时间,使得各个子系统的FMU组件在每个时间步长上同步执行仿真计算,即代码中仿真循环的部分。
- 交换输入和输出数据。
- 触发时钟信号,用于同步不同仿真组件或触发某些操作,即代码中。
settings->startTime+step*settings->outputInterval;FMI2DoStep(S,time,settings->outputInterval,fmiTrue);
- 处理事件,例如状态变化、外部输入、内部条件触发等,即代码中。
CALL(FMI2GetRealStatus(S,fmi2LastSuccessfulTime,&lastSuccessfulTime));CALL(FMISample(S,lastSuccessfulTime,result));
四、模型描述文件是并行的
模型描述文件modelDescription.xml包含了关于FMU所有的静态信息,其定义了FMU支持的接口类型,无论是模型交换或是联合仿真,同时解释了模型变量,包括了输入、输出以及相关参数,以便导入工具进行访问。
除此之外也会包含模型接口的一些信息,比如模型连接时数据是符合输入输出的。
并且在模型描述文件中还会声明一些属性标志,比如“needsExcutionTool”,这一属性表示需要特定的程序或是特定的库文件才能够执行FMU,所以在导入FMU时,在导入工具中需要一个额外的包装Wrapper,并不真正的参与计算,而是用来实现模型、求解工具和执行之间进行通信。
作者介绍
崔工
康谋科技仿真测试业务技术主管,拥有超过5年的汽车仿真测试及自动驾驶技术研发经验,熟练掌握仿真测试工具和平台,如aiSim、HEEX等,能有效评估和优化自动驾驶系统的性能和安全性。拥有出色的跨文化沟通能力,成功带领团队完成多项海外技术合作项目,加速了公司在自动驾驶技术上的国际化进程。作为技术团队的核心,领导并实施过大规模的自动驾驶仿真测试项目,对于车辆行为建模、环境模拟以及故障诊断具有独到见解。擅长运用大数据分析和人工智能技术,优化仿真测试流程,提高测试效率和结果的准确性。
-
联合仿真
+关注
关注
0文章
5浏览量
8336 -
自动驾驶
+关注
关注
784文章
13826浏览量
166493
发布评论请先 登录
相关推荐
评论