このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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
に代入します。
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 バス信号とインターフェイスをとったりすることができます。
ベース ワークスペースで、構造体データ型を定義する
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
に書き込む前に一時的に格納します。
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
の構造と一致しています。
詳細については、コード生成のためのスカラー構造体の定義 (Simulink)を参照してください。
参考
struct
| Simulink.Bus
(Simulink)