このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MATLAB 関数内の Simulink バス信号へのアクセス
この例では、MATLAB® バスと Stateflow® バスを使用して、MATLAB 関数内の Simulink® バス信号の読み取りと書き込みを行う方法を説明します。MATLAB 構造体を使用すると、サイズや型の異なるデータを単一の変数にまとめることができます。MATLAB 構造体の作成により、以下のことができます。
関連するデータを MATLAB 関数のローカル変数または永続変数に格納する
ローカル Stateflow バスで読み取りまたは書き込みを行う
入力端子または出力端子の位置で Simulink バス信号とインターフェイスをとる
MATLAB 関数は非バーチャル バスのみをサポートします。詳細については、合成インターフェイスのガイドライン (Simulink)を参照してください。
MATLAB 関数での構造体の定義
この例では、Stateflow チャートは Simulink バス信号からのデータを処理し、その結果を別の Simulink バス信号に出力します。入力バス信号と出力バス信号の両方が Simulink.Bus
(Simulink) オブジェクト BusObject
により定義されます。これらのバスには、sb
、a
、b
、c
の 4 つのフィールドがあります。フィールド sb
は、Simulink.Bus
オブジェクト SubBus
で定義されるバス信号でもあります。これには ele
というフィールドがあります。
チャートでは、Simulink バス信号は Stateflow バス in
および out
とインターフェイスをとります。関数 sb2abc
は入力バスから情報を抽出し、ローカルの Stateflow バス localbus
に格納します。その後、チャートはローカル バスの値と、構造体配列 subBusArray
の要素の値を結合して、出力バスに書き込みます。Stateflow バスの内容、または Stateflow バスの配列の内容へのアクセスと変更の詳細については、Stateflow 構造体へのインデックス付けと値の割り当てを参照してください。
MATLAB® 関数 sb2abc
は、SubBus
型の Stateflow バスを取り、BusObject
型の Stateflow バスを返します。この関数は入力から得たフィールド ele
の値を、ベクトル、3 行 2 列の行列、スカラーの 3 つの要素に分解します。この関数は、Simulink.Bus
オブジェクト BusObject
と同じフィールドをもつローカルの MATLAB
にこれらの要素を格納します。その後、この関数は MATLAB struct
struct
の値を出力バス y
に代入します。
X
はスカラーstruct
で、ele
という単一のフィールドがあります。このフィールドにはint8
型の 3 行 3 列の行列があり、Simulink.Bus
オブジェクトSubBus
のレイアウトと一致しています。Y
はスカラーstruct
で、4 つのフィールドがあります。sb
はSubBus
型のサブ構造体、a
はdouble
型の 2 次元ベクトル、b
はuint8
型の 3 行 2 列の行列、c
はdouble
型のスカラーです。これらのフィールドは、Simulink.Bus
オブジェクトBusObject
のレイアウトと一致しています。
function y = sb2abc(u)
% extract data from input bus
A = double(u.ele(1:2,1)); B = uint8(u.ele(:,2:3)); C = double(u.ele(3,1));
% create local bus
X = struct(ele=int8(zeros(3))); Y = struct(sb=X,a=A,b=B,c=C);
% assign value to output bus
y = Y;
end
入力構造体と出力構造体の定義
MATLAB 関数の Simulink バス信号を使ってローカルの Stateflow バスやインターフェイスにアクセスするには、その関数の入力バスと出力バスを定義します。
Simulink ベース ワークスペースで、バス データ型を定義する
Simulink.Bus
オブジェクトを作成します。[シンボル] ペインで、関数の入力または出力を選択します。
[プロパティ インスペクター] で [型] プロパティを
Bus: <object name>
に設定します。<object name> は、Stateflow バスを定義するSimulink.Bus
オブジェクトの名前に置き換えます。
たとえば、関数 sb2abc
モデルでは、次のようになります。
入力
u
の [型] プロパティはBus: SubBus
と指定されます。出力
y
の [型] プロパティはBus: BusObject
と指定されます。
詳細については、Stateflow バスの定義を参照してください。
ローカル構造体変数と固定構造体変数の定義
関連データを MATLAB 関数内の単一の変数に格納するには、MATLAB struct
をローカル変数または永続変数として作成できます。たとえば、関数 sb2abc
は 2 つのローカル MATLAB 構造体を定義して、入力バス u
から抽出したデータを、出力バス y
に書き込む前に一時的に格納します。
詳細については、コード生成のためのスカラー構造体の定義 (Simulink)を参照してください。
参考
struct
| Simulink.Bus
(Simulink)