Dymola 2014 を使用した協調シミュレーション用の FMU として Modelica モデルをエクスポートしたいと考えています。pyfmi を使用して協調シミュレーションを完了する予定です。
これをテストするために、2 つの流体境界の間のパイプを通る流体の流れをモデル化しようとしています。流体源の圧力をモデルへの入力にしたいと思います。私の計画は、この圧力を外部で計算し、各タイムステップで Modelica モデルに入力することです。
すべての標準ライブラリ コンポーネントを含む私の初期モデルは次のとおりです。
model SE_BVP "BVP for stack exchange."
inner Modelica.Fluid.System system;
Modelica.Fluid.Pipes.StaticPipe pipe(
redeclare package Medium = Modelica.Media.Air.MoistAir,
length=1,
diameter=1);
Modelica.Fluid.Sources.Boundary_pT boundary1(nPorts=1, redeclare package
Medium = Modelica.Media.Air.MoistAir);
Modelica.Fluid.Sources.Boundary_pT boundary(nPorts=1, redeclare package Medium=
Modelica.Media.Air.MoistAir, use_p_in=true);
Modelica.Blocks.Interfaces.RealInput p_in1;
equation
connect(pipe.port_b, boundary1.ports[1]);
connect(boundary.ports[1], pipe.port_a);
connect(boundary.p_in, p_in1);
end SE_BVP;
次に、2 つのテスト モデルでラップします。
model SE_BVP_test_1
Real preVal = 101335;
SE_BVP SE_BVP_1;
equation
SE_BVP_1.p_in1 = preVal;
end SE_BVP_test_1;
@Thierryの提案に基づいて行われたパラメータタイプ
model SE_BVP_test_2
parameter Real preVal = 101335;
SE_BVP SE_BVP_1;
equation
SE_BVP_1.p_in1 = preVal;
end SE_BVP_test_2;
これらのモデルを実行すると、同じ結果が得られます。
と
どちらのモデルも Dymola 内で動作しています。
ここで、fmu をロードして pyfmi を使用してシミュレートしたいので、次のスクリプトを作成しました。
import pyfmi
import numpy as np
import pylab as P
import os
# Define the FMU to test
fmuDirNam = "SE_BVP_Test_1" # CS 2.0 type FMU
fmuNam = fmuDirNam + ".fmu"
# Define the input var
inVar = "preVal"
# Get the path to the FMU
curr_dir = os.path.dirname(os.path.abspath(__file__))
par_dir = os.path.dirname(curr_dir)
path_to_fmu = os.path.join(par_dir, "projectFMUs", fmuDirNam)
# Load the model
model = pyfmi.load_fmu(os.path.join(path_to_fmu, fmuNam))
これは失敗し、次のエラーが表示されます。
FMIL: module = FMI2XML, log level = 2: XML element
'Real': could not parse value for real attribute
'start'='pipMod.pipe.flowModel.states[1].p/(gasConstant_Unique7(
Modelica.Media.Air.MoistAir.ThermodynamicState(
p =
FMIL: module = FMI2XML, log level = 2: XML element
'Real': could not parse value for real attribute
'start'='pipMod.pipe.flowModel.states[2].p/(gasConstant_Unique7(
Modelica.Media.Air.MoistAir.ThermodynamicState(
p =
FMIL: module = FMI2XML, log level = 2: XML element
'Real': could not parse value for real attribute
'start'='Modelica.Media.Incompressible.TableBased.Polynomials_Temp.evaluate({-4.96717436974791E-11, 5.06626785714286E-08, 1.72937731092437
FMIL: module = FMI2XML, log level = 2: XML element 'Real': could not parse value for real attribute
'start'='Modelica.Media.Incompressible.TableBased.Polynomials_Temp.evaluate({-4.96717436974791E-11, 5.06626785714286E-08, 1.72937731092437
FMIL: module = FMI2XML, log level = 1: No model structure information available.
Cannot continue.
FMIL: module = FMI2XML, log level = 1: Parse error at line 2703:
parsing aborted
トレースバックから:
pyfmi.fmi.FMUException: The XML-could not be read. Parse error at line 2703:
parsing aborted
モデルが Dymola 内で正しくシミュレートされている場合、この解析エラーの原因は何ですか?
CS 1.0エクスポートでもこれを試してみましたが、今回は別のモジュールがfmuを読み取っていますが、同じ例外が発生しました。
input
とタグの両方を削除するとparameter
、謎の変数の問題が発生したと考えましたが、そうではありません。parameter
のようなタグを使用してもTest_2
、同じ例外 (CS 2.0) が発生します。
概要: Dymola 2014、python 2.7.x、FMI for CO-simulation 2.0