2012-05-06 7 views
0

以下の状況では、私は助けが必要です。simulinkとmatlabの間の並行プログラミングを実装する方法

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

私の質問は、相互排除のためにバッファを保護する方法です。私は、ワークスペースブロックを使用したくありません。これは、Simulinkが一時停止または停止したときにのみデータを更新するためです。私はmatalbやsimulinkによって提供されるようなsmeaphoreやmutex構造を見つけることはできません。私はこの問題を解決するには、次の方法を試してみましたが、それらの非作品:私はDSPツールボックス内のキューおよびバッファブロックを使用しようとしました

  1. 、この二つのブロックは相互排他を提供していますが、サイズ出力データはシミュレーション中に変更されます。基本的には、MATLABがデータを収集する機能を持つとき、バッファに現在格納されているすべてのデータを取ります。次に、バッファブロックが各Simulinkタイムステップで1つずつ出力されるように見えます。

  2. 私は、組み込み関数の永続変数によってキューを実装しようとしました。 matalb関数がデータを収集したいときは、信号フラグを反転して、データをワークスペースに出力するようにSimulinkに指示します。しかし、このメソッドでは、matalb関数は2回の呼び出しでデータを取得する必要があります。 1回目の呼び出しでフラグを反転してから戻ります。次に、2番目の呼び出しを使用して、ワークスペースを検索して、simulinkが出力したデータを検索します。このメソッドは、エレガントではないため、顧問によって拒否されます。目的をデバッグするために、私はC/C++の中のSimulinkを変更しないことを計画して

私はRTWは、この問題を解決するが、Simulinkモデルと解析機能コードをmatalbかもしれないと思うことが多い、変更されています。しかし、私はCを使ってmutexを実装し、simulinkとMatlabで呼び出すことができるのだろうかと思います。答えが「はい」の場合、これを行う方法は?

私は本当に誰かが私を助けることを願っています。どんな提案も感謝しています。ところで、私はLinuxシステムを使用しています。

答えて

関連する問題