Main Content

Stateflow.EMChart

MATLAB Function ブロックへの Stateflow のインターフェイス

    説明

    Stateflow.EMChart オブジェクトは、Stateflow® のプログラムによるインターフェイスを使用して MATLAB Function (Simulink) ブロックを構成するために使用します。

    MATLAB Function ブロックは、Simulink® モデルにおけるカスタム機能を定義します。これらのブロックは次のような場合に使用します。

    • カスタム機能をモデル化する既存の MATLAB® 関数がある場合。または、こうした関数を容易に作成できる場合。

    • Simulink グラフィカル言語では取得されない、または取得できないカスタム機能がモデルに必要な場合。

    • Simulink ブロック線図を使うより MATLAB 関数を使う方がカスタム機能のモデル化が容易な場合。

    • モデル化するカスタム機能に連続状態または離散ダイナミクス状態が含まれない場合。動的状態をモデル化するには、S-Function を使用する。MATLAB S-Function の作成と構成 (Simulink)を参照してください。

    詳細については、Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装 (Simulink)を参照してください。

    ヒント

    MATLAB Function ブロックのプロパティは、MATLABFunctionConfiguration (Simulink) オブジェクトを使用してプログラムで構成することもできます。このオブジェクトは MATLAB Function ブロックのプロパティへの直接のインターフェイスを提供します。詳細については、プログラムによる MATLAB Function ブロックの設定 (Simulink)を参照してください。

    作成

    MATLAB Function ブロックには、それぞれに独自の Stateflow.EMChart オブジェクトがあります。MATLAB Function ブロックを Simulink モデルに追加すると、専用の Stateflow.EMChart オブジェクトが自動的に作成されます。たとえば、関数 add_block (Simulink) を使用して、myModel というモデルに MATLAB Function という名前の MATLAB Function を次のように追加できます。

    add_block("simulink/User-Defined Functions/MATLAB Function", ...
       "myModel/MATLAB Function")

    次に、Stateflow.EMChart オブジェクトにアクセスするために、Simulink.Root オブジェクトに対し関数 find を呼び出します。

    block = find(sfroot,"-isa","Stateflow.EMChart", ...
        "Path","myModel/MATLAB Function");

    プロパティ

    すべて展開する

    Stateflow API オブジェクトには、Stateflow エディターで設定した値に対応するプロパティがあります。プロパティにアクセスするかプロパティを変更するには、ドット表記を使用します。複数の API オブジェクトの複数のプロパティにアクセスするか、それらを変更するには、関数 get および関数 set をそれぞれ使用します。詳細については、Stateflow オブジェクトのプロパティの変更と関数の呼び出しを参照してください。

    内容

    MATLAB Function ブロックの名前。string スカラーまたは文字ベクトルとして指定します。

    MATLAB Function ブロックのコード。string スカラーまたは文字ベクトルとして指定します。複数行のコードの入力には次を使用できます。

    • MATLAB 関数 sprintf を呼び出し、\n を使用して改行文字を挿入する。

      str = sprintf("function y=f(x)\ny=x+1;\nend");
      block.Script = str;
    • 関数 newline を使用して改行文字を作成する、連結されたテキスト表現を入力する。

      str = "function y=f(x)" + newline + ...
          "y=x+1;" + newline + ...
          "end";
      block.Script = str;

    MATLAB Function ブロックが可変サイズ データをサポートするかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。詳細については、可変サイズの MATLAB Function ブロック変数の宣言 (Simulink)を参照してください。

    MATLAB Function ブロックが直達セマンティクスをサポートするかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。詳細については、直達を許可 (Simulink)を参照してください。

    MATLAB Function ブロックが列ベクトルを 1 次元データとして出力するかどうか。数値あるいは logical の 0 (false) または 1 (true) として指定します。詳細については、出力列ベクトルを 1 次元データとして解釈 (Simulink)を参照してください。

    R2023a 以降

    少なくとも長さ 1 の 1 つの次元をもつ MATLAB Function ブロックの出力変数が固定サイズかどうか。数値あるいは logical の 0 (false) または 1 (true) として指定します。このプロパティが true の場合、オブジェクトは、次元が 1 であるブロック内の可変サイズの変数を固定サイズに設定します。このプロパティが false の場合、[可変サイズ] プロパティが有効になっているブロック内の変数は常に可変サイズです。R2023a より前では、オブジェクトは、少なくとも長さ 1 の 1 つの次元をもつ変数を固定サイズとして扱います。

    このプロパティは、[可変サイズ] プロパティが有効になっている出力変数にのみ影響します。可変サイズ (Simulink)を参照してください。

    インターフェイス

    この プロパティ は読み取り専用です。

    MATLAB Function ブロックの入力引数。Stateflow.Data オブジェクトの配列として指定します。このプロパティの値は、ブロックの Script プロパティで定義される入力に依存します。

    この プロパティ は読み取り専用です。

    MATLAB Function ブロックの出力引数。Stateflow.Data オブジェクトの配列として指定します。このプロパティの値は、ブロックの Script プロパティで定義される出力に依存します。

    離散時間と連続時間のセマンティクス

    MATLAB Function ブロックのアクティブ化方法。"CONTINUOUS""DISCRETE"、または "INHERITED" として指定します。詳細については、更新方法 (Simulink)を参照してください。

    MATLAB Function ブロックのアクティブ化のサンプル時間。string スカラーまたは文字ベクトルとして指定します。このプロパティは、MATLAB 関数の ChartUpdate プロパティが "DISCRETE" である場合にのみ適用されます。

    整数および固定小数点データ

    MATLAB Function ブロック内のデータが整数オーバーフローで飽和するかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。このプロパティが無効な場合、関数内のデータは整数オーバーフローでラップします。詳細については、整数オーバーフローで飽和 (Simulink)を参照してください。

    Fixed-Point Designer™ fi オブジェクトとして扱う、継承された Simulink 信号。次のいずれかの値として指定します。

    • "Fixed-point"MATLAB Function ブロックはすべての固定小数点入力を fi オブジェクトとして扱います。

    • "Fixed-point & Integer"MATLAB Function ブロックはすべての固定小数点および整数の入力を fi オブジェクトとして扱います。

    MATLAB Function ブロックの既定の fimath プロパティ。次のいずれかの値として指定します。

    • "Same as MATLAB Default" — 現在の既定の fimath オブジェクトと同じ fimath プロパティを使用します。

    • "Other:UserSpecified"InputFimath プロパティを使用して既定の fimath オブジェクトを指定します。

    既定の fimath オブジェクト。string スカラーまたは文字ベクトルとして指定します。MATLAB Function ブロックの EmlDefaultFimath プロパティが "Other:UserSpecified" である場合、このプロパティを使用して次のことが可能です。

    • fimath オブジェクトを構成する式を入力。

    • fimath オブジェクトの変数名を MATLAB またはモデル ワークスペースに入力。

    階層

    この プロパティ は読み取り専用です。

    MATLAB Function ブロックを含むマシン。Stateflow.Machine オブジェクトとして指定します。

    この プロパティ は読み取り専用です。

    モデルの階層構造における MATLAB Function ブロックの場所。文字ベクトルとして指定します。

    MATLAB Function ブロックが開かれたか保存された後に変更されたかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。

    MATLAB Function ブロックがロックされているかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。MATLAB Function ブロック内の変更を防止するには、このプロパティを有効にします。

    この プロパティ は読み取り専用です。

    MATLAB Function ブロックがロックされているかどうか。数値あるいは logical の 1 (true) または 0 (false) として指定します。このプロパティはプロパティ Locked と等価ですが、シミュレーション中の MATLAB Function ブロックの変更を防止するために内部で使用されます。

    識別

    MATLAB Function ブロックの説明。string スカラーまたは文字ベクトルとして指定します。

    MATLAB Function ブロックのドキュメント リンク。string スカラーまたは文字ベクトルとして指定します。

    MATLAB Function ブロックのユーザー定義のタグ。任意の型のデータとして指定します。

    この プロパティ は読み取り専用です。

    一意の識別子。整数スカラーとして指定します。このプロパティを使用して、MATLAB Function ブロックをモデル内の他のオブジェクトと区別します。このプロパティの値は、新しい MATLAB セッションを開始するたびに再割り当てされ、オブジェクトが削除されるとリサイクルされる場合があります。

    オブジェクト関数

    find階層内で指定したオブジェクトの識別
    getChildrenオブジェクトの子の特定
    dialogプロパティ ダイアログ ボックスを開く
    view編集環境でオブジェクトを表示

    すべて折りたたむ

    myModel というモデルにある My Function という名前の MATLAB Function ブロックの Stateflow.EMChart オブジェクトにアクセスします。

    block = find(sfroot,"-isa","Stateflow.EMChart", ...
        "Path","myModel/My Function");

    ベクトルの値の平均と標準偏差を計算する MATLAB コードを string スカラーとして格納します。

    str = "function [mean,stdev] = stats(vals)" + newline + ...
        "% Calculates a statistical mean and a standard" + newline + ...
        "% deviation for the values in vals." + newline + newline + ...
        "len = length(vals);" + newline + ...
        "mean = avg(vals,len);" + newline + ...
        "stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);" + newline + ...
        "plot(vals,""-+"");" + newline + newline + ...
        "function mean = avg(array,size)" + newline + ...
        "mean = sum(array)/size;";

    対応する Stateflow.EMChart オブジェクトの Script プロパティを変更して、ブロックにコードを取り込みます。

    block.Script = str;

    MATLAB Function ブロック エディター (Simulink)で関数を開きます。

    view(block)

    エディターに次のコードが表示されます。

    function [mean,stdev] = stats(vals)
    % Calculates a statistical mean and a standard
    % deviation for the values in vals.
    
    len = length(vals);
    mean = avg(vals,len);
    stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
    plot(vals,"-+");
    
    function mean = avg(array,size)
    mean = sum(array)/size;

    myModel という名前の Simulink モデルを開きます。

    open_system("myModel")

    myModelMy Function という名前の MATLAB Function ブロックを追加します。

    blockPath = "myModel/My Function";
    add_block("simulink/User-Defined Functions/MATLAB Function",blockPath)

    MATLAB 関数 myFunction.m からブロックにコードを取り込みます。

    block = find(sfroot,"-isa","Stateflow.EMChart", ...
        "Path",blockPath);
    block.Script = fileread("myFunction.m");

    myModel という名前の Simulink モデルを開きます。

    open_system("myModel")

    モデルに含まれる MATLAB Function ブロックをライブラリ内のブロックも含めて検索します。

    blocks = find(sfroot,"-isa","Stateflow.EMChart");

    メモ

    このコマンドは、開いているすべてのモデルとライブラリから MATLAB Function ブロックのオブジェクトを検索します。myModel に含まれる MATLAB Function ブロックのみを検索するには、myModel 以外のすべてのファイルを閉じるか、sfrootget_param("myModel","Object") に置き換えます。

    ブロックの数をカウントします。

    numel(blocks)

    バージョン履歴

    R2011a で導入

    すべて展開する