2016-08-24 26 views
1

シミュレーション中に外部ライブラリ* .aファイルを使用してcコードを参照するModelicaファイルがあります。例えばJModelicaで外部ファイルを参照する

:OpenModelicaにModelicaモデルを開くと

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; 

必要なファイルは、それが適切な結果をシミュレートしていますので、自動的にロードされているように見えます。

しかし、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)を使用していたときにファイルが正常にコンパイルされていることであるが、結果は意味がありませんでした。以前の投稿hereで私のエラーを修正したかどうかを確認するSDKバージョンを試してみることをお勧めしました。

external "C" annotation(Include=" 
// the entire C code here 
"); 

がうまくいけば、JModelicaの人々はすぐにあなたのより良い答えを与える:あなたはModelicaコードで直接Cファイルをインクルードしようとすることができ、最後の代替として

答えて

2

外部ライブラリを現在ご使用のプラットフォームのサブフォルダに配置してみてください。あなたの例では、私は64ビットLinuxマシン上にあるので、ライブラリ(libCAdd.a)をlinux64という名前のサブフォルダに配置し、コードを実行します。

+0

こんにちはクリスチャンアンダーソン、問題を修正したようです。どうもありがとうございました! –

2

Cコードの小片がある場合は、。 http://www.jmodelica.org/forum

+0

ご返信ありがとうございます。私はそれを試してみましょう。私が過去にModelicaファイルに直接Cコードを入れようとしたところ、 "関数への未定義参照"のようなエラーが発生しました。つまり、モデルがインスタンス化されると、その関数は失われます。参考:https://www.dropbox.com/s/lrz2sy0yics80w5/CallDirect.mo?dl=0 –

+0

私はそれを理解したようです。私はCの関数名はModelica関数名の名前と一致する必要があると信じて、それは正しいですか? CとModelicaの間で作業するときに従うべき構文がありますか?私は限られた情報を見つけましたか? Xogenyの本(http://book.xogeny.com/behavior/functions/external/)とこの相互運用性のポスト(https://www.openmodelica.org/doc/OpenModelicaUsersGuide/latest/interop_c_python.html)は最高でしたこれまで私が見つけたリソース。しかし、デバッグはしばしばより深い情報を必要とする。あなたの時間をありがとう。 –

関連する問題