バス信号について、そのバス要素の階層・体系を保持しつつ、 Simulink モデルから MATLAB ワークスペースへと信号の保存をするにはどのようにしますか?
11 ビュー (過去 30 日間)
古いコメントを表示
複雑な Simulink モデルにおいて、多くの異なる信号に関してデータ出力をしたいと考えています。モデル上にて関連性のある信号は全てバスを生成して、その信号名とともに構造を保って、解析がし易いように MATLAB ワークスペースへバス信号を出力したいです。
To Workspace ブロック、 Outport ブロックを使って試していますが、信号は個々に配列となり、ベースワークスペースへと出力されます。
採用された回答
MathWorks Support Team
2011 年 8 月 1 日
バス信号を、信号名と構造を保って Simulink モデル上から MATLAB ワークスペースへと出力するには、データロギングを次のように活用することで可能です。
1. バス信号の信号線をマウス右クリックし、「信号プロパティ」を押下します。
2. 信号プロパティのウィンドウ上で、「信号データのログ」にチェックを入れます。
3. モデルのコンフィギュレーションパラメータにおいて、左側より「データのインポート/エクスポート」ペインを選択します。
4. 「信号のログ」にチェックを入れ、バス信号を格納したい変数名を指定します。
信号のログの変数は、次のような形式となります。:
variablename.busname.signalname
しかし残念ながら、上記の方法は Simulink Coder でコンパイルされたモデルにおいては機能しません。 Simulink Coder が信号のログをサポートしないためです。
代替の方法としては、次のような方法でバス信号の格納された配列から、 MATLAB 構造体を作成する手順となります。
このページの添付モデルに対しては、以下のような手順となります。
1. To File ブロックを使ってバス信号を MAT-ファイルに保存します。
コンフィギュレーションパラメータ -> コード生成 -> インターフェイス -> データエクスチェンジ の MAT-ファイルのログにチェックをします。
2. モデルのコンパイルをして、EXE を実行します。それぞれに、配列に格納されたバス信号が MAT-ファイル中に得られます。
3. Simulink モデルに関して、次のコマンドでバスオブジェクトを生成します。
busInfo = Simulink.Bus.createObject(mdlName, blkName);
num_el = eval([busInfo.busName '.getNumLeafBusElements']);
elemList = eval([busInfo.busName '.getLeafBusElements']);
4. MAT-ファイルにおける信号データを取得、Time Series オブジェクトの配列を作成します。
load MyFile
for i = 1:num_el
size = elemList(i).Dimensions;
ts{i} = timeseries(data(i+1:i+size,:)',data(1,:)');
end
5. 伝搬する Simulink バスオブジェクト を上述の Time Series オブジェクトと CREATESTRUCTOFTIMESERIES メソッドを使って対応させます。
MYBUS = Simulink.SimulationData.createStrucTOfTimeseries(busInfo.busName,ts);
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!