web-dev-qa-db-ja.com

シミュレーション中にSimulinkデータをワークスペースにエクスポートするにはどうすればよいですか?

Simulink シミュレーション中からデータを取得し、シリアルネットワーク機能を使用してこれらのデータを別のプログラムに送信したいと思います。別のプログラムを使用していくつかのトリックを実行し、コマンドをsimulinkに送り返す必要があるため、別のプログラムが正しいコマンドを実行できるように、実行時にsimulinkからデータを取得する必要があります。

ToWorkspaceブロックを使用してデータをエクスポートしようとしました。

enter image description here

しかし、私はシミュレーションの最初の段階でしか価値を得ることができません。

また、スコープを使用していくつかのプロパティを変更してみました。[データをワークスペースに保存]をオンにし、[データを最後に制限する]をオフにします。

enter image description here

enter image description here

最初にシミュレーションを開始しましたが、ScopeDataがワークスペースに表示されていないことがわかりました。シミュレーションを停止した場合にのみ、ScopeDataがワークスペースに表示されます。

enter image description here

その後、ScopeData.signals.valuesを使用して値を取得できます。

しかし、私が欲しいのは、シミュレーションを開始すると、ScopeDataがワークスペースに表示されるので、これらのデータを他のプログラムに送信できます。

誰かがこれを達成する方法を知っていますか?

このページ が役立つかもしれませんが、シミュレーション中にデータを継続的にエクスポートする方法がまだわかりません。

7
Po-Jen Lai

シミュレーション中、Simulinkはログに記録されたデータを内部バッファーに格納し、シミュレーションが一時停止または停止したときにのみデータをワークスペースに書き込みます。 S-function(タイムステップごとに信号値を取得する)を作成し、その方法でProteusと通信する必要があるように聞こえます。

もちろん、Simulinkは非リアルタイムシミュレーターであるため、リアルタイム制御に似た何かを行うことについて話している場合は、まったく間違ったアプローチを取っている可能性があります。

3
Phil Goddard

シミュレーション中はいつでも、Simulinkにシミュレーション出力データをワークスペースに書き込むように強制できます。

_set_param(bdroot,'SimulationCommand','WriteDataLogs');
_

このコマンドは、Win64用のMatlab2010aでは非常に不安定であることがわかりました。特に、シミュレーションが停止しているとき(つまり、最初にget_param(bdroot,'SimulationStatus')をチェックするとき)は回避する必要があります。そうしないと、Matlabがエラーを表示し、再起動を要求します。

2
Sandro