Python的软件包PyFMI支持加载和执行FMU,与Assimulo和Scipy结合用于执行参数估计。

python调用fmu文件

  • 安装pyfmi
  • 利用OpenModelica创建模型并导出fmu文件
  • 在python里加载并执行fmu文件

安装pyfmi

在anaconda里安装pyfmi

conda install -c conda-forge pyfmi

利用OpenModelica创建模型并导出fmu文件

用OpenModelica创建了一个简单的物理模型:

model NewtonCoolingparameter Real T_inf=25"ambient temperature";parameter Real T0=90"initial temperature";parameter Real h=0.7 "convective cooling coefficient";parameter Real A=1.0 "surface area";parameter Real m=0.1 "Mass of thermal capacitance";parameter Real c_p=1.2 "specific heat";Real T;
initial equationT = T0;
equationm * c_p * der(T) = h * A * (T_inf - T);
end NewtonCooling;

在python里加载并执行fmu文件

from pyfmi import load_fmu
model = load_fmu('NewtonCooling.fmu')

获取model的所有参数;如果取特定的参数则可以输入(Real:0, Int:1, Bool:2, String:3, Enumeration:4)

model.get_model_variables()
#输出如下
#OrderedDict([('T', <pyfmi.fmi.ScalarVariable2 at 0x2a4e74355e8>),
#             ('der(T)', <pyfmi.fmi.ScalarVariable2 at 0x2a4e7435708>),
#             ('A', <pyfmi.fmi.ScalarVariable2 at 0x2a4e7435768>),
#             ('T0', <pyfmi.fmi.ScalarVariable2 at 0x2a4e74357c8>),
#             ('T_inf', <pyfmi.fmi.ScalarVariable2 at 0x2a4e7435828>),
#             ('c_p', <pyfmi.fmi.ScalarVariable2 at 0x2a4e7435888>),
#             ('h', <pyfmi.fmi.ScalarVariable2 at 0x2a4e74358e8>),
#             ('m', <pyfmi.fmi.ScalarVariable2 at 0x2a4e7435948>)])

设置数值

#设置数值
model.set_real([3], [200])
#或者
model.set('A', 0.1)

模拟

res = model.simulate(start_time=0, final_time=10)
#输出如下
#Final Run Statistics: --- # Number of steps                                 : 507
# Number of function evaluations                  : 515
# Number of Jacobian evaluations                  : 9
# Number of function eval. due to Jacobian eval.  : 0
# Number of error test failures                   : 1
# Number of nonlinear iterations                  : 512
# Number of nonlinear convergence failures        : 0
# Number of state function evaluations            : 0
#
#Solver options:# Solver                   : CVode
# Linear multistep method  : BDF
# Nonlinear solver         : Newton
# Linear solver type       : DENSE
# Maximal order            : 5
# Tolerances (absolute)    : 1e-08
# Tolerances (relative)    : 1e-06#Simulation interval    : 0.0 - 10.0 seconds.
#Elapsed simulation time: 0.017241800000000085 seconds.

获取运行结果

model.get('c_p')
#1.2
model.get_real([0, 1, 2, 3, 4, 5, 6, 7])
#array([ 2.55124535e+01, -2.98931187e-01,  1.00000000e-01,  2.00000000e+02,
#        2.50000000e+01,  1.20000000e+00,  7.00000000e-01,  1.00000000e-01])
res.final('T')
#25.512453462694374

作图

import pandas as pd
import cufflinks as cf
cf.set_config_file(offline=True)df_T = pd.DataFrame({"T" : res["T"]}, index=res["time"])
df_T.iplot()

python调用fmu相关推荐

  1. 提供一个python和pyfmi编写的实时调用fmu模型运行的代码案例

    这是一个使用 pyfmi 模块实时调用 FMU 模型的示例代码: import pyfmi# Load the FMU fmu = pyfmi.load_fmu('MyModel.fmu')# Cre ...

  2. python 图表_Python入门学习系列——使用Python调用Web API实现图表统计

    使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...

  3. python调用cmd命令会弹出黑框_python 调用cmd,不显示cmd黑框

    python 调用系统命令的方式有很多 1.1   os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准 ...

  4. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  5. python 调用 javascript函数

    python 调用 javascript函数 # pip install pyexecjs import execjs # 直接执行 print('execjs.eval:', execjs.eval ...

  6. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call

    python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...

  7. Windows使用MSVC,命令行编译,链接64位dll,Python调用

    文章目录 代码 编译 链接 Python调用 前一篇博客: Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序 代码 mylib.h代码如下: #ifndef MY ...

  8. python调用脚本或shell的方式

    python调用脚本或shell有下面三种方式: os.system() 特点: (1)可以调用脚本. (2)可以判断是否正确执行. (3)满足不了标准输出 && 错误 command ...

  9. python 调用 c 生成数组_python调用c++传递数组的实例

    如下所示: input = c_int * 4 # 实例化一个长度为2的整型数组 input = input() # 为数组赋值(input这个数组是不支持迭代的) input[0] = 11 inp ...

最新文章

  1. 《ABAQUS 6.14超级学习手册》——1.2 ABAQUS分析模块
  2. 人工智能产业发展深度报告:格局、潜力与展望
  3. 为什么要继承Serializable类?
  4. 前后端分离项目后端向前端返回压缩包的方法实现java版
  5. Jerry 的 SAP 技术交流群里讨论的技术问题都会同步到这个帖子里
  6. docker常用命令_docker常用命令整理
  7. oracle 赋予dorp,oracle表空间(tablespace)的增删改查(create/drop/rename,move/select)
  8. C++ 点(.)操作符和箭头(->)操作符
  9. 基于CCII+的电流模式二阶带通滤波器仿真
  10. scrapy 官方文档(入门必备)
  11. 树莓派第一次使用WIN10电脑远程连接(无显示器)
  12. 关于 nor it's doXxx() equivalent is defined in action class 的问题解决办法
  13. 深度学习图像数据库总结(收藏用)
  14. 讯飞星火 VS 文心一言:谁是中文大语言模型的TOP1?
  15. 【后端教程】京东API网关实践之路!
  16. 《Composing Programs》学习笔记(1.1)开始(关键词:软件工程/抽象/函数)
  17. 消防设备电源监控系统在高层民用建筑内的应用
  18. 新版导航条stacknavigator
  19. 【框架学习】XML四种解析方案
  20. Windows以服务方式运行Java程序

热门文章

  1. 10.3国庆作业(UART实验)
  2. 开启定位权限还是定位失败
  3. input标签checkbox选中触发事件的方法
  4. pdf转txt java_pdf转换txt怎么操作?pdf文件可以转换成txt文件吗?
  5. 你想要的宏基因组-微生物组知识全在这(2020.02)
  6. xshell6 强制更新的问题(转载、亲测有效)
  7. 国内oschina Maven公共仓库
  8. 学习Oracle Applications 相关文档
  9. 九龙证券|次新股叠加智慧交通+信创+数字经济概念,开盘冲涨停!
  10. python读取word图片_python 如何提取 word 内的图片