一个轻量级框架,它支持将Python3.x代码打包为cosimulation fmu。
pythonfmu的Python项目详细描述
Python
A lightweight framework that enables the packaging of Python 3 code or CSV files as co-simulation FMUs (following FMI version 2.0).
如何从python代码构建FMU?
- 安装
pythonfmu
包:
pip install pythonfmu
- 创建一个扩展在
pythonfmu.fmi2slave
模块中声明的Fmi2Slave
类的新类(参见下面的示例)。在 - 运行
pythonfmu build
创建fmu。在
如何从具有第三方依赖关系的python代码构建FMU?
Python脚本通常依赖于非内置库,如numpy
、scipy
等。
^{emu}FMU中没有完整的包。
但是,您可以按照以下步骤在FMU中打包requirements.txt
或environment.yml
文件:
- 安装pythonfmu包:
pip install pythonfmu
- 创建一个扩展在
pythonfmu.fmi2slave
模块中声明的Fmi2Slave
类的新类(参见下面的示例)。在 - 创建一个
requirements.txt
文件(使用pip管理器)和/或environment.yml
文件(使用conda管理器)。在 - 运行
pythonfmu build -f myscript.py requirements.txt
创建包含依赖项文件的fmu。在
使用pythonfmu deploy
,最终用户将能够更新他们的本地Python环境。实现这一目标的步骤:
- 安装pythonfmu包:
pip install pythonfmu
- 请确保处于要更新的Python环境中。然后执行
pythonfmu deploy -f my.fmu
usage: pythonfmu deploy [-h] -f FMU [-e ENVIRONMENT] [{pip,conda}]
Deploy a Python FMU. The command will look in the `resources` folder for one of the following files:
`requirements.txt` or `environment.yml`. If you specify a environment file but no package manager, `conda` will be selected for `.yaml` and `.yml` otherwise `pip` will be used. The tool assume the Python environment in which the FMU should be executed is the current one.
positional arguments:
{pip,conda} Python packages manager
optional arguments:
-h, --help show this help message and exit
-f FMU, --file FMU Path to the Python FMU.
-e ENVIRONMENT, --env ENVIRONMENT
Requirements or environment file.
示例:
编写脚本
frompythonfmuimportFmi2Causality,Fmi2Slave,Boolean,Integer,Real,StringclassPythonSlave(Fmi2Slave):author="John Doe"description="A simple description"def__init__(self,**kwargs):super().__init__(**kwargs)self.intOut=1self.realOut=3.0self.booleanVariable=Trueself.stringVariable="Hello World!"self.register_variable(Integer("intOut",causality=Fmi2Causality.output))self.register_variable(Real("realOut",causality=Fmi2Causality.output))self.register_variable(Boolean("booleanVariable",causality=Fmi2Causality.local))self.register_variable(String("stringVariable",causality=Fmi2Causality.local))defdo_step(self,current_time,step_size):returnTrue
创建FMU
pythonfmu build -f pythonslave.py myproject
在这个例子中,一个名为PythonSlave
的python类扩展了Fmi2Slave
,它在一个名为pythonslave.py
的文件中声明,
其中myproject
是一个可选文件夹,其中包含python脚本所需的其他项目文件。
这样的项目文件夹将递归地复制到FMU中。可以添加多个项目文件/文件夹。在
在线测试
注
PythonFMU没有捆绑Python,这使得它成为一个工具耦合解决方案。 这意味着您不能期望生成的FMU在不同的系统上工作(该系统需要兼容的Python版本和库)。 Python的二进制文件的使用是有限的,但是它的二进制文件的使用限制了Windows的使用 兼容任何python3环境。如果需要为特定配置编译包装器, 您需要CGED和C++编译器。在Linux和Windows上构建包装器的命令可以在中看到 GitHub workflow。在
PythonFMU不会自动解析第三方依赖关系。如果您的代码包括numpy
,那么目标系统也需要安装numpy
。在
您愿意用Java构建fmu吗?退房FMI4j!
需要分发你的FMU吗?FMU-proxy救人!在
学分
这项工作之所以能够实现,是因为来自NTNU-IHB的@markaren和来自Safran SA的@fcollonval的贡献。在
- 项目
标签: