バス信号を、信号名と構造を保って 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);