Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

MATLAB 関数の構造体と Simulink バス信号との接続

この例では、MATLAB® 構造体を Stateflow® チャートで使用する方法を説明します。MATLAB 構造体を使用すると、サイズや型の異なるデータを MATLAB 関数の単一の変数にまとめることができます。MATLAB 構造体の作成により、以下のことができます。

  • 関連するデータを MATLAB 関数のローカル変数または永続変数に格納する

  • ローカル Stateflow 構造体で読み取りまたは書き込みを行う

  • 入力端子または出力端子で Simulink® バス信号とインターフェイスをとる

MATLAB 関数は非バーチャル バスのみをサポートします。詳細については、合成信号のタイプ (Simulink)を参照してください。

MATLAB 関数での構造体の定義

この例では、Stateflow チャートは Simulink バス信号からのデータを処理し、その結果を別の Simulink バス信号に出力します。入力バス信号と出力バス信号の両方が Simulink.Bus (Simulink) オブジェクト BusObject により定義されます。これらのバスには、sbabc の 4 つのフィールドがあります。フィールド sb は、Simulink.Bus オブジェクト SubBus で定義されるバス信号でもあります。これには ele というフィールドがあります。

チャートでは、Simulink バス信号は Stateflow 構造体 in および out とインターフェイスをとります。関数 abc2sbsb2abc は、入力構造体から情報を抽出し、Stateflow 構造体 localbus および subbus に格納します。その後、チャートはこれらのローカル構造体を結合し、出力構造体に書き込みます。Stateflow 構造体の詳細については、Stateflow 構造体を介したバス信号へのアクセスを参照してください。

MATLAB® 関数 sb2abc は、SubBus 型の Stateflow 構造体を取り、BusObject 型の Stateflow 構造体を返します。この関数は入力から得たフィールド ele の値を、ベクトル、3 行 2 列の行列、スカラーの 3 つの要素に分解します。この関数はこれらの要素を、Simulink.Bus オブジェクト BusObject と同じ構造体をもつローカルの MATLAB struct Y に格納します。その後、この関数は MATLAB struct Y の値を出力構造体 y に代入します。

function y = sb2abc(u)
% extract data from input structure
E = int8(magic(3));
A = double(u.ele(1:2,1));
B = uint8(u.ele(:,2:3));
C = double(u.ele(3,1));
% create local structure
X = struct('ele',E);
Y = struct('sb',X,'a',A,'b',B,'c',C);
% assign value to output structure
y = Y;
end

入力構造体と出力構造体の定義

MATLAB 関数で、その関数の入力構造体と出力構造体を定義することにより、ローカルの Stateflow 構造体にアクセスするか、Simulink バス信号とインターフェイスをとります。

  1. ベース ワークスペースで、構造体データ型を定義する Simulink.Bus オブジェクトを作成します。

  2. [シンボル] ペインで、関数の入力または出力を選択します。

  3. プロパティ インスペクターで [型] プロパティを Bus: <object name> に設定します。<object name> は、Stateflow 構造体を定義する Simulink.Bus オブジェクトの名前に置き換えます。

たとえば、関数 sb2abc モデルでは、次のようになります。

  • 入力構造体 u[型] プロパティは Bus: SubBus と指定されます。

  • 出力構造体 y[型] プロパティは Bus: BusObject と指定されます。

詳細については、Stateflow 構造体の定義を参照してください。

ローカル構造体変数と固定構造体変数の定義

関連データを MATLAB 関数内の単一の変数に格納するには、MATLAB struct をローカル変数または永続変数として作成できます。たとえば、関数 sb2abc は 2 つのローカル MATLAB 構造体を定義して、入力構造体 u から抽出したデータを、出力構造体 y に書き込む前に一時的に格納します。

  • X はスカラー struct で、ele という単一のフィールドがあります。このフィールドには int8 型の 3 行 3 列の行列があり、Simulink.Bus オブジェクト SubBus の構造と一致しています。

  • Y はスカラー struct で、4 つのフィールドがあります。sbSubBus 型のサブ構造体、adouble 型の 2 次元ベクトル、buint8 型の 3 行 2 列の行列、cdouble 型のスカラーです。これらのフィールドは、Simulink.Bus オブジェクト BusObject の構造と一致しています。

詳細については、コード生成のためのスカラー構造体の定義 (Simulink)を参照してください。

参考

| (Simulink)

関連するトピック