在 JModelica 中引用外部文件
Referencing External Files in JModelica
我有一个 Modelica 文件,该文件在仿真期间通过外部库 *.a 文件引用 c 代码。
例如:
model CallAdd
input Real FirstInput(start=0);
input Real SecondInput(start=0);
output Real FMUOutput(start=0);
function CAdd
input Real x(start=0);
input Real y(start=0);
output Real z(start=0);
external "C" annotation(Library = "CAdd", LibraryDirectory = "modelica://CallAdd");
end CAdd;
equation
FMUOutput = CAdd(FirstInput,SecondInput);
annotation(uses(Modelica(version = "3.2.1")));
end CallAdd;
在 OpenModelica 中打开 Modelica 模型时,所需的文件似乎会自动加载,因为它会模拟并给出适当的结果。
但是,当我尝试使用 JModelica-SDK-1.12 编译 Modelica 文件时,我收到一个错误,指出找不到库 *.a 文件。
所以我的问题是:在 JModelica 中使用 compile_fmu 时引用附加文件的正确方法是什么?
没有成功,我试过:
# Import the compiler function
from pymodelica import compile_fmu
model_name = "CallAdd"
mo_file = "CallAdd.mo"
# Compile the model and save the return argument, for use later if wanted
my_fmu = compile_fmu(model_name, mo_file, target="cs",compiler_options = {'extra_lib_dirs':'C:/ToFolderContainingLib/'})
奇怪的是,当我使用 JModelica-1.17(非 SDK)时,文件编译正常,但结果没有意义。我被推荐尝试 SDK 版本,看看它是否修复了我之前 post here.
中的错误
如果是一小段 C 代码,作为最后的选择,您可以尝试将 C 文件直接包含在 Modelica 代码中:
external "C" annotation(Include="
// the entire C code here
");
希望JModelica 的人尽快给你一个更好的答案。
您也可以尝试在他们的网站上询问:
http://www.jmodelica.org/forum
尝试将外部库放在以您当前所在平台命名的子文件夹中。因此,在您的示例中,我将库 (libCAdd.a) 放在名为 linux64 的子文件夹中,因为我在 64 位 Linux 机器上,然后 运行 代码。
我有一个 Modelica 文件,该文件在仿真期间通过外部库 *.a 文件引用 c 代码。
例如:
model CallAdd
input Real FirstInput(start=0);
input Real SecondInput(start=0);
output Real FMUOutput(start=0);
function CAdd
input Real x(start=0);
input Real y(start=0);
output Real z(start=0);
external "C" annotation(Library = "CAdd", LibraryDirectory = "modelica://CallAdd");
end CAdd;
equation
FMUOutput = CAdd(FirstInput,SecondInput);
annotation(uses(Modelica(version = "3.2.1")));
end CallAdd;
在 OpenModelica 中打开 Modelica 模型时,所需的文件似乎会自动加载,因为它会模拟并给出适当的结果。
但是,当我尝试使用 JModelica-SDK-1.12 编译 Modelica 文件时,我收到一个错误,指出找不到库 *.a 文件。
所以我的问题是:在 JModelica 中使用 compile_fmu 时引用附加文件的正确方法是什么?
没有成功,我试过:
# Import the compiler function
from pymodelica import compile_fmu
model_name = "CallAdd"
mo_file = "CallAdd.mo"
# Compile the model and save the return argument, for use later if wanted
my_fmu = compile_fmu(model_name, mo_file, target="cs",compiler_options = {'extra_lib_dirs':'C:/ToFolderContainingLib/'})
奇怪的是,当我使用 JModelica-1.17(非 SDK)时,文件编译正常,但结果没有意义。我被推荐尝试 SDK 版本,看看它是否修复了我之前 post here.
中的错误如果是一小段 C 代码,作为最后的选择,您可以尝试将 C 文件直接包含在 Modelica 代码中:
external "C" annotation(Include="
// the entire C code here
");
希望JModelica 的人尽快给你一个更好的答案。 您也可以尝试在他们的网站上询问: http://www.jmodelica.org/forum
尝试将外部库放在以您当前所在平台命名的子文件夹中。因此,在您的示例中,我将库 (libCAdd.a) 放在名为 linux64 的子文件夹中,因为我在 64 位 Linux 机器上,然后 运行 代码。