バス信号について、そ​のバス要素の階層・体​系を保持しつつ、 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 CenterFile Exchange에서 合成信号에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!