通过PyFMI读取FMU文件及PyFMI的安装教程

通过PyFMI读取FMU文件及PyFMI的安装教程

一、fmu/fmi介绍

用于支持动态模型的交互以及联合仿真,解决模型相互操作问题

a)FMI

功能打样接口(functional Mock-up Interface)是一个工具独立的标准,通过xml文件与编译的c代码的融合来支持动态模型的交互和联合调试。

FMI的描述结构

b)FMU

FMU是一个压缩文件,包含了xml格式接口数据描述和功能,FMU就是采用FMI接口而开发的软件组织

fmu文件在解压后如下图:

fmu解压后截图

在文件夹中包含三个binaries、resources、sources三个文件夹,以及一个xml文件和一个.log文件。

二、使用PyFMI对fmu的读取

from pyfmi import load_fmu
import pandas as pd
import cufflinks as cf
import matplotlib.pyplot as plt

# 通过pyfmi读取fmu对象,将fmu文件放置于统一目录下
model = load_fmu('NewtonCooling.fmu')
# 获取模型中的变量,并打印出来
model.get_model_variables()
# 将模型中的第三个值设置为200,也可以使用 model.set('A', 0.1) 的方式来设置变量的值,其中'A'是变量名
model.set_real([3], [200])
# 对模型进行仿真,同时设置了仿真开始时间和结束时间
res = model.simulate(start_time=0, final_time=10)
# 获取变量c_p的值并打印
print(model.get('c_p'))
print(model.get_real([0, 1, 2, 3, 4, 5, 6, 7]))
print(res.final('T'))
# 结果图形的绘制
df_T = pd.DataFrame({"T": res["T"]}, index=res["time"])
print(df_T)
df_T.plot()
plt.show()

程序运行后的结果如下:

程序运行控制台输出 程序运行图形绘制

三、PyFMI包的安装教程

python的安装教程就不赘述了,在命令行中可以使用python命令就没有问题。

然后是安装PyFMI包的教程。

我在安装的过程中发现直接使用pip进行安装pyfmi包是不可取的,会弹出缺少很多东西,目前也没有成功使用pip安装这个包。

我使用的方法是通过anaconda安装pyfmi,首先是安装anaconda,记得中间选择配置进path,这样可以使用系统的cmd调用anaconda的命令。当然也可以不配置进入path,这样只能使用anaconda带的命令行进行命令的输入。

然后就是安装pyfmi了,在anaconda中输入conda install -c conda-forge pyfmi就可以完成安装了。

然后就是在pycharm中配置anaconda

a)第一步

选择新建项目,然后选择Pure Python

第一步

其中location是项目的保存地址,自行选择就可以

然后第二个红框内选择Previously configured interpreter,然后 点击后面的三点

b)第二步

选择Conda Environment,在conda中点击小三点

第二步1 第二步2

选择anaconda安装根目录下的python.exe,不要选错文件夹,这时候第二个文件夹选项中的路径应该为anaconda根目录\Scripts\conda.exe

然后点击ok,可以完成创建了。

ps

在项目如果用到什么包提示不存在,建议是在pycharm中使用pip进行安装第三方库,若该方法不成功,可以使用其他安装方法进行尝试。

### 实现 FMU 文件导入功能 为了在 PyQt5 应用程序中实现 FMU (Functional Mock-up Unit) 文件的导入,可以利用 `pyfmi` 或者 `fmipp` 等库来处理 FMU 文件。下面是一个简单的例子展示如何构建一个基本界面并集成 FMU 导入功能。 #### 安装依赖项 首先安装必要的 Python 包: ```bash pip install pyqt5 pyfmi ``` #### 创建主窗口类 定义一个继承自 `QMainWindow` 的类作为应用程序的主要部分: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDialog, QTextEdit from PyQt5.QtCore import Qt from pyfmi import load_fmu class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("FMU Importer with PyQt5") layout = QVBoxLayout() # 添加按钮用于触发文件对话框打开事件 btn_open_file = QPushButton('Open FMU File') btn_open_file.clicked.connect(self.open_fmu) # 文本区域显示状态信息或其他日志消息 self.text_area = QTextEdit() self.text_area.setReadOnly(True) layout.addWidget(btn_open_file) layout.addWidget(self.text_area) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) def open_fmu(self): options = QFileDialog.Options() file_name, _ = QFileDialog.getOpenFileName( None, "Select an FMU file", "", "FMU Files (*.fmu);;All Files (*)", options=options ) if not file_name: return try: model = load_fmu(file_name) message = f'Successfully loaded {file_name}' status = 'success' # 可在此处继续添加模型加载后的逻辑 except Exception as e: message = str(e) status = 'error' finally: self.update_status(message, status=status) def update_status(self, msg, *, status='info'): color_map = { 'info': '#007bff', 'warning': '#ffc107', 'error': '#dc3545', 'success': '#28a745' } style_sheet = f'color: white; background-color: {color_map[status]}; padding: 5px;' formatted_msg = f'<p style="{style_sheet}">{msg}</p>' self.text_area.append(formatted_msg) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 此代码片段展示了怎样通过点击按钮弹出文件选择对话框让用户挑选 .fmu 文件,并尝试使用 `pyfmi.load_fmu()` 函数读取所选文件的内容[^1]。如果成功,则会在界面上给出相应的提示;如果有任何异常发生也会被捕获并向用户反馈错误详情。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值