Openfast: openfast S-Functionmexに依存するSimulinkモデルを実行すると問題が発生します

作成日 2020年09月22日  ·  80コメント  ·  ソース: OpenFAST/openfast

皆さんこんにちは、

Simulinkモデルに特定の変数を持つ他の.mを実行した後、Simulinkモデルを実行しようとしています。 何度か試みた後、クラッシュせずにそれを実行する方法を見つけることができません。

私のマシンの特性は、添付するファイル「Issue 1」にあり、クラッシュはIssue 1および2にあります。.mおよびsimulinkモデルを参照するファイルを含め、すべてのOpenFASTファイルはC:/にあり、実行する必要があります。シミュレーションを適切に。 さらに、より多くの追加情報を提供するために、すべてのOpenFASTファイルはMatlabパスにあります。

Issue1.txt
Issue2.txt

機密の問題については、Simulinkモデルを添付することはできませんが、大学での最終プロジェクトを実行することができないため、助けていただければ幸いです。

宜しくお願いします、

ホアキン

MATLAB Usage question

最も参考になるコメント

さて、私は問題が何であるかを理解していると思います。

<openfast>\modules\openfast-library\src\FAST_Library.hを開く場合は、 CHANNEL_LENGTHの定義を10から20に変更します。

#define CHANNEL_LENGTH 20

次に、 create_FAST_SFunc.mファイルを再実行して、再試行してください。

この修正を含むプルリクエストをOpenFASTに受け取ります。

全てのコメント80件

トレースバックスタックに少し混乱しています。 問題はルーチンFAST_OpFM_Init発生しているように見えますが、OpenFAST-Simulinkインターフェイスがそのルーチンに含まれる理由がわかりません。 私の知る限り、そのルーチンは、CFDコード(Simulinkではなく)を使用したOpenFASTのインターフェイスでのみ呼び出す必要があります。

  1. どのバージョンのOpenFASTを使用していますか?
  2. mexライブラリとOpenFAST-SimulinkDLLを構築しましたか(もしそうなら、どのように?)、またはプリコンパイルされたバイナリを使用していますか?
  3. ビルドする前に、ソースコードを変更したり、スクリプトをビルドしたりしましたか?
  4. サンプルのOpenFASTSimulinkモデルはクラッシュせずに実行されますか?

1-どうすればわかるかわかりませんが、1.0.0を使用していると思います
2-はい私はmexライブラリを構築しました。 まず、Visual Studio 2015を使用し、ファイルSimulink-OpenfastをオプションRelease_Matlabおよびx64オプションを使用してコンパイルします。 結果のファイルの名前はOpenFAST-Simulink_x64(イメージを添付します)で、build / binにあります。
速い解決策を得るために、私も同じプログラムを使用します。
Captura

3- mexファイルには触れず、ワークスペースに変数をロードするために.mを変更するだけで、simulinkモデルを実行した後(どちらも事前に決定されたモデルと同じ場所にあります[C:UsersCASADocumentscodeopenfastglue-codessimulinkexamples、および。ビルド/ビンでS関数を生成するmは、..... openfastglue-codessimulinksrc])にあります。
4-いいえ、そうではありません

  1. 実際にv1.0.0を使用している場合は、必ず最新バージョンのOpenFAST(マスターブランチ)にアップグレードする必要があります。 ただし、v1.0.0にRelease_Matlabオプションがあるとしたら驚きますので、別のバージョンだと思います。 <openfast>\vs-build\gitVersionInfo.hというファイルでバージョン番号を確認できるはずです。 または、OpenFASTを実行すると、画面に印刷されたことがわかります。

  2. あなたが説明しているのは、 OpenFAST_Simulink_x64.DLLファイルを作成することです。 mexファイルは通常、 openfast\glue-codes\simulink\src\create_FAST_SFunc.mを使用して作成されます。 これも作りましたか? システム上でFAST_SFunc.mex64を作成する必要があります。 スクリーンショットのFAST_SFuncの変更日を考えると、これもビルドしたと思いますが、別のOpenFASTビルドからのものではないことを再確認しています。

特定のSimulinkモデルで何が起こっているかをデバッグする前に、サンプルのOpenLoopモデルをOpenFASTr-testケースの1つで動作させるようにします。 そうすれば、あなたがしていることのすべての詳細を共有することができます。

OpenFAST-Simulink_x64.DLLビルドするときに使用したのと同じコンパイラでFAST_SFuncをビルドしたことを確認してください(つまり、Matlabでmex -setupを実行し、Visual Studio C / C ++とIntelFortranを使用するようにします)。

こんにちは@bjonkman

  1. バージョン情報をお詫びします。確認しました。V2.3.0です--->#define GIT_VERSION_INFO'v2.3.0-548-g43191a90 '

2-はい、create_FAST_SFunc.mを実行し、build / binでFAST_SFunc.mex64を取得します。

私が行ったすべての手順を示すために、いくつかのスクリーンショットを添付します。

まず、mex -setupを実行して、同じコンパイラを使用していることを確認します--- Visual Studio2015。これは正しいです。
次のステップは、create_FAST_SFunc.mを実行してS-Functionを生成することで、FAST_SFunc.mex64を取得します。
Photo1

次のステップはRun_OpenLoop.mを実行することです:
Error
このステップでMatlabに問題があり、その瞬間に閉じる必要があることがわかります。

宜しくお願いします、

ホアキン

これはおそらくOpenFAST-Simulink_x64.DLLファイルの問題を示していると思います。 コードは、クラッシュする前にMatlabコマンドウィンドウに何か他のものを出力しましたか? (実行時間内に何かが出力されるかどうかはわかりません。)前述したように、表示されるトレースバックは、このビルドで呼び出すべきではないルーチン内にあることを示しています。 そのDLLをどのように構築したかを教えていただけますか?

いいえ、コードにはそれ以外は何も表示されませんでした。
.dllファイルを取得するプロセスは次のとおりです。

1-高速ソリューション(release_x64 double)を実行します。 テストと私が熱心に取り組んでいるテストを実行するためにPythonを使用した後、OKに合格します。

2-次のステップでは、Openfast Simulinkの統合を行うために、Visual Studio 2015を開き、OpenFAST-SimulinkというFortranファイルを実行し、properties-inputで、libmex.libを正しく狙うように変更します(デフォルトのパスは正しくありません) )。
3- OpenFAST-Simulink(Matlab x64をリリース)を実行し、FAST(Matlab x64をリリース)を実行した後、それがすべてでした

OpenFAST-Simulink

¿すべてのステップのスクリーンショットが必要ですか?

FAST.slnファイルを開いて、使用しているOpenFAST-Simulink.slnファイルの代わりに、そのソリューションファイルからRelease_Matlab | x64してビルドできますか? そのオプションがない場合( FASTソリューションファイルにOpenFAST-Simulinkプロジェクトがある場合)、最新のOpenFASTマスターブランチを使用してビルドすることをお勧めします。

この構成でFAST.slnソリューションを構築し、これを取得しました。以下のスクリーンショットに示します。
FAST

マスターソリューションでビルドする方法がわかりません。 新しいFortranOpenfast-Simulinkのみをダウンロードする必要がありますか?

あなたが探している.dllを取得するために私が従う必要があるステップはどれですか? (あなたがそれを装うなら)

みなさん、こんにちは、

ディスカッションに参加できるかどうかわかりませんが、まったく同じ問題があります。

Intel Parallel Studio XE2020でVS2019コミュニティを使用しています。最近OpenFASTのマスターバージョンをダウンロードしたので、最後のバージョンが必要です。

さまざまな構成のFAST.slnソリューションを使用してDLLファイルをコンパイルします。

  1. 「Release_Double_x64」モードの場合:コンパイルはエラーなしで機能します。 次に、「create_FAST_Sfunc.m」==>でmexファイルを作成します。 「RUN_OpenLoop」ファイルを実行すると、添付のスクリーンショットを取得します。
    release_double64_mex

  2. 「Release_64」モードの場合:Simulinkシミュレーションに到達したときと同じ問題

  3. 「Release_Matlab_64」モードの場合(OpenFast-SimulinkおよびFASTlibプロジェクトの場合のみ):FAST VSソリューションをコンパイルできません(添付ファイルを参照)
    release_Matlab

@hbasbas :Visual StudioプロジェクトからOpenFAST-Simulink-x64.dllを生成する必要があるため、実際にはステップ3でバージョンをビルドするだけで済みます( create_FAST_SFunc.mファイルも実行する必要がある場合を除く)手順3)を完了した後。 DLLを作成する前にMatlabでFAST_SFuncを実行している場合は、Matlabパス上の別の場所からこのdllの別のバージョンを呼び出していると思います。 Matlabコマンドウィンドウでwhich OpenFAST-Simulink-x64.dllと入力すると、使用しているDLLへのフルパスが表示されます。

Release_Matlabの理由| x64構成(使用する必要があるもの)が構築されていないのは、プロジェクトが構成されたものとは異なるバージョンのMatlabを使用しているようです。 OpenFAST-Simulinkプロジェクトファイルの構成プロパティを開く必要があります(プロジェクトを右クリックし、 propertiesを選択して、リンカー入力行に移動します。を指すように変更する必要があります。使用しているMatlabのバージョン:
image

@ JoaquinPerCarr 、gitでマスターブランチを取得するには、マスターブランチをチェックアウトしてから、新しいコードをプルします。

MatlabパスにDLLの別のコピーがあり、混乱を引き起こしている可能性もあります。 Matlabコマンドウィンドウでwhich OpenFAST-Simulink_x64.dllを試して、正しいものを指しているかどうかを確認してください。

こんにちは@bjonkman

私はあなたが私に言ったことをしました。 最初にすべてのマスターopenfastファイルをダウンロードし、次に古いFortran OpenFAST-Simulinkを変更して、新しいファイルをコピーしました。 新しい.dllを取得するために、Release_Matlab_x64とOpenFAST-Simulink_Release_Matlab_x64を使用してFASTをビルドしました。

このディスカッションの最初の瞬間に説明したようなすべてのプロセスを繰り返しましたが、同じ結果が得られました。simulinkを実行するとMatlabがクラッシュします。 どのOpenFAST-Simulinkを使用する場合、スクリーンショットを添付します。
Pointer OpenFAST-Simulink

こんにちは、

@bjonkman :返信ありがとうございます。 あなたの推薦のおかげで、コンパイルは機能します。 パスの間に引用符を挿入することが重要であることを(他のユーザーに)正確に伝えたいと思います。 「プログラムファイル」のスペースが原因で、VSはオブジェクトファイルを見つけようとします。
ただし、Simulinkシミュレーションを実行すると、Matlabはクラッシュし続けます。

Capture_Matlab_crash

Matlabのバージョン、Visual Studio、およびIntel Parallel Studio XEがMatlabのクラッシュの原因である可能性はありますか?

@JoaquinPerCarr :「which」コマンドで、間違ったファイルを指定したようです:「_ x64」の代わりに「-x64」と記述します

それ以外の場合、openfast-masterバージョンのコンパイル済みファイル.mex64を共有することは可能ですか。 入力ファイル(.dat)を変更するだけですが、ソースコードは同じである必要があります。 さらに、私は問題を特定します:
それが機能しない場合、これは私が私のMatlabバージョンまたは他のものに問題があることを意味するはずです。 それが機能する場合、これはVisualStudioのコンパイルが適切に構成されていないことを意味します。

さて、私は問題が何であるかを理解していると思います。

<openfast>\modules\openfast-library\src\FAST_Library.hを開く場合は、 CHANNEL_LENGTHの定義を10から20に変更します。

#define CHANNEL_LENGTH 20

次に、 create_FAST_SFunc.mファイルを再実行して、再試行してください。

この修正を含むプルリクエストをOpenFASTに受け取ります。

どうもありがとうございました。 できます !

こんにちは@bjonkman

これを行うと、次のようになります。

Captura

Simulinkが開かず、他に何もしないことがわかります。

丸で囲んだ部分の下にあるエラーメッセージを読むと、OpenFASTが実行を要求した入力ファイルを見つけることができないことがわかります。 Run_OpenLoop.mは古いFAST(v8)CertTestケース用に設定されているため、入力ファイルの名前を変更する必要があります。 次のコードを実行して、OpenLoopモデルをテストしました。

addpath('C:\openfast\build\bin')
FAST_InputFileName = 'C:\openfast\build\reg_tests\glue-codes\openfast\5MW_Land_DLL_WTurb\5MW_Land_DLL_WTurb.fst';

TMax=30;

sim('OpenLoop.mdl',[0,TMax])

テスト25に熱心なので、次のコードを試しています。
Test25 = 'C:UsersCASADocumentscodeopenfastreg_testsr-testglue-codesopenfast5MW_OC4Semi_WSt_WavesWN5MW_OC4Semi_WSt_WavesWN.fst';

FAST_InputFileName = Test25;
disp(FAST_InputFileName)
TMax = 200;

sim( 'openloop.mdl'、[0、TMax]);

Results

Simulinkモデルが自動的に開かないことに気付き、その理由はわかりませんが、最初はうまく機能しているようです。

要約すると、私の最初の問題に関する唯一の問題は、.hファイルのコード行#define CHANNEL_LENGTH 20であったと思いますか?

どうもありがとうございました@bjonkman

sim()コマンドを使用してモデルを実行するときに、Simulinkがモデルを開く必要はないと思います。

.hファイルでのCHANNEL_LENGTHの誤った定義が、Matlabをシャットダウンさせた原因でした(そして、将来これを読んでいる人にとって、スタックトレースは正確ではありませんでした:実際にはFAST_OpFM_Initにはありません

それが唯一の問題であるということに関しては、そう願おう。 :)

私はさまざまなことをやっていて、マスターopenfast-Simulinkが必要だと思います

最初のSimulinkモデルを実行してみます。うまく機能するかどうかを説明します。

こんにちは@bjonkman

私が持っているOpenFASTのバージョン(dev / master)を確認するにはどうすればよいですか。 マスターバージョンに戻すためのフォームがあれば、それをしたいと思います。

それが不可能な場合、次のスクリーンショットに表示されるエラー(フラグ)を削除/修正するにはどうすればよいですか? CalcSteady、Twr_Kdmp、およびBld_Kdmpが主な問題です。

Errors

Additional code in dev

OpenFASTのドキュメントも表示されています。 エラーは、OpenFASTの開発バージョンを使用している可能性があると思います。 どうしたらいいのかわからない。

宜しくお願いします、

ホアキン。

親愛なる@JoaquinPerCarr

私はあなたの質問を本当に理解しているかどうかはわかりませんが、OpenFASTの古い開発バージョン(v2.3とv2.4の間のどこか)とv2.3と互換性のある入力ファイルを使用しているようです。 入力ファイル処理のエラーと同様に、Echoオプションを有効にして、入力ファイルのフォーマットの問題をデバッグできます。

とにかく、この開発バージョンのOpenFASTを使用する特別な理由がない限り、OpenFASTv2.4のマスターブランチにアップグレードすることをお勧めします。 v2.4と互換性のあるOpenFAST入力ファイルの例は、r-testのmasterブランチで提供されています。

宜しくお願いします、

@JoaquinPerCarr

通常、OpenFASTを実行すると、画面に印刷されたOpenFASTのバージョンを確認できます。 スクリーンショットから、 v2.3.0-548-g43191a90あることがわかります。 これは、それがgitハッシュ43191a90あり、タグ付きバージョン2.3.0の後に548コミットであることを意味します。

別のバージョンに切り替えるには、いくつかのgitコマンドを使用して、必要なブランチとコミットをチェックアウトできます。

あなたができる

git checkout v2.4.0

これはopenfastバージョン2.4.0をチェックアウトしますが、gitでヘッドが切り離された状態になります。

git checkout master
git pull

これにより、マスターブランチの最新バージョンが提供されます(マスターブランチがopenfastリポジトリを指していると仮定します)。 gitリポジトリの現在の状態は、ブランチなどを切り替える前にいくつかの変更を隠しておく必要があることを意味する場合があることに注意してください。

それ以外の場合は、使用しているOpenFASTのバージョンに関連付けられているr-testコミットのサンプルファイルを使用していることを確認してください。

みなさん、こんにちは、

S-Fuctionをコンパイルして、OpenLoopとTest01_SIGの例を実行できます。 現在、S-Fuctionの入力を拡張して、元の8に加えて追加の入力を有効にしようとしています。しかし、OpenFAST S-Functionには、FASTv8のようにNumAdditionalInputsを変更するオプションがありません。
どんな助けでもいただければ幸いです。

前もって感謝します。

FAST v8と最新のOpenFASTの間でNumAdditionalInputs機能を変更するようなことは何も知りません。 正確に何が機能していないのですか?

こんにちは@bjonkman

リプレイありがとうございます。
実際には、NumAdditionalInputsを変更して、S-Functionにブレード要素の質量をインポートします。これは5MWモデルでは11を超えています。 README_FAST8で読んだように、NumAdditionalInputsに許可されるエントリの最大数は11エントリを超えてはならないため、11を意味します。

grafik

ElastoDynでブレード要素の質量のデータ型をすでに変更しており、特定のシミュレーション内で質量を変更できました。 次に、SimulinkのElastoDynからブレード要素の質量をエクスポートするための追加のチャネルを生成します。 Simulinkで質量を変更し、S-Function、つまりElastoDynにインポートします。

_ElastoDynは、S-Functionからインポートされたブレード要素の質量を認識できますか?

_ElastoDynはSimulinkで行われた変更に気付くことができますか?

_S-Functionの原点8に加えて11以上の入力を入力することは可能ですか?

10を超える追加の入力をOpenFASTに送信する場合は FAST_Library.hFAST_Library.f90両方MAXInitINPUTSの値を変更し、MatlabS-FunctionとOpenFASTdll。 (SimulinkでMAXInitINPUTS+1を超える値を持つ配列を入力すると、セグメンテーション違反が発生する可能性があります)。

MAXInitINPUTSは、Simulinkから受け入れて、OpenFASTFortranコードに渡すことができる最大の配列を定義します。 OpenFASTは、指示がない限り、これらの追加の配列値に対して何も実行しないため、ElastoDynに値を渡したい場合は、コードに追加の変更を加える必要があります。

手始めに、 FAST_Library.f90 InitInpAryしてから、ElastoDynに情報を渡す必要があります。 何を変更する必要があるかについてのいくつかの指針については、NWTCフォーラムを参照することをお勧めします。

ただし、これらの追加の入力は、SimulinkのS-FunctionからOpenFASTに渡される値であることに注意してください。 WriteOutput配列(つまり、各OpenFASTモジュールで指定されたOutListチャネル)を使用していない限り、コードはSimulinkに値を渡すように特に設定されていません。

こんにちは@bjonkman

クイックリプレイとリンクをありがとうございます。
手始めとして、私は最初にS-Functionに1つの追加入力のみを渡そうとしました。 追加の入力としてローター速度( RotSpeed )を使用しました。これは、OutListParametersですでに使用されています。

  1. FAST_Library.f90サブルーチンFAST_SetExternalInputs()入力としてローター速度を設定します
    grafik

  2. C:.... OpenFASTvsからFASTlibを再構築します-buildFASTlibFASTlib.sln

grafik

  1. 1つの追加入力でOpenLoopを実行します
    grafik

  2. Matlab / Simulinkでシミュレーションがクラッシュしました
    grafik
    FAST_Library.f90 subroutine FAST_Start ()で、3つの追加入力のみが許可されていることがわかります。 1つの入力のみを有効にするためにこれを変更する必要がありますか?
    grafik

元のFASTS-Functionは、3つの追加入力があると言った場合、Lidar機能をシミュレートしていると想定するように設定されています。 表示されているコードが使用されているとは思いませんが( #ifdefが正しいとは思いません)、 FAST_Updateサブルーチンにも同様のロジックがあります。

追加の入力の数が1の場合にエラーが発生しないように、行を変更するだけです。

   ELSEIF(  NumInputs_c /= NumFixedInputs .AND. NumInputs_c /= NumFixedInputs+3 .AND. NumInputs_c /= NumFixedInputs+1 ) THEN

このエラー処理は、SimulinkとFortranコード間で異なるサイズの配列を渡すときにセグメンテーション違反が発生しやすいために発生します。

こんにちは@bjonkman
ご指摘ありがとうございます。
subroutine FAST-Updateの前のコメントで述べたようにロジックを変更してから、異なる構成でOpenFASTvs-buildFASTlibFASTlib.slnから

  1. Relase Soultionの構成として、 x64 Soultionプラットフォームとして、そして使用してソリューションのビルドBuild->Build Soultion

grafik

  1. Relase Soultionの構成として、 x64 Soultionプラットフォームとして、そして使用してソリューションのビルドBuild->Rebuild FASTlib

grafik

  1. Soultion構成としてRelase_Matlab 、Soultionプラットフォームとしてx64 、そしてBuild->Rebuild FASTlibを使用してソリューションを構築します。
    コンパイルするたびに、追加の入力を使用してOpenLoop_Testを実行すると、同じ古いエラーが発生しました。

grafik

次に、 OpenFASTvs-buildFASTFASTlib.slnからRelase_Matlabx64 、およびBuild->Build SoultionてFASTを再コンパイルすると、コンパイルがクラッシュしました。

grafik

FAST_Library.f90 341行目は、追加入力のロジックを追加した行です。

grafik

subroutine FAST_SetExtrenalInputsの構造を拡張して、このような追加のロジックを許可する必要があるようです。

新しい%RotSpeedフィールドを、それを使用しているデータ構造に追加しましたか?

データ構造にフィールドを追加する場合は、適切なOpenFASTレジストリ入力ファイルでフィールドを定義する必要があります。 あなたの場合、 FAST_ExternInputTypeの定義に追加の行があるはずです。 したがって、 FAST_Registry.txt行626の近くに、新しいRotSpeedフィールドの行を追加する必要があります。

typedef ^   FAST_ExternInputType    ReKi    RotSpeed    -   -   -   "Rotor speed from Simulink"

また、使用する必要がある構成はRelease_Matlab | x64構成のみです。 他の構成はSimulinkプロセスではまったく使用されないため、最初の2つのビルドで古いコードを実行しただけです。

こんにちは@bjonkman
まず第一に、あなたの助けに感謝します。
次のように、S-Functionにもう1つの入力を追加できます。

  1. FAST_Library.f90\ subroutine FAST_SetExternalInputs InputAryの9番目の要素を占有します

grafik

  1. FAST_Rgistery.txt\ FAST_ExternalInput data追加の入力を定義します

grafik

  1. 追加の外部入力をFAST_Solver.f90\ SUBROUTINE ED_SetExternalInput ElastoDynにリンクします(私はこのルーチンを作成しました)

grafik

  1. ElastoDyn_Registry.txtで追加の外部入力を定義します

grafik

  1. Write_ChckOutLst.mスクリプトを使用して、EladoDynで新しいパラメーターを生成し、上書きしてOutListParameterにエクスポートします。

grafik

  1. ElastoDynで新しく定義されたパラメーターを、 ElastoDyn.f90\ SUBROUTINE ED_CalcOutput Siimulinkからの追加入力で上書きします。

grafik

  1. SimulinkでRotMassを定数として設定し、 ElastoDyn.f90 RMSimulink定義されたパラメーターを上書きします

grafik

  1. 上書きされた出力RMSimulinkを時間(1秒)にわたってプロットします

grafik

ご覧のとおり、 RMSimulinkは時間の経過とともに一定のゼロであり、上書きは機能しませんでした。 不足しているのは、 PCMode使用したServoDyn入力ファイルと同じようにSimulinkからの外部入力を有効にするElastoDynの入力ファイルのスイッチだと思います。 上記の移植に間違いがありますか? 上書きで見逃したことはありますか?

m%AllOuts配列の値がy%WriteOutput配置されるように、ElastoDyn入力ファイルのOutListで新しいRMSimulink出力チャネルを要求する必要があります。 y%WriteOutput配列(出力ファイルに出力され、Simulinkに送信されるもの)。 ただし、これをWriteOutput配列で取得するには、ElastoDyn.f90のSetOutParam()サブルーチンを変更して、追加する新しい出力を認識するようにする必要があります。

または、 SetOutParam()のコードを更新したくない場合は、ElastoDynの既存のチャネルを上書きして、代わりにそのチャネルをリクエストできます。

こんにちは@bjonkman
リプレイありがとうございます。
新しい出力チャネルRMSimulinkを追加するために、 ElastoDyn.f90 Subroutine SetOutParam()のコードとElastoDyn_IO.f90のコードをすでに更新しています。
Simulinkでこの値を1000に設定したのに、シミュレーション中にSimulinkからの追加の外部入力u%ExternalRotMass値がゼロに等しいのはなぜですか?
あなたが提案したように、私は既存のチャネル「SpnMxlb」を使用して上書きしましたが、結果は同じです。 u%ExternalRotMassは常にゼロです!
grafik

grafik

こんにちは@bjonkman
問題がどこにあるかを見つけました。 私は呼び出していませんでしたSUBROUTINE ED_SetExternalInputsSUBROUTINE ED_InputSolveFAST_Solver.f90 。 したがって、 m_FASTデータ型を追加するには、 SUBROUTINE ED_InputSolveの引数を変更する必要がありました。
grafik

こんにちは@bjonkman
前のコメントで述べたように、S-FunctionのMAXInitINPUTSを変更して、100個の追加入力を許可しました。 私の目標は、 ElastoDyn.f90\ p%BElmntMassのブレード要素の質量を上書きすることです。 S-Functionを使用して1つのブレード要素の質量を上書きできます。 現在、3つのブレードの51要素であるすべてのブレード要素の質量を上書きしようとしています。 新しい変更を加えてFASTをコンパイルできましたが、MATLABをコンパイルすると、次のエラーが発生します。

grafik

これがFAST_Library.f90のエラー行です

grafik

ブレード要素の質量m_FAST%ExternInput%SpnMBFAST_Registery.txt定義されています:

grafik

SPNMBの定義で何か見逃していないかわかりますか?

SPNMBを2次元の割り当て可能な配列として定義しました。 割り当てたサイズはわかりませんが、 FAST_SetExternalInputs呼び出す前にこれを行ったといいのですが、サイズ52の1次元配列と同じに設定しています(注:使用している51を確認するか、 InputAryインデックスが代わりに9:59から移動するかどうかを確認してください)。 エラーは、互いに等しく設定しようとしている配列が同じ形状(1-dと2-d)ではないため、等しくできないことを示しています。

また、パラメーター( p%データ構造内のすべて)を上書きする場合は注意が必要です。 これらの値は初期化後に変更されることは想定されていないため、(1)特定のサブルーチンでは変更できないというエラーが発生する可能性があります。(2)他のパラメーターも初期値に依存する可能性があるため、必要になります。コードを変更した場合に一貫性を持たせるため、シミュレーション中にパラメーターを変更できます。

こんにちは@bjonkman
ご指摘ありがとうございます。
SpnMb配列の次元をFAST_Register.txtElastoDyn_Registery.txtの51要素の2次元配列から1次元配列に変更しました。 次に、サブルーチンED_CalcOutput()\ElastoDyn.f90 3x17行列を定義しました。

grafik

この行列を使用して、Simulinkからインポートされた1-d配列を3x17行列に再形成しました

grafik

形状を変更した後、Simulinkからインポートされた値でブレード要素の質量を上書きしました

grafik

p%BElmntMassに依存する値を更新するために、サブルーチンUpdateCoeff(p, ErrStat, ErrMsg)を呼び出しました。

grafik

自分で生成したサブルーチンUpdateCoeff (p, ErrStat, ErrMsg)\ElastoDyn.f90は、 Subroutine Coeff(p,InputFileData, ErrStat, ErrMsg)と非常によく似たルーチンですが、入力ファイルデータが独立しているという利点があります。 これにより、サブルーチンUpdateCoeff()を時間領域、つまりED_CalcOutput()で呼び出すことができます。
さらに、パラメータデータ構造の意図をINからINOUT 。 これは、 p%データ構造を上書きできるようにするために前述したとおりです。
上記のコード変更により、FASTとMatlabの両方をエラーなしでコンパイルできました。 しかし、51個の入力を追加してOpenLoopを実行すると、2つのシミュレーションステップの後でシミュレーションがクラッシュしました。

grafik

そのようなエラーの原因を特定できませんでした。 このエラーを引き起こす可能性のある私の実装に何か問題がありますか?
1つのブレード要素の質量のみの上書きが成功します。 しかし、すべてのブレード要素についてはそうではありませんでした。
助けていただければ幸いです。
そして、あなたの迅速なリプレイをもう一度ありがとう

配列の割り当て方法に基づくと、次のようになります。

p%BElmntMass(J,K) = ElemMass(K,J)

しかし、それが唯一の問題かどうかはわかりません。 プロセスにMatlabを使用せずにこれをデバッグする1つの方法は、単純なcドライバーコードを記述し( FAST_SFunc.cからメイン呼び出しをコピー)、それをビルドしてVisualStudioデバッガーで実行することです。 私はFASTv8にこのようなものを持っていました。これは、この種のエラーを見つけるのに役立つ非常に便利なツールです。

こんにちは@bjonkman
Element(K、J)の間違いを指摘していただきありがとうございます。 残念ながら、それだけが問題ではなかったのは明らかです。
あなたが示唆するように、私は簡単なcドライバーを書きました:

grafik

しかし、上記のドライバーにコピーして貼り付けることを意図したFAST_Sfunction.cからの主な呼び出しを知ることができませんでした。
実際、私はエラーを追跡するためにFORTRANコードの特定の場所にポップアップメッセージを書き込んでいました。これは、.exeを使用したときのデバッグ方法です。

grafik

grafik

ご覧のとおり、この方法はS-Functionでは機能しません。
VSでのデバッグを手伝ってもらえますか?

CALL WrScr(文字列)を使用すると、デバッグのためにMatlabコンソールに出力できます。 print *を使用すると、現在のMatlabディレクトリにfort.7テキストファイルが作成されると思います(Simulinkモデルを実行している場合)。 それ以外の場合は、デバッグ情報にWRITE(Unit,Fmt) dataを使用して別のファイルに書き込むことができます。

Visual Studioデバッガーを使用する場合は、DLLの適切な部分を呼び出すCコードを作成する必要があります。これは、OpenFOAMインターフェイス用に作成されたものと似ています: https

FAST_SFunc.cファイルを調べてみると、初期化には次のルーチンが必要だと思います。

       FAST_AllocateTurbines(&nTurbines, &ErrStat, ErrMsg);
       FAST_Sizes(&iTurb, &TMax, InitInputAry, InputFileName, &AbortErrLev, &NumOutputs, &dt, &ErrStat, ErrMsg, ChannelNames);
        FAST_Start(&iTurb, &NumInputs, &NumOutputs, InputAry, OutputAry, &ErrStat, ErrMsg);

次に、タイムステップごとに(つまり、ループ内で)、

    FAST_Update(&iTurb, &NumInputs, &NumOutputs, InputAry, OutputAry, &ErrStat, ErrMsg);

そして最後に、あなたは必要になるでしょう

      FAST_End(&iTurb, &tr);
      FAST_DeallocateTurbines(&ErrStat, ErrMsg);

こんにちは@bjonkman

ご協力ありがとうございました。 CALL WrScr(string)は素晴らしい機能で、大いに役立ちました。 この関数の唯一の欠点は、Matlabのコマンドウィンドウに文字列しか印刷できず、値が印刷できないことです。 また、VSを使用してFAST_Sfunction.cをデバッグしてみます。
どうもありがとう

WrScrと組み合わせて使用​​できるNum2LStr()関数(左寄せ文字列への数値)もあります。これは、数値の出力に役立ちます: CALL WrScr( trim( Num2Lstr( number ) ) )

openFAST2.4.0でも同じ問題があります-マスターと開発者。
Matlabアドオン(Matlab 2018b)を使用してインストールされたCコンパイラによって生成されたVisualStudioおよびmexを使用したコンパイル。

v 2.4.0ソースファイルを使用して生成されたS-functionは、VisualStudioでコンパイルしたopenFAST2.3.0でも正常に機能します。 ですから、問題はS機能ではないと思います。

私のプロジェクトも例も機能しません-それらはすべてMatlabのクラッシュを引き起こします。

FAST_library.hファイルのパラメーター#defineCHANNEL_LENGTH 20を変更してS関数を生成しようとしましたが、同じ問題が発生しました。 これが私のMatlabの出力です:


セックスで検出されたabort()11月27日09:49:16 2020 -0300

構成:
クラッシュデコード:無効-サンドボックスまたはビルドエリアパスなし
クラッシュモード:続行(デフォルト)
デフォルトのエンコーディング:windows-1252
デプロイ済み:false
グラフィックドライバー:不明なハードウェア
グラフィックカード1:Intel Corporation(0x8086)Intel(R)UHD Graphics 630バージョン27.20.100.8681(2020-9-5)
Javaバージョン:Java1.8.0_152-b16とOracleCorporation Java HotSpot(TM)64ビットサーバーVM混合モード
MATLABアーキテクチャ:win64
MATLAB資格ID:6257193
MATLABルート:C:プログラムファイルMATLABR2018b
MATLABバージョン:9.5.0.944444(R2018b)
OpenGL:ハードウェア
オペレーティングシステム:Microsoft Windows 10 Pro
プロセスID:9896
プロセッサーID:x86ファミリー6モデル158ステッピング10、GenuineIntel
セッションキー:2e3cb4b1-3a3b-46b0-bf51-135d94257c8d
ウィンドウシステム:バージョン10.0(ビルド18363)

障害数:1

異常終了

登録状態(キャプチャ済み):
RAX = 00000000107aedd8 RBX = 00000000107aedd8
RCX = 00000000043ed920 RDX = 0000000000000000
RSP = 00000000043ed890 RBP = 00000000043f0e39
RSI = 0000000000000000 RDI = 0000000000000000

R8 = 00000000000dc430 R9 = 00007ffc4a14e930
R10 = 0000000000000014 R11 = 00000000000d5980
R12 = 00000000043ee558 R13 = 0000000000000000
R14 = 000000001079ed08 R15 = 00000000043edf90

RIP = 000000001055292a EFL = 00000206

CS = 0033 FS = 0053 GS = 002b

スタックトレース(キャプチャ):
[0] 0x000000001054b2c3 binwin64libmwfl.dll + 00045763 Foundation :: core :: diag :: thread_context :: unspecified_bool + 00000051
[1] 0x0000000010549288 binwin64libmwfl.dll + 00037512 Foundation :: core :: diag :: stacktrace_base ::キャプチャ+00000024
[2] 0x000000001054db80 binwin64libmwfl.dll + 00056192 Foundation :: core :: diag :: symbol :: getSymbolAddress + 00009632
[3] 0x000000001055165f binwin64libmwfl.dll + 00071263 Foundation :: core :: diag :: is_terminate_message_enabled + 00000575
[4] 0x0000000016dbeb3f binwin64mcr.dll + 01108799 QueryMLFcnTable_mcr + 00047535
[5] 0x0000000016dbe277 binwin64mcr.dll + 01106551 QueryMLFcnTable_mcr + 00045287
[6] 0x0000000016dba2b0 binwin64mcr.dll + 01090224 QueryMLFcnTable_mcr + 00028960
[7] 0x0000000016dbbec7 binwin64mcr.dll + 01097415 QueryMLFcnTable_mcr + 00036151
[8] 0x00007ffc5307caad C:WINDOWSSystem32ucrtbase.dll + 00445101 raise + 00000477
[9] 0x00007ffc5307dab1 C:WINDOWSSystem32ucrtbase.dll + 00449201 abort + 00000049
[10] 0x00007ffc5307d20f C:WINDOWSSystem32ucrtbase.dll +00446991終了+00000031
[11] 0x00007ffc4a142388 C:Program FilesMATLABR2018bbinwin64VCRUNTIME140.dll + 00009096 is_exception_typeof + 00002312
[12] 0x00007ffc4a141ec2 C:プログラムファイルMATLABR2018bbinwin64VCRUNTIME140.dll + 00007874 is_exception_typeof + 00001090
[13] 0x00007ffc4a14b950 C:プログラムファイルMATLABR2018bbinwin64VCRUNTIME140.dll + 00047440 _CxxFrameHandler3 + 00000144
[14] 0x00007ffc5554184f C:WINDOWSSYSTEM32ntdll.dll + 00661583 _chkstk + 00000287
[15] 0x00007ffc5550a889 C:WINDOWSSYSTEM32ntdll.dll + 00436361 RtlRaiseException + 00000921
[16] 0x00007ffc5550a643 C:WINDOWSSYSTEM32ntdll.dll + 00435779 RtlRaiseException + 00000339
[17] 0x00007ffc532e3b29 C:WINDOWSSystem32KERNELBASE.dll + 00277289 RaiseException + 00000105
[18] 0x00007ffc4a1444f2 C:プログラムファイルMATLABR2018bbinwin64VCRUNTIME140.dll + 00017650 CxxThrowException + 00000194
[19] 0x000000000d89d18a binwin64libmwsl_services.dll + 00512394 slsvStringOrID :: untranslatedStr + 00073226
[20] 0x000000000d8a2746 binwin64libmwsl_services.dll + 00534342 slsvThrowIExceptionFromDiagnostic + 00000310
[21] 0x000000017406c8a2 binwin64codermapping_core.dll + 00051362 mds :: BlockMapping :: setBlock + 00000354
[22] 0x0000000174094a28 binwin64codermapping_core.dll + 00215592 sl :: MappingManager :: checkValidMappingType + 00000168
[23] 0x00000001740966df binwin64codermapping_core.dll + 00222943 sl :: MappingManager :: getActiveModelMapping + 00000031
[24] 0x0000000174095e8a binwin64codermapping_core.dll + 00220810 sl :: MappingManager :: detachBdListener + 00000762
[25] 0x000000001a8a2c08 binwin64udd.dll + 00404488 UDListener :: removeListenerContainer + 00002392
[26] 0x000000001a89ac8c binwin64udd.dll + 00371852 UDEventInfo :: send + 00000092
[27] 0x000000025e7367d0 binwin64libmwconfigset_base.dll + 01075152 mds :: postBdEvent + 00000144
[28] 0x00000000ffeb1035 binwin64simulink_configset.dll + 00069685 detachConfigSet + 00002597
[29] 0x00000000ffeb12d2 binwin64simulink_configset.dll + 00070354 restoreOrigConfigSetForBuild + 00000322
[30] 0x000000000acabbe4 binwin64libmwsimulink.dll + 10140644 sldeutils :: searchAvailableFunctions + 00190052
[31] 0x000000000aca73f2 binwin64libmwsimulink.dll + 10122226 sldeutils :: searchAvailableFunctions + 00171634
[32] 0x000000000aca8234 binwin64libmwsimulink.dll + 10125876 sldeutils :: searchAvailableFunctions + 00175284
[33] 0x000000000b572804 binwin64libmwsimulink.dll + 19343364 slstSetOutputPortRateID + 00361588
[34] 0x000000000b5365e4 binwin64libmwsimulink.dll + 19097060 slstSetOutputPortRateID + 00115284
[35] 0x000000000ae232e7 binwin64libmwsimulink.dll + 11678439 M2MIdentifySLClones + 00138423
[36] 0x000000000bae8e2a binwin64libmwsimulink.dll + 25071146 test :: sl_startup + 04405434
[37] 0x00007ffc53029d26 C:WINDOWSSystem32ucrtbase.dll + 00105766 execute_onexit_table + 00000342
[38] 0x00007ffc53029c4b C:WINDOWSSystem32ucrtbase.dll + 00105547 execute_onexit_table + 00000123
[39] 0x00007ffc53029c04 C:WINDOWSSystem32ucrtbase.dll + 00105476 execute_onexit_table + 00000052
[40] 0x000000000b6ba73a binwin64libmwsimulink.dll + 20686650 test :: sl_startup + 00020938
[41] 0x000000000b6ba838 binwin64libmwsimulink.dll + 20686904 test :: sl_startup + 00021192
[42] 0x00007ffc554c5021 C:WINDOWSSYSTEM32ntdll.dll + 00151585 RtlActivateActivationContextUnsafeFast + 00000289
[43] 0x00007ffc5550b102 C:WINDOWSSYSTEM32ntdll.dll + 00438530 LdrShutdownProcess + 00000306
[44] 0x00007ffc5550afad C:WINDOWSSYSTEM32ntdll.dll + 004381​​89 RtlExitUserProcess + 00000173
[45] 0x00007ffc546bcdda C:WINDOWSSystem32KERNEL32.DLL + 00118234 ExitProcess + 00000010
[46] 0x00007ffbec542541 D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 44770625 FAST_OpFM_Init + 44675569
[47] 0x00007ffbec5424f7 D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 44770551 FAST_OpFM_Init + 44675495
[48] 0x00007ffbeaeb7b5a D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 21134170 FAST_OpFM_Init + 21039114
[49] 0x00007ffbe9b7bc82 D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 00965762 FAST_OpFM_Init + 00870706
[50] 0x00007ffbe9afaa54 D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 00436820 FAST_OpFM_Init + 00341764
[51] 0x00007ffbe9b4b42b D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 00767019 FAST_OpFM_Init + 00671963
[52] 0x00007ffbe9b4c4ef D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 00771311 FAST_OpFM_Init + 00676255
[53] 0x00007ffbe9aa5aba D:ricardodocumentsPROGRAMASnrel_open_fastbinOpenFAST-Simulink_x64.dll + 00088762 FAST_End + 00000074
[54] 0x00000002b2f5155c D:ricardodocumentsPROGRAMASnrel_open_fastbinFAST_SFunc.mexw64 + 00005468
[55] 0x00000002b2f520bf D:ricardodocumentsPROGRAMASnrel_open_fastbinFAST_SFunc.mexw64 + 00008383
[56] 0x00000002b2f524ac D:ricardodocumentsPROGRAMASnrel_open_fastbinFAST_SFunc.mexw64 + 00009388
[57] 0x00000002b2f541bc D:ricardodocumentsPROGRAMASnrel_open_fastbinFAST_SFunc.mexw64 + 00016828 mexFunction + 00001596
[58] 0x00000000fc635524 binwin64libmex.dll + 00349476 MexRetrieveVersion + 00003348
[59] 0x00000000fc63571c binwin64libmex.dll + 00349980 MexRetrieveVersion + 00003852
[60] 0x00000000fc635884 binwin64libmex.dll + 00350340 MexRetrieveVersion + 00004212
[61] 0x00000000fc619059 binwin64libmex.dll + 00233561 mexUnlock_800 + 00025273
[62] 0x0000000016f0e007 binwin64pgom_dispatcher.dll + 00057351 Mfh_file :: dispatch_fh_impl + 00001111
[63] 0x0000000016f0da9e binwin64pgom_dispatcher.dll + 00055966 Mfh_file :: dispatch_fh + 00000062
[64] 0x0000000016f78622 binwin64pgom_dispatcher.dll + 00493090 mdDoMatlabFcnCall + 00000122
[65] 0x000000025d08278a binwin64sl_utility.dll + 00337802 SimpleUserException :: 〜SimpleUserException + 00000282
[66] 0x000000000da124f8 binwin64libmwsl_services.dll + 02041080 CMatlabCommandNoWatermark :: execute + 00000056
[67] 0x000000025d083129 binwin64sl_utility.dll + 00340265 slDoMatlabFcnCall + 00000089
[68] 0x000000000b510fa2 binwin64libmwsimulink.dll + 18943906 slSetStateflowChartStateAccessInterface + 00252338
[69] 0x000000000b50ecb1 binwin64libmwsimulink.dll + 18934961 slSetStateflowChartStateAccessInterface + 00243393
[70] 0x000000000b511501 binwin64libmwsimulink.dll + 18945281 slSetStateflowChartStateAccessInterface + 00253713
[71] 0x000000000b4f1993 binwin64libmwsimulink.dll + 18815379 slSetStateflowChartStateAccessInterface + 00123811
[72] 0x000000000b4f1dca binwin64libmwsimulink.dll + 18816458 slSetStateflowChartStateAccessInterface + 00124890
[73] 0x000000000b4f3737 binwin64libmwsimulink.dll + 18822967 slSetStateflowChartStateAccessInterface + 00131399
[74] 0x000000000b4b503c binwin64libmwsimulink.dll + 18567228 StateflowAccessStateInterface :: 〜StateflowAccessStateInterface + 00037084
[75] 0x000000000b301ecb binwin64libmwsimulink.dll + 16785099 closeMaskEditor + 00056683
[76] 0x000000000b3021c9 binwin64libmwsimulink.dll + 16785865 closeMaskEditor + 00057449
[77] 0x000000000b30f3c4 binwin64libmwsimulink.dll + 1683960 BlockSetLocation + 00006420
[78] 0x000000000b30b424 binwin64libmwsimulink.dll + 16823332 closeMaskEditor + 00094916
[79] 0x000000000fb5a04b binwin64sl_lang_blocks.dll + 07118923 SubsystemBlock :: DrawSubsystemVariants + 00006491
[80] 0x000000000fb59631 binwin64sl_lang_blocks.dll + 07116337 SubsystemBlock :: DrawSubsystemVariants + 00003905
[81] 0x000000000fb93d53 binwin64sl_lang_blocks.dll + 07355731 SubsystemCopyContext :: srcBdIsHighlighting + 00007491
[82] 0x000000000fb4e013 binwin64sl_lang_blocks.dll + 07069715 SubsystemBlock :: CheckPrmsAndCreateDlgPrmCache + 00001139
[83] 0x000000000b301f00 binwin64libmwsimulink.dll + 16785152 closeMaskEditor + 00056736
[84] 0x000000000b3021c9 binwin64libmwsimulink.dll + 16785865 closeMaskEditor + 00057449
[85] 0x000000000b30f3c4 binwin64libmwsimulink.dll + 1683960 BlockSetLocation + 00006420
[86] 0x000000000b30b424 binwin64libmwsimulink.dll + 16823332 closeMaskEditor + 00094916
[87] 0x00000002622387c2 binwin64sl_compile.dll + 05539778 EvalAllBlockParamsAndModelArgs + 00003586
[88] 0x0000000261f544ef binwin64sl_compile.dll + 02508015 SLCompEvalAllBlockParamsAndModelArgs + 00001439
[89] 0x000000000afd3e2b binwin64libmwsimulink.dll + 13450795 ssSetBlockIsPurelyCombinatorial + 00033739
[90] 0x000000000afd4014 binwin64libmwsimulink.dll + 13451284 ssSetBlockIsPurelyCombinatorial + 00034228
[91] 0x000000000ae33fd5 binwin64libmwsimulink.dll + 11747285 M2MIdentifySLClones + 00207269
[92] 0x000000000ae26bf7 binwin64libmwsimulink.dll + 11693047 M2MIdentifySLClones + 00153031
[93] 0x000000000ae33929 binwin64libmwsimulink.dll + 11745577 M2MIdentifySLClones + 00205561
[94] 0x000000000ae2ea7c binwin64libmwsimulink.dll + 11725436 M2MIdentifySLClones + 00185420
[95] 0x000000000b538177 binwin64libmwsimulink.dll + 19104119 slstSetOutputPortRateID + 00122343
[96] 0x000000000b53d10e binwin64libmwsimulink.dll + 19124494 slstSetOutputPortRateID + 00142718
[97] 0x000000000b5439c1 binwin64libmwsimulink.dll + 19151297 slstSetOutputPortRateID + 00169521
[98] 0x000000000b5431a7 binwin64libmwsimulink.dll + 19149223 slstSetOutputPortRateID + 00167447
[99] 0x000000000b576d05 binwin64libmwsimulink.dll + 19361029 slstSetOutputPortRateID + 00379253
[100] 0x000000000ad7960a binwin64libmwsimulink.dll + 10982922 slAccPostBlock + 00178826
[101] 0x000000000abc8e73 binwin64libmwsimulink.dll + 09211507 QueryMLFcnTable_libmwsimulink + 00088563
[102] 0x0000000016f0b724 binwin64pgom_dispatcher.dll + 00046884 Mdispatcher :: getDispatcher + 00002228
[103] 0x0000000016f0cbe7 binwin64pgom_dispatcher.dll + 00052199 Mfh_MATLAB_fn_impl :: dispatch_fh + 00000343
[104] 0x0000000017de4ead binwin64pgom_lxe.dll + 00347821
[105] 0x0000000017f7e9b6 binwin64pgom_lxe.dll + 02025910 MathWorks :: lxe :: ShutdownLxeEngine + 00004034
[106] 0x0000000017edfd3c binwin64pgom_lxe.dll + 01375548 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "145"> :: load_object_data + 00493568
[107] 0x0000000017ee091c binwin64pgom_lxe.dll + 01378588 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "147"> :: load_object_data + 00496608
[108] 0x0000000017ee1c92 binwin64pgom_lxe.dll + 01383570 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "149"> :: load_object_data + 00501590
[109] 0x0000000017ee28f8 binwin64pgom_lxe.dll + 01386744 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "151"> :: load_object_data + 00504764
[110] 0x0000000017ee1ddf binwin64pgom_lxe.dll + 01383903 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "153"> :: load_object_data + 00501923
[111] 0x0000000017ee1ede binwin64pgom_lxe.dll + 01384158 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "155"> :: load_object_data + 00502178
[112] 0x0000000017de9a7d binwin64pgom_lxe.dll + 00367229
[113] 0x0000000017dfb265 binwin64pgom_lxe.dll + 00438885
[114] 0x0000000017dfa88c binwin64pgom_lxe.dll + 00436364
[115] 0x0000000017df8779 binwin64pgom_lxe.dll + 00427897
[116] 0x0000000017df90eb binwin64pgom_lxe.dll + 00430315
[117] 0x0000000017df8a49 binwin64pgom_lxe.dll + 00428617
[118] 0x0000000016f0e007 binwin64pgom_dispatcher.dll + 00057351 Mfh_file :: dispatch_fh_impl + 00001111
[119] 0x0000000016f0da9e binwin64pgom_dispatcher.dll + 00055966 Mfh_file :: dispatch_fh + 00000062
[120] 0x0000000017de4ead binwin64pgom_lxe.dll + 00347821
[121] 0x0000000017f7e9b6 binwin64pgom_lxe.dll + 02025910 MathWorks :: lxe :: ShutdownLxeEngine + 00004034
[122] 0x0000000017edfd3c binwin64pgom_lxe.dll + 01375548 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "167"> :: load_object_data + 00493568
[123] 0x0000000017ee091c binwin64pgom_lxe.dll + 01378588 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "169"> :: load_object_data + 00496608
[124] 0x0000000017ee1c92 binwin64pgom_lxe.dll + 01383570 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "171"> :: load_object_data + 00501590
[125] 0x0000000017ee28f8 binwin64pgom_lxe.dll + 01386744 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "173"> :: load_object_data + 00504764
[126] 0x0000000017ee1ddf binwin64pgom_lxe.dll + 01383903 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "175"> :: load_object_data + 00501923
[127] 0x0000000017ee1ede binwin64pgom_lxe.dll + 01384158 mwboost :: archive :: detail :: iserializer <:archive :: binaryterm_iarchive i = "177"> :: load_object_data + 00502178

このエラーは、MEXファイルの実行中に検出されました。 MEXファイルの場合
は公式のMathWorks関数ではありません。ソースコードを調べてください。
エラーの場合。 詳細については、外部インターフェイスガイドを参照してください
MEXファイルのデバッグについて。

こんにちは@bjonkman 、こんにちは@jjonkman
上で述べたように、与えられたシミュレーション内でブレード要素の質量を変えることができます。 ブレード要素の質量の変化は、角運動量の変化から追加のトルクを生成します。 このトルク。 T_corは、次の式で説明するように、移動した質量の可変半径R_varに作用するコリオリの力F_corで表すこともできます。

T_cor = 3∙F_cor∙R_var

@jjonkmanが前のコメントで述べたように:

grafik

コリオリの力を説明するElastoDynソースコードでその用語を見つけることができませんでした。 ElastoDyn.f90\FUNCTION SignLSSTrq( p, m ) 、低速シャフトのモーメントMomLPRotが計算されていることがわかります。 この時点でコリオリを追加するのは正しいですか?

grafik

ここで、u%ExternalRvarとu%ExternalFcorは、それぞれSimulinkからの可変半径とコリオリの力です。
コリオリトルクを低速シャフトトルクに追加する方法を教えてください。

親愛なる@LaurenceWETI

あなたが提案するように、私はFUNCTION SignLSSTrq()を変更しません。 コリオリおよびその他の力は、本質的にElastoDyn内で計算されます。 主な動的計算が行われる前に各タイムステップでブレード要素の質量を変更する場合は、慣性力に対するこれらの質量の影響を本質的に含める必要があります。

宜しくお願いします、

親愛なる@jjonkman

リプレイありがとうございます。
ブレード要素の質量の変更が各タイムステップで行われる必要があるのとまったく同じ理由で、メインの動的計算が行われる前に、 SUBROUTINE ED_CalcOutput\ElastoDyn.f90先頭で質量変更サブルーチンを呼び出しました。 次の図に、コールオーダーのフローを簡単に要約します。

grafik

ここで、 Subroutine Flywheel_Ini(p)初期化のための唯一のt = 0で呼び出され、 Subroutine Flywheel(p, u)ブレード要素塊を上書きするたびにステップで呼び出され、 Subroutine UpdateCoeff(p, ErrStat, ErrMsg)ブレードの質量が変更された後に呼び出されますSubroutine Coeff(p,InputFileData, ErrStat, ErrMsg)のパラメータを更新します。 パラメータデータ型p%の上書きを有効にするために、パラメータデータ構造の意図をINからINOUT

主な動的計算が行われる前の時点で質量を変更しましたか?

コリオリの力が計算されるElastoDynコードでお願いしますを参照できますか?

あなたが言及したコリオリの力は、ブレードの質量の変化によるものですか、それともタワーの左右の動きによるものですか?

親愛なる@LaurenceWETI

ElastoDynの2つの主な動的計算は次のとおりです。

  • ED_UpdateStates-あるタイムステップから次のタイムステップまで、時間内に状態を統合(前進)します。
  • ED_CalcOutput-現在の時刻の出力を計算します。

メインのFAST_Solutionルーチンでは、ED_UpdateStatesはED_CalcOutputの前に呼び出されるため、ED_UpdateStatesの最初にこれらの計算を行う必要があると思います。

コリオリの力は、回転座標系でのブレードの動き(ブレードとタワーのたわみによる)から発生します。 コリオリの力は体の加速度に基づいているため、運動学と速度論に固有のものです。 ElastoDynはKaneのダイナミクスを使用するため、速度と加速度は部分的に表されます。 ElastoDynの主なキネマティクスおよびキネティクスルーチン(CalculatePositions、CalculateAngularPosVelPAcc、CalculateLinearVelPAcc、およびCalculateForcesMoments)がすべて役割を果たします。

宜しくお願いします、

親愛なる@jjonkman

リプレイありがとうございます、
最後のコメントで示唆しているように、私は計算をED_UpdateStates先頭にシフトしました:

grafik

しかし、コリオリの力が可変ブレード要素の質量に対して計算されているのか、少なくとも質量を変更する私の実装に対して計算されているのかはわかりません。 コリオリの力の影響が見られると予想される例を挙げて説明します。
次の例では、各ブレードは、最初の2つのブレード要素に4,000.00kgの追加の流体質量で初期化されます。 40秒後、2,000.00kgの流体質量を最初のブレード要素から11番目と12番目と13番目のブレード要素に移動しました。 2番目のブレード要素内の残りの流体は、80秒で11番目と12番目と13番目のブレード要素に移動します。 そのため、100秒で、4,000.00kgのすべての流体質量がブレードルート要素からブレード本体要素に移動します。 130秒から190秒の間、この手順を反対方向(体から根へ)に繰り返しました(下の図を参照)。

grafik

移動した流体の質量に応じて、コリオリの力の影響は、流体の移動中、つまり40〜60秒、80〜100秒、130〜150秒、170〜190秒の低速シャフトトルクに注意する必要があります。 ただし、低速シャフトトルクは上記の期間でほぼ一定です(下図を参照)。

grafik

追加された質量がエッジ方向の先端のたわみに与える影響を確認できますが(次の図TipDyb1 )、コリオリの力の影響を認識できません。

grafik

ヘルプ、ヒント、またはディスカッションをいただければ幸いです。

親愛なる@LaurenceWETI

私はあなたがコリオリの力から何を見ることを期待しているのか本当に理解していません。

私の理解では、あなたはブレードの内側から外側に質量をシフトしています。 これが持つ大きな効果は、シャフトの周りのローターの慣性を増加させることです。 簡単なテストでそれが起こっていることを確認できます。 角運動量の保存から、空力トルクまたは発電機トルクがない場合、慣性の増加により、質量を船外にシフトするときにローターが減速すると予想されます。 このテストは機能しますか? つまり、AeroDynとServoDynを無効にし、GenDOFを有効にして、ElastoDynでローターに初期ローター速度を与えます。 質量を船外に移動すると、ローターの速度が低下しますか?

宜しくお願いします、

親愛なる@jjonkman

迅速な担当者に感謝します。

コリオリの力から、質量が船外に移動するときはローターの速度が遅くなり、質量が船内に移動するときはローターの速度が上がることが期待されます。 これが、AeroDynとServoynを無効にしてGenDOFを有効にすることを提案する理由だと思います。 FAST入力ファイルでCompAeroとCompServoをゼロに設定し、ElastoDyn入力ファイルでGenDOFをTrueに設定し、RotSpeedを12.1に設定して、AeroDynとServoDynを無効にします。

grafik

上記のシミュレーション結果は、質量が船外に移動してもローター速度が低下しないことを明らかに示しています。
上で述べたように、運動学と速度論に固有のコリオリの力は、体の加速度に基づいていますが、2つのシミュレーション時間ステップ間の質量の変化には基づいていません。 私のシミュレーションでのコリオリの力は、質量のシフトに基づいています。 したがって、コリオリの力のこの部分をElastoDynソースコードのロータートルクに追加したいと思います。 私はすでにMATLAB / Simulinkでコリオリのトルクを計算しており、このトルクをElastoDynの外部入力として使用します。 このパーツをどこに追加するか教えていただけますか?

宜しくお願いします

親愛なる@LaurenceWETI

ブレードの長さ方向に質量をシフトするために必要なすべての変更について、私は考えていません。 しかし、行った変更が不完全であることは明らかです。 新しい負荷はどのような形を取りますか? これらの負荷が計算され、ブレードに沿ってローカルに適用されない限り、必要な動的応答を提供することは期待できません。 また、追加する負荷が、すでに追加した用語を二重にカウントしないこと、および他の重要な用語が欠落していないことを確認する必要があります。

ElastoDynの理論的基礎をすでに確認し、ブレードに沿った質量のシフトに対応するためにこの基礎をどのように変更する必要があるかを特定しましたか? そうでない場合、これは私があなたに提案する最初のステップになります。 公式には公開されていませんが、ElastoDyn理論の基礎は、フォーラムの「非公式FAST理論マニュアル」と呼ばれるものに文書化されています。https ://wind.nrel.gov/forum/wind/viewtopic.php?f = 4&t =を参照して

宜しくお願いします、

親愛なる@jjonkman

素早いリプレイありがとうございます、

低速シャフトに直接作用する追加モーメントの形で新しい荷重を実装します。 このモーメントは既にSimulinkで計算されており、S-Functionを介してElastoDynにインポートします。 新しい負荷を追加する方法が非常に単純化されており、追加された負荷が、すでに追加されている用語を二重にカウントしないことを保証できないことを認識しています。 しかし、今の私にとっては、単純な埋め込みから始めることが非常に重要です。これは、少なくともブレードに沿って移動した質量の動的効果を示しています。 この単純な実装に基づいて、ElastoDynの理論的基礎を使用したより正確な実装に進みます。
以前のコメントでは、この瞬間をFUNCTION SignLSSTrq()に追加することをお勧めしませんでした。 ELastoDynのソースコードのどこにどのようにこの瞬間を追加するかについて教えてください。 よろしくお願いします。

宜しくお願いします、

親愛なる@LaurenceWETI

ElastoDynには、ハブに適用される外部荷重用のモジュールレベルの入力ポイントメッシュ(HubPtLoad)があります。 私はそれにあなたの負荷を追加します。 ただし、Simulinkインターフェイスは現在、Simulinkからの入力としてHubPtLoadを受け取るように設定されていないため、OpenFASTグルーコードとSimulinkインターフェイスの両方を変更する必要があります。

宜しくお願いします、

親愛なる@jjonkman

それを指摘してくれてありがとう、
以前のコメントで示唆したように、ハブに適用される外部負荷( HubPtLoad )を探しました。 SUBROUTINE ED_Perturb_u(). u%HubPtLoad%Moment()に外部コリオリモーメントを追加できると思いましたが、問題は、入力ファイルで線形化解析をTRUEに設定すると、線形化機能のためにヤコビアンルーチンを有効にすると、次のエラーが発生します。

grafik

このエラーは、SimulinkインターフェイスがSimulinkからの入力を受け取るように設定されていないことが原因ですか? あなたが提案したことに対する私の理解は正しいですか? OpenFASTグルーコードとSimulinkインターフェイスを変更する場所について詳しく教えてください。
Simulinkからこの追加の負荷を追加する他の方法はありますか? 実際、私はこのモーメントをSUBROUTINE ED_CalcOutputのブレードルートMomH0B面内モーメントに追加しようとしました。 ただし、面内モーメントを変更しても、ローター速度は変わりません(下図を参照)。

Coriolis

AeroDynとServoDynを無効にしても、ローター速度は変わりませんか?

宜しくお願いします、

親愛なる@LaurenceWETI

ElastoDynを変更する必要はなく、線形化ではなく、時間領域シミュレーションに焦点を合わせているようです。 したがって、 SUBROUTINE ED_Perturb_u()変更しないでください。

代わりに、前に述べたように、SimulinkインターフェイスとOpenFASTグルーコードを変更する必要があります。 他の変数がSimulinkインターフェイス(GenTrqなど)を介して渡され、OpenFASTグルーコード(FAST_Registry.txt、FAST_Solver.f90)でどのように使用されるかを検索します。 NacelleLoads入力が現在設定されている場所の近くのOpenFASTグルーコードでHubPtLoad入力を設定する可能性があります。

宜しくお願いします、

親愛なる@jjonkman

休日でもお返事ありがとうございます、

Bonnieの助けを借りて、Simulinkインターフェイスを介して変数を渡す方法と、OpenFASTグルーコードやElastoDynでこれらの変数を使用する方法を知ることができました。 OpenFASTのソースコードまたはElastoDynでSimulinkからの外部負荷を使用/追加する場所を知りたいこと。

ElastoDynを変更する必要はないということです。 これは、ブレードに沿って移動した質量による外部負荷(Simulinkからのコリオリモーメント)をElastoDynで追加/使用してはならないことを意味しますか? これは、この外部負荷をOpenFASTグルーコード(FAST_Solver.f90)にのみ追加する必要があることを意味しますか?

外部負荷をに近くに設定するために、OpenFASTグルーコード(FAST_Solver.f90)のどこにNaceleLoads入力が設定されているかが見つかりませんでした。 Nacelleloadesに外部コリオリモーメントが追加されると、ローター速度が変更されると思いますか?

宜しくお願いします

親愛なる@LaurenceWETI

ElastoDynへのモジュールレベルの入力HubPtLoadは、ハブに追加された外部負荷としてElastoDyn内にすでに適用されています。 通常、この負荷はゼロに設定されます。 これは、BeamDynが有効になっている場合に使用され、BeamDynの各ブレードのルートからElastoDynハブに負荷を適用します。 私が提案しているのは、既にSimulink内でこの余分な負荷を計算しているので、Simulinkから値を取得し、それを使用してOpenFASTグルーコードでHubPtLoadの値を設定するだけです。 したがって、ElastoDynを変更する必要はありません。

ElastoDynへのNacelleLoads入力は、_FAST_Solver.f90_のSUBROUTINE ED_InputSolve()のOpenFASTグリュードコードによって設定されます(ServoDyn内で計算されたナセルベースのTMDからの負荷に基づく)。 このサブルーチンでも、HubPtLoad入力をElastoDynに設定できます。

Simulinkで「コリオリの力」を計算する方法については説明していません。 通常、コリオリの力は、回転座標系での運動によって生じる慣性力と考えています。 おそらく、使用している回転速度はローターの回転速度であり、使用している並進速度はブレードに沿った軸方向です(ブレードに沿った質量の並進から)。 その場合、コリオリの力はローターの平面内にあり、シャフトに対するモーメントアームがゼロ以外の場合、回転に影響を与えると思います。

宜しくお願いします、

親愛なる@jjonkman;

助けてくれてありがとう、
あなたが提案したように、私はSUBROUTINE ED_InputSolveFAST_Solver.f90 SUBROUTINE ED_InputSolveのHubPtLoadの値を次のようにSimulinkからの追加の負荷に設定しました。

grafik

ここで、 u_ED%ExternalCoriolis1は、Simulinkで計算された追加の負荷です。 HubPtLoadはSUBROUTINE ED_InputSolveで解決されない唯一の入力であり、 MeshMapData%u_ED_HubPtLoad%MomentSUBROUTINE FullOpt1_InputOutputSolve ()でゼロに設定されているため、 SUBROUTINE FullOpt1_InputOutputSolve () HubPtLoadの値を変更しました。

grafik

コリオリモーメントを計算するために、次の2つの方程式を使用しました。
T_cor = 3 * F_cor * R_var
F_cor = 2 * m_fluid * w_rot * v_fluid
ここで、R_varは、ブレード先端要素のシフトされた質量の重心の可変半径[m]です。 m_fluidは、シフトされた流体の質量[kg]です。 w_rotは、ローターの回転速度[rps]です。 v_fluidは、ブレードに沿った流体の並進速度[m / s]です。 次の図は、コリオリモーメントの極端な例を示しています。ここでは、追加のモーメントがローター速度に影響を与えないことが明らかです。

CoriolisMoment

この例では、ServoDynとAeroDynを無効にしてGenDOFを有効にし、ローター速度に初期値12.1 [rpm]を指定します。

HubPtLoadの値を正しく設定しましたか?

追加の負荷がローター速度に与える影響がわからない理由を説明してください。

宜しくお願いします

親愛なる@jjonkman

ブレードに沿ってシフトされた質量による追加のコリオリ荷重の影響は、ローターの平面内の荷重として理解されます。これは、質量が外側から内側にシフトされるときに正(回転方向)になり、負(に対して)になるはずです。回転方向)質量が内側から外側にシフトしたとき。 それに同意しますか? ElastoDyn入力ファイルに設定されている12.1 [rpm]は初期値であるだけでなく、シミュレーション全体を通してローター速度の固定値でもあるため、前回のシミュレーションではローター速度は前のコメントから変更されていませんか?

どんな助けでも大歓迎です。

宜しくお願いします、

親愛なる@LaurenceWETI

SUBROUTINE FullOpt1_InputOutputSolve()で変更したコード行に同意しますが、このコードはBeamDynが有効になっている場合にのみ使用されます。 SUBROUTINE ED_InputSolve()では、あなたが持っているものは正しくありません。 代わりに、そうする必要があります。

u_ED%HubPtLoad%Moment = u_ED%ExternalCoriolis1

コリオリモーメントの方程式は問題ないように見えますが、このモーメントは、モーメントのグローバルX、Y、およびZ成分を含む3要素ベクトルである必要があります。 この3要素ベクトルの各コンポーネントを設定していますか? 最初のコンポーネント(X)は、シャフトがグローバルX軸と位置合わせされている場合、つまり、プラットフォームの回転、タワーのたわみ、シャフトの傾き、およびヨー角がゼロの場合にのみ、シャフトの周りに直接配置されます。

宜しくお願いします、

親愛なる@jjonkman

それを指摘してくれてありがとう、
コリオリモーメントの定義を3要素ベクトルに変更して、モーメントのX、Y、およびZ成分を含めました。 SUBROUTINE ED_InputSolve\FAST_Solver.f90のコードを次のように修正しました。
u_ED%HubPtLoad%Moment = u_ED%ExternalCoriolis1
ただし、 u_ED%HubPtLoad%Momentのモーメントの配列式の形状は、この時点では一致していません。

Unbenannt

FAST_Solver.f90 u_ED%HubPtLoad%Moment使用方法を検索したところ、この変数がSUBROUTINE Add_FullOpt1_u_delta()で次の形式で使用されていることがわかりました。
u_ED%HubPtLoad%Moment(fieldIndx,node)
SUBROUTINE ED_InputSolve u_ED%HubPtLoad%Momentに欠けているものはありますか?

宜しくお願いします

親愛なる@LaurenceWETI

いい視点ね。 u_ED%HubPtLoad%Momentが2次元配列であることを忘れました。 確かに、2番目の次元にはノードが1つだけあります。 したがって、正しい割り当ては次のようになります。

u_ED%HubPtLoad%Moment(:,1) = u_ED%ExternalCoriolis1(:)

宜しくお願いします、

HubPtLoadメッシュは現在、BeamDynとElastoDynの結合を提供するためにのみグルーコードで使用されています。 これはSolveOption1ルーチンで適用されるため、現在、 FullOpt1_InputOutputSolveの残差計算でのみ設定されています。

HubPtLoadメッシュに負荷を追加する場合は、BeamDyn結合の場合はFullOpt1_InputOutputSolve 、BeamDynを使用していない場合はED_InputSolve()含める必要があります。 Add_FullOpt1_u_deltaルーチンは変更しないでください。

親愛なる@jjonkman 、親愛なる@bjonkman

お返事ありがとうございます。 見た目がはるかに良くなり、追加の負荷がローター速度に与える影響を確認できました。

宜しくお願いします

親愛なる@jjonkman

AeroDynとServoDynが無効になっているときにハブに作用するトルクについて質問があります。 前に予想したように、質量を外側にシフトするとローターの速度が低下しますが、同じ質量を内側にシフトしても同じ値でローターの速度が上がるわけではありません。下の図を参照してください。

1

実際、シフトした質量の慣性の変化に応じて、コリオリのトルクを次のように計算しています。

J_Mass_bl = R_var ^ 2 * m_Mass
T_Coriolis = 3 * d / dt(J_Mass_bl)* rotor_speed

R_varはシフトされた質量の可変重心であり、m_Massはブレードに沿ってシフトされた質量です。

2

質量が船内にシフトされたときに、追加のコリオリトルクがローターの期待されるスピードアップにつながらなかった理由を理解できませんでした!

宜しくお願いします。

親愛なる@LaurenceWETI

2つの計算の違いがわかりません。 d / dt(J_Blade_bl)= 2 R_var m_Mass * v_fluidを使用している場合、実装は以前のものと同じではありませんか?

発電機のトルク(トルクコントローラーに関連付けられている)または空力トルク(ピッチコントローラーに関連付けられている)を示していませんが、ローターの速度が期待したほど速くならない理由でコントローラーが役割を果たしている可能性がありますに?

宜しくお願いします、

親愛なる@jjonkman

迅速な返信ありがとうございます。 CompServoをゼロに設定してOpenFASTの入力ファイルでServoDynを無効にし、このモデルから電気をプロットするための出力がないにもかかわらず、ジェネレーターのトルク(ピッチコントローラーに関連付けられている)を表示するように求められたので、疑問に思いました。発電機トルク(GenTq)。 ただし、コントローラーの影響を受けずに出力信号でGenTqを取得するために、FAST入力ファイルでServoDynを有効にし、ServoDynの入力ファイルですべてのコントローラーを無効にしました。 突然、ローターの速度が予想どおりに速くなります。

2
1

FAST入力ファイルでCompServoがゼロに設定されているときにジェネレーターとトルクコントローラーが無効にならない合理的な理由を見つけることができませんでした。ElastoDynでその効果を無効にするには、ServoDyn入力ファイルで無効にする必要があります。 多分あなたはこの現象を説明することができますか?

宜しくお願いします

親愛なる@LaurenceWETI

SimulinkからOpenFASTS-Functionへの入力(トルク、ピッチ、ヨーなど)は、関連する制御モデルを適切に設定することで有効になります(たとえば、VsContrl = 5で、Simlulinkからのトルクを受け入れます)。 したがって、ServoDynが有効になっていない場合、Simulink入力が使用されることは期待できません。 確かに、新しいコリオリの荷重がServoDynを通過するのではなく、ElastoDynに直接適用されるように、Simulinkインターフェイスを変更したので、効果の一部をキャプチャしたと思います。

宜しくお願いします、

私は、Simulink統合用にコンパイルされたOpenFASTライブラリを、リリースごとに定期的に共有する他の実行可能ファイルとともに配布するためのパスの確立に取り組んでいます。 前回のリリースに含まれていたopenfastlib_simulink.dllというファイルを追加しました。 誰かが添付ライブラリをテストできますか? これは、mex-functionでリンクする必要があるOpenFASTライブラリです。

私は、Simulink統合用にコンパイルされたOpenFASTライブラリを、リリースごとに定期的に共有する他の実行可能ファイルとともに配布するためのパスの確立に取り組んでいます。 前回のリリースに含まれていたopenfastlib_simulink.dllというファイルを追加しました。 誰かが添付ライブラリをテストできますか? これは、mex-functionでリンクする必要があるOpenFASTライブラリです。

前回のRealeaseでこのファイルが見つかりませんでした...

Screen Shot 2021-03-11 at 7 24 41 AM

@hbasbas他のアセットとのリリースの最後にあります。 上記の最新リリースのURLを誤って入力したため(現在は修正されています)、正しいURLは次のとおりです: https

みなさん、こんにちは!
「Run_Test01_SIG.m」の実行中に問題が発生しました。
最新バージョンのopenfastv2.5.0を使用し、matlab2020aとvisual studio 2019で「FAST_SFunc.mexw64」を正常にコンパイルしましたが、「Run_Test01_SIG.m」を実行すると、matlabがクラッシュします。 私は何度も試しましたが、それでもこの問題を解決することはできません。
添付されているのは、matlab2020aのクラッシュレポートとCreate_FAST_SFuncの結果です。

ご多幸を祈る!
ChenPeng
issue.txt
create
翻訳:cl:コマンドライン警告D9025:「/ MD」の書き換え(「/ MT」付き)

親愛なる@rafmudaf

あなたが与えたdllファイルでmexコマンドをどのように使用できますか? 代わりに.libファイルが必要ですか?

私の理解では、 create_FAST_SFuncは動的にリンクされたライブラリを使用してmexコマンドでコンパイルします。 @bjonkmanはおそらく#654でより良い情報を提供することができます。

@Domotopengスタックトレースは、SIMULINKがOpenFASTライブラリに入っていることを示しているので、それは良いことです。 しかし、OpFM_Initでクラッシュするので、それは良くありません。 OpenFASTをデバッグモードでコンパイルすると、スタックトレース情報が変更されますか? OpFM_Initの行番号は素晴らしいでしょう。

私の理解では、 create_FAST_SFuncはダイナミックリンクライブラリとmexコマンドを使用してコンパイルします。 @bjonkmanは#654でより良い情報を提供するかもしれません。

私の理解では、 create_FAST_SFuncはダイナミックリンクライブラリを使用してmexコマンドでコンパイルします。 @ bjonkmanはおそらく#654でより良い情報を提供できるでしょう。

助言ありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価