本案例演示了采用Flomster和Matlab联合仿真的方式,研究一个简单的泵网络,在该网络中我们控制泵的速度,并使用联合模拟边界输出质量流量。
孔子曰:“三人行,则必有我师!”本案例短文是基于本作者知识范围所撰写,意在抛砖引玉。大家如果还有更好的方法或者对本文存在疑问的地方,欢迎在文章末尾留言!
“Functional Mockup Interface (FMI)是一个独立于标准的工具,它支持模型交换和使用xml文件和编译后C代码的动态模型的联合仿真。该项目由戴姆勒公司(Daimler AG)发起,旨在改善供应商和原始设备制造商之间的仿真模型交换。这允许OEM使用来自每个供应商的系统的离散包,供应商可以有效地保护他们的IP。FMI支持超过108种工具,在欧洲、亚洲和北美的汽车和非汽车组织中都使用。
功能模型单元是一种与FMI标准兼容的模型,它是为模拟而创建的。它通常由一个ZIP文件组成,其中包含已编译的dll文件、资源和描述。这些可以配置为联合模拟或模型交换。
为了使仿真符合FMI,必须定义输入和输出块,这些块可以映射到主程序中相应的信号。这是通过使用一个特定的联合模拟边界实现的,它的功能就像网络中的控制器一样(图1).这些程序将输入信号传递给网络,并挑选出输出信号与主程序通信。
这些协同仿真边界可以在‘控制器→协同仿真边界’中找到。
本样本系统考虑了一个简单的泵网络,我们控制泵的速度,并从模拟中读取质量流量(图2)。两台泵从单个水箱抽取液体,每台泵的输出端都有一个止回阀。流体通过两根管道输送,管道之间有一个球阀。一个“FMU out”块位于球阀的输出端。
泵的转速通过FMI持续输入,流量数据持续输出,阀门和管道直径固定不变,为0.3m。
在FMI输入块,设置如下数据:
• Output Initial Value – 500 rpm
• Output Clipping Value (Minimum value) – 0 rpm
• Output Clipping Value (Maximum value) – 5000 rpm.
只需连接FMI输出块就会自动设置输出类型,所以这里不需要输入。
可以为两个FMU模块分配标题,以便在后续阶段识别输入和输出。这些可以通过“Identification→Title Field”设置。
要导出此模型。特别注意,导出fmu模型的名字一定不要用中文字符,建议采用全英文字符。否则会在simulation中引起报错。
识别出联合仿真边界及其各自的输入输出参数,如图红框所示。为了方便使用,可以使用任何最上面的字段进行过滤。
固定参数、连续输入参数的初始值将会被看到,在蓝色线框内,可以改变FMU的设置:
•与导出模型相关联的图像
•导出文件的位置。
点击“导出”,Simcenter Flomaster FMU将被创建,并准备导入到其他主程序中(matlab或amesim)。
本例中使用了MATLAB R2018a。
当FMU被导入到主程序时,所有的名字和信息都被带进来并贴上标签,连同伴随的图像。
所有标准FMI协议已到位:
•FMU调试日志级别(OK, Warning, Fatal)
•联合模拟时间步长选项。
首先打开MATLAB Simulink,创建一个空白模型。打开Simulink Library Browser。对于导入,“Simulink Extras→ FMU Import in the Simulink Library Browser→FMU Import Block”。使用对话框将导入块指向导出的FMU(图5)。建议将FMU复制到Simulink可以访问的目录中。
现在可以创建一个简单的Simulink网络来运行快速模拟(图6)。使用正弦源来测量泵的转速,并使用测量质量流量的范围。
正弦源使用的数据如下(图7):
在“参数”窗口下的FMU块中,可以设置相关的变量参数。在“FMU设置(联合仿真)”窗口下,可以添加时间步长(通信步长),以及所需的调试级别(图8)。
如果“通信步长”保持在-1,时间步长将默认为主程序设置的步长。但是,如果模拟是分析浪涌或快速瞬变事件,则不建议这样做。
Matlab内曲线图
Flomaster内曲线图
在Simcenter Flomaster中,一个FMU模型交换导出运行实验创建的响应面。导入的基于响应面的FMU,可以通过对表面数据的点和截面进行定位,快速获得结果。与单独重新运行不同的模拟相比,使用FMU Model Exchange运行一个实验并导出一个表面是非常节省时间的,在这种情况下,必须考虑许多可能的结果。表格控制器提供的输入信号可以用来为变量变化或模式行为建模,这样就可以生成输出结果的预期行为。这些输出结果可作为其他fmu的输入信号,使各fmu系统相互作用。