バス信号について、そ​のバス要素の階層・体​系を保持しつつ、 Simulink モデルから MATLAB ワークスペースへと信​号の保存をするにはど​のようにしますか?

11 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2011 年 8 月 1 日
複雑な Simulink モデルにおいて、多くの異なる信号に関してデータ出力をしたいと考えています。モデル上にて関連性のある信号は全てバスを生成して、その信号名とともに構造を保って、解析がし易いように MATLAB ワークスペースへバス信号を出力したいです。
To Workspace ブロック、 Outport ブロックを使って試していますが、信号は個々に配列となり、ベースワークスペースへと出力されます。

採用された回答

MathWorks Support Team
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 件)

カテゴリ

Help Center および File Exchange合成信号 についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!