0

次の状況で助けが必要です。

私のプロジェクトは、simulink を使用してロボットをシミュレートすることです。simulink モデルの出力は、各タイムステップでのロボットの位置とトルクです。私の問題はデータ収集部分にあります。バッファーを使用して simulink の出力を格納し、別の matalb 関数を使用して同じバッファーにアクセスし、オンライン データ分析のためにバッファーからデータを取得する予定です。要件は、simulink モデルと matlab データ解析関数を同時に実行する必要があることです。また、matalb データ分析関数は、データをバッファから取り出すタイミングを決定します。これは、simulink がプロデューサーであり、データ解析の matlab 関数がコンシューマーとして機能する、プロデューサーとコンシューマーの問題のようなものです。

私の質問は、相互排除のためにバッファーを保護する方法です。To workspace ブロックは、simulink が一時停止または停止したときにのみデータを更新するため、使用したくありません。matalb または simulink によって提供される構造のようなスメアフォアまたはミューテックスは見つかりません。問題を解決するために次の方法を試しましたが、どれも機能しません。

  1. DSP ツールボックスでキューとバッファー ブロックを使用しようとしました。この 2 つのブロックは相互排除を提供しますが、シミュレーション中に出力データのサイズが変更されます。基本的に、matlab 関数がデータを収集するときは、その時点でバッファーに格納されているすべてのデータを取得します。次に、バッファブロックは、simulink のタイムステップごとに 1 つずつ出力されるようです。

  2. 組み込み関数の永続変数によってキューを実装しようとしました。関数 matalb がデータを収集する場合、信号フラグを反転して、データをワークスペースに出力するように simulink に指示します。ただし、この方法では matalb 関数は 2 回の呼び出しでデータを取得する必要があります。フラグを反転してから戻る最初の呼び出し。次に、2 番目の呼び出しを使用してワークスペースを検索し、simulink によって出力されたデータを見つけます。この方法は洗練されていないため、アドバイザーによって拒否されました。

この問題は RTW で解決できると思いますが、simulink モデルと matalb 解析関数のコードは頻繁に変更されるため、デバッグ目的で、simulink を C/C++ に変更しない予定です。しかし、C を使用してミューテックスを実装し、simulink と Matlab で呼び出すことができるかどうかは疑問です。答えが「はい」の場合、これを行う方法は?

誰かが私を助けてくれることを本当に願っています。どんな提案でも大歓迎です。ちなみに、私はLinuxシステムを使用しています。

4

1 に答える 1

0

Simulink ドキュメンテーションの「シミュレーション中のブロック データへのアクセス」と、File Exchange でイベント リスナーと MATLAB UI を使用した Simulink 信号の表示を参照してください。これはあなたが望むことをすると思います。

于 2013-04-10T08:39:49.380 に答える