FMPy ライブラリの関数を使用して fmu からパラメータ、その単位、およびデフォルト値をフィルタリングして一覧表示read_model_description
し、Excel シートに書き込む Python スクリプトがあります (関連するディスカッション)。次に、simulate_fmu
関数を使用して、スクリプトは fmu をシミュレートし、結果を単位とともに Excel シートに書き込みます。
パラメータと出力変数をフィルタリングする際に、この行を使用してそれらの単位を取得します。
unit = variable.declaredType.unit if hasattr(variable.declaredType,'unit') else '-'
fmu と対話している間、パラメーターと変数の値はデフォルトの SI 単位になります。これはFMI基準によるものだと思います。ただし、modelDescription.xml
下<UnitDefinitions>
には、デフォルトのSI単位からdisplayUnitへの変換に関する情報があることがわかります。例えば:
<Unit
name="Pa">
<BaseUnit kg="1"
m="-1"
s="-2"/>
<DisplayUnit
name="bar"
factor="1E-05"/>
<DisplayUnit
name="ftH2O"
factor="0.0003345525633129686"/>
</Unit>
modelDescription.xml で変換係数が既に利用可能な場合、displayUnits でパラメーター値と出力変数を取得できる方法はありますか?
または、fmu のラッパーとして機能し、操作中に目的の単位系 (つまり SI から IP) の単位を変換できる pint のような Python ライブラリを使用する簡単なソリューションはありますか?