Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MATLAB 関数内の Simulink バス信号へのアクセス

この例では、MATLAB® 構造体と Stateflow® 構造体を使用して、MATLAB 関数内の Simulink® バス信号の読み取りと書き込みを行う方法を説明します。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 とインターフェイスをとります。関数 sb2abc は入力構造体から情報を抽出し、ローカルの Stateflow 構造体 localbus に格納します。その後、チャートはローカル構造体の値と、構造体配列 subBusArray の要素の値を結合して、出力構造体に書き込みます。Stateflow 構造体の内容、または Stateflow 構造体の配列の内容へのアクセスと変更の詳細については、Stateflow 構造体へのインデックス付けと値の割り当てを参照してください。

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

function y = sb2abc(u)
% extract data from input structure
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=int8(zeros(3)));
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)

関連するトピック