Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

生成された Stateflow 真理値表の内容の表示

モデルのシミュレーションを実行する際に、真理値表の内容を生成します。真理値表が変化するたびに、その内容は再生成されます。生成された真理値表の内容を表示するには、[生成した内容の表示] ボタン をクリックします。C をアクション言語として使用する Stateflow® チャートは、内容をグラフィカル関数として生成します。MATLAB® をアクション言語として使用する Stateflow チャートは、内容を MATLAB コードとして生成します。

Stateflow ソフトウェアで真理値表のグラフィカル関数を生成する方法

この節では、Stateflow ソフトウェアで C 言語の真理値表のロジックをグラフィカル関数に変換する方法について説明します。

以下の例の C 言語の真理値表には、3 つの条件、4 つの判定とアクションおよび初期アクションと最終アクションが含まれています。

Stateflow ソフトウェアは、前述の真理値表に対応するグラフィカル関数を生成します。フロー チャートの上半分は以下のようになります。

フロー チャートの上半分では、以下の処理が実行されます。

  • 初期アクションを実行

  • 条件を評価して、一時データ変数にその結果を格納

    条件を格納するための一時データは、条件に対して入力したラベルに基づいて判定されます。ラベルを指定していない場合は、一時データ変数が使用されます。

フロー チャートの下半分は以下のようになります。

フロー チャートの下半分では、どの判定が真であり、どのアクションを実行するのかを判定するために、条件の格納値が使用されます。各判定は、コネクティブ ジャンクションからの分岐として表現されます。この分岐には、有効なパスが 1 つまたは 2 つ含まれています。

  • 判定を含む遷移セグメントに続いて、その結果のアクションを含むセグメント

    このアクションは、FINAL アクションを導いて、フロー チャートを終了する条件アクションとして表示されます。

  • 次の判定を評価するために次の分岐に至る遷移セグメント

    この遷移セグメントには、条件またはアクションが含まれていません。

最初の判定から残りの判定まで、左から右の列順で、上記の要領で実装が行われます。判定が一致すると、遷移セグメントの条件アクションとして、その判定のアクションが実行されます。このアクションが実行された後、フロー チャートは真理値表の最終アクションを実行して終了します。したがって、真理値表のグラフィカル関数の呼び出しによって発生するのは、単一のアクションのみになります。この動作は、異なる判定間ではデータ依存性は成立しないことも意味しています。

Stateflow ソフトウェアで真理値表の MATLAB コードを生成する方法

Stateflow ソフトウェアは、MATLAB 真理値表の内容を MATLAB コードとして生成します。生成されたコードでは、各アクションはメイン真理値表関数内に入れ子関数として表されます。

入れ子関数には以下のような利点があります。

  • 入れ子関数は、互いに独立しています。変数は各関数のローカル変数として処理され、命名による競合が発生することはありません。

  • 入れ子関数は、メイン真理値表関数からすべてのデータにアクセスできます。

生成された内容は関数エディターに表示されます。このエディターにはシミュレーションやデバッグ用のツールが用意されています。

以下に示すのは、真理値表のアクションのプログラミングの説明に従って生成された MATLAB 真理値表の内容です。

  • メイン真理値表関数

    function r = ttable(x,y,z)
    
    % Initialize condition vars to logical scalar
    XEQ1 = false;
    YEQ1 = false;
    ZEQ1 = false;
    
    % Condition #1, "XEQ1"
    % x is equal to 1
    XEQ1 = logical(x == 1);
    
    % Condition #2, "YEQ1"
    % y is equal to 1
    YEQ1 = logical(y == 1);
    
    % Condition #3, "ZEQ1"
    % z is equal to 1
    ZEQ1 = logical(z == 1);
    
    if (XEQ1 && ~YEQ1 && ~ZEQ1) % D1
        A1();
    elseif (~XEQ1 && YEQ1 && ~ZEQ1) % D2
        A2();
    elseif (~XEQ1 && ~YEQ1 && ZEQ1) % D3
        A3();
    else % Default
        A4();
    end
  • アクション A1

    function A1()
    % Action #1, "A1"
    % Maintain a counter and a circular vector of length 6.
    % Every time this action is called,
    % output t takes the next value of the vector.
    
    persistent values counter;
    cycle = 6;
    
    if isempty(counter)
      % Initialize counter to be zero
      counter = 0;
    else
      % Otherwise, increment counter
      counter = counter + 1;
    end
    
    if isempty(values)
      % Values is a vector of 1 to cycle
      values = zeros(1, cycle);
      for i = 1:cycle
        values(i) = i;
      end
    
      % For debugging purposes, call the MATLAB
      %  function "plot" to show values
      plot(values);
    end
    
    % Output r takes the next value in values vector
    r = values( mod(counter, cycle) + 1);
  • アクション A2A3、および A4

    function A2()
    % Action #2, "A2"
    % set r to 2
    
    r=2;
    
    %==================================
    function A3()
    % Action #3, "A3"
    % set r to 3
    
    r=3;
    
    %==================================
    function A4()
    % Action #4, "A4"
    % set r to 4
    
    r=4;

関連するトピック