Main Content

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

真理値表を使用して組み合わせ論理をモデル化

真理値表は、簡潔な表形式で組み合わせ論理設計を実装します。一般的に真理値表は、次のような論理判定に使用されます。

  • 故障検出と管理

  • モードの切り替え

真理値表は、Simulink® でのみサポートされます。

Truth Table ブロックは、Simulink モデルに直接追加することも、Stateflow® チャート、ステート、またはサブチャートで定義することもできます。Simulink モデルの Truth Table ブロックは Simulink ブロックとして実行されますが、Stateflow チャートの真理値表関数は、その真理値表関数を呼び出した場合のみ実行されます。関数の場所により、その関数を呼び出すことのできるステートと遷移の集合が判定されます。

  • ある特定のステートまたはサブチャートとそのサブステートの内部から関数を呼び出す場合は、真理値表関数を該当するステートまたはサブチャートに配置します。この関数は、そのステートまたはサブチャートの親や先祖に含まれる同じ名前の関数よりも優先されます。

  • チャートの任意の部分から関数を呼び出す場合は、真理値表関数をチャート レベルに配置します。

  • 関数をモデル内の任意のチャートから呼び出す場合は、真理値表をチャート レベルに配置し、チャートレベルの関数のエクスポートを有効にします。詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。

メモ

真理値表関数は、Stateflow 階層で自分より上のチャートとステート データにアクセスできます。

真理値表のレイアウト

以下の真理値表関数の名前は ttable です。3 つの引数 (xy および z) を取り、1 つの出力値 (r) を返します。

関数は、以下の条件、判定、アクションを並べて構成されています。

条件

判定 1

判定 2

判定 3

判定 4

x == 1

T

F

F

-

y == 1

F

T

F

-

z == 1

F

F

T

-

アクション

r = 1r = 2r = 3r = 4

[条件] 列で入力された各条件は、必ず真 (非ゼロ値) または偽 (ゼロ値) として評価されます。各条件の結果は、T (真)、F (偽)、または - (真または偽) として指定されます。各判定列は、論理 AND によって各条件結果を複合条件に結合しています。この複合条件が判定と呼ばれます。

1 つの判定ごとに、[判定 1] から順番に真理値表を評価します。[判定 4] は、残りのすべての判定を対象とします。いずれかの判定が真である場合は、真理値表は関連付けられたアクションを実行します。これで真理値表の実行は完了します。

たとえば、条件 x == 1y == 1 が偽、条件 z == 1 が真である場合は、[判定 3] が真になり、変数 r は 3 に設定されます。残りの判定はテストされず、真理値表の評価は終了します。最初の 3 つの判定が偽である場合は、既定の判定が自動的に真になり、そのアクション (r=4) が実行されます。次の表は、この真理値表の例の評価に対応する疑似コードを示しています。

疑似コード

説明

if ((x == 1) & !(y == 1) & !(z == 1))
  r = 1;

[判定 1] が真の場合は r=1 を設定。

elseif (!(x == 1) & (y == 1) & !(z == 1))
  r = 2;

[判定 2] が真の場合は r=2 を設定。

elseif (!(x == 1) & !(y == 1) & (z == 1))
  r = 3;

[判定 3] が真の場合は r=3 を設定。

else
  r = 4;
endif

他のすべての判定が偽の場合は既定の判定が真。r=4 を設定。

真理値表関数の定義

真理値表関数を定義するには、次の手順に従います。

  1. オブジェクト パレットで、真理値表関数のアイコン をクリックします。チャート内で新しい真理値表関数の場所までポインターを移動します。

  2. 関数のシグネチャ ラベルを入力します。

    関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。シグネチャ ラベルの構文は以下のとおりです。

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    複数の戻り値と複数の入力引数を指定できます。戻り値と入力引数として、値のスカラー、ベクトル、または行列を指定できます。戻り値が 1 つのみの関数では、シグネチャ ラベルの大かっこを省略します。

    引数と戻り値の両方に同じ変数名を使用できます。たとえば、以下のシグネチャ ラベルをもつ関数では、変数 y1 および y2 を、入力と出力の両方として使用します。

    [y1,y2,y3] = f(y1,u,y2)
    この関数を C コードにエクスポートすると、y1 および y2 は参照によって (ポインターとして) 渡され、u は値によって渡されます。入力を参照によって渡すと、生成されたコードが中間データをコピーする回数が減少するため、コードがより最適化されます。

    メモ

    チャート シンボルの名前を関数の引数や戻り値として使用しないでください。たとえば、x または y がチャート データの場合、シグネチャ y = f(x) を使用して関数を定義するとランタイム エラーが発生します。

  3. 関数をプログラミングするには、関数ボックスをダブルクリックして真理値表エディターを開きます。

  4. 真理値表エディターで、条件、判定、アクションを追加します。詳細については、真理値表のプログラミングを参照してください。

  5. モデル エクスプローラーで、チャート オブジェクトを展開して真理値表関数を選択します。関数に属するデータ項目として、関数シグネチャの引数と戻り値が表示されます。引数のスコープは Input です。戻り値のスコープは Output です。

  6. データ プロパティの設定の説明に従って、各引数および戻り値の [データ] プロパティ ダイアログ ボックスで、データ プロパティを指定します。

  7. 関数に必要な追加のデータ項目を作成します。詳細については、モデル エクスプローラーによるデータの追加を参照してください。

    関数からは、専用のデータや、親ステートまたはチャートに属しているデータにアクセスできます。関数内のデータ項目には、以下のいずれかのスコープを設定できます。

    • Constant — すべての関数呼び出しで、その初期値を保持する定数データ。

    • Parameter — すべての関数呼び出しで、その初期値を保持するパラメーター データ。

    • Local — 関数呼び出し後、次回の関数呼び出しまで保持されるローカル データ。アクション言語として C を使用する真理値表でのみ有効です。

    • Temporary — 関数呼び出しが開始されるたびに初期化される一時データ。アクション言語として C を使用する真理値表でのみ有効です。

    C をアクション言語として使用する真理値表関数では、シミュレーション全体で関数呼び出しの間でデータ値を維持する場合、ローカル データを定義します。関数呼び出しが開始されるたびにデータ値を初期化する場合は、一時データを定義します。たとえば、関数の呼び出し回数を追跡する場合は、[ローカル] スコープを使用してカウンターを定義できます。一方、関数の完了後にカウンター値を維持する必要がない場合は、ループ カウンターが [一時的] スコープをもつよう指定できます。

    MATLAB® をアクション言語として使用する真理値表関数では、ローカル データまたは一時的な関数データを定義する必要はありません。未定義の変数を使用すると、Stateflow は関数の残りの部分で使用可能な一時変数を作成します。関数の呼び出しの間で維持される値を格納するため、関数はチャート レベルでローカル データにアクセスできます。

    ヒント

    関数のローカル データと一時データは MATLAB ワークスペースから初期化できます。詳細については、MATLAB ベース ワークスペースからのデータの初期化を参照してください。

ステートおよび遷移での真理値表関数の呼び出し

真理値表関数は、任意のステートまたは遷移のアクションから呼び出すことが可能です。真理値表関数は、他の関数からも呼び出すことができます。真理値表関数をエクスポートする場合は、モデル内の任意のチャートから呼び出すことができます。関数のエクスポートの詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。

真理値表関数の呼び出しの構文は関数シグネチャと同じで、シグネチャで指定されている仮引数を実際の引数に置き換えます。実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。

真理値表関数を呼び出すには、関数シグネチャを使用し、関数シグネチャの各仮引数に実際の引数の値を設定します。実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。

真理値表関数のプロパティの指定

真理値表関数のプロパティは、モデル エクスプローラーまたは [真理値表] プロパティ ダイアログ ボックスで指定できます。

  • モデル エクスプローラーを使用するには、次を行います。

    1. モデル エクスプローラーを開くには、[モデル化] タブで [モデル エクスプローラー] を選択します。

    2. [モデルの階層構造] ペインで、真理値表関数を選択します。

    3. [真理値表] ペインで、真理値表関数のプロパティを編集します。

  • [真理値表] プロパティ ダイアログ ボックスを使用するには、次を行います。

    1. Stateflow エディターで、真理値表関数を右クリックします。

    2. [プロパティ] を選択します。

    3. 真理値表関数のプロパティを編集します。

真理値表関数のプロパティは、Stateflow.TruthTable オブジェクトを使用してプログラムで指定することもできます。Stateflow プログラム インターフェイスの詳細については、Overview of the Stateflow APIを参照してください。

名前

関数名。関数名のリンクをクリックすると、関数がネイティブ チャートの前面に表示されます。

関数インライン オプション

生成コード内の関数のインライン化を制御します。

  • 自動 — 内部計算に基づいて関数をインライン化するかどうかを判定します。

  • インライン化 — 他のチャートにエクスポートせず、反復処理の一部に含まれていない場合、関数はインライン化されます (反復処理が発生するのは、関数が自分自身を直接的に呼び出している場合や、他の関数呼び出しを介して間接的に呼び出している場合です)。

  • 関数 — 関数をインライン化しません。

ラベル

関数のシグネチャ ラベル。関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。

過少指定

真理値表関数における過少指定の診断のレベルを制御します。詳細については、真理値表の過剰指定と過少指定の修正を参照してください。

過剰指定

真理値表関数における過剰指定の診断のレベルを制御します。詳細については、真理値表の過剰指定と過少指定の修正を参照してください。

アクション言語

Stateflow 真理値表関数のアクション言語を制御します。MATLAB または C を選択します。詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。

説明

関数の説明。階層内の関数について簡単な説明を入力できます。

ドキュメント リンク

関数のオンライン ドキュメンテーションへのリンク。適切なオンライン形式 (HTML ファイルや MATLAB コマンド ウィンドウのテキストなど) でドキュメンテーションを表示する、Web の URL アドレスまたは MATLAB コマンドを入力できます。[ドキュメント リンク] ハイパーリンクをクリックすると、Stateflow にドキュメンテーションが表示されます。

Truth Table ブロックのプロパティの指定

[真理値表] プロパティ ダイアログ ボックスを開くには、[モデル化] タブで [テーブル プロパティ] をクリックします。

Truth Table ブロックのプロパティは、真理値表関数のプロパティと、MATLAB をアクション言語として使用するチャートの組み合わせです。各プロパティの説明については、真理値表関数のプロパティの指定およびStateflow チャートのプロパティの指定を参照してください。

Truth Table ブロックのプロパティは、Stateflow.TruthTableChart オブジェクトを使用してプログラムで指定することもできます。Stateflow プログラム インターフェイスの詳細については、Overview of the Stateflow APIを参照してください。

参考

関連するトピック