真理値表を使用して組み合わせ論理をモデル化
真理値表は、表形式で組み合わせ論理設計を実装します。Stateflow® の真理値表を使用して、故障検出と管理、およびモード切り替えの論理判定をモデル化できます。
Stateflow チャートの真理値表関数は、その真理値表関数を呼び出した場合にのみ実行されます。真理値表関数は、Stateflow のチャート、ステート、またはサブステートで定義できます。関数の場所により、その関数を呼び出すことのできるステートと遷移の集合が判定されます。
ある特定のステートまたはサブチャートとそのサブステートの内部から関数を呼び出す場合は、真理値表関数を該当するステートまたはサブチャートに配置します。この関数は、そのステートまたはサブチャートの親や先祖に含まれる同じ名前の関数よりも優先されます。
チャートの任意の部分から関数を呼び出す場合は、真理値表関数をチャート レベルに配置します。
関数をモデル内の任意のチャートから呼び出す場合は、真理値表をチャート レベルに配置し、チャートレベルの関数のエクスポートを有効にします。詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。
真理値表関数は、Stateflow 階層で自分より上のチャートとステート データにアクセスできます。
あるいは、より直接的に判定ロジックを実装するには、Truth Table ブロックを Simulink® モデルに直接追加できます。Truth Table ブロックで制御ロジックを実装するには、MATLAB® をアクション言語として使用します。
真理値表のレイアウト
以下の真理値表関数の名前は ttable
です。3 つの引数 (x
、y
および z
) を取り、1 つの出力値 (r
) を返します。
関数は、以下の条件、判定、アクションを並べて構成されています。
条件 | 判定 1 | 判定 2 | 判定 3 | 判定 4 |
---|---|---|---|---|
x == 1 | T | F | F | - |
y == 1 | F | T | F | - |
z == 1 | F | F | T | - |
アクション | r = 1 | r = 2 | r = 3 | r = 4 |
[条件] 列で入力された各条件は、必ず真 (非ゼロ値) または偽 (ゼロ値) として評価されます。各条件の結果は、T (真)、F (偽)、または - (真または偽) として指定されます。各判定列は、論理 AND によって各条件結果を複合条件に結合しています。この複合条件が判定と呼ばれます。
1 つの判定ごとに、[判定 1] から順番に真理値表を評価します。[判定 4] は、残りのすべての判定を対象とします。いずれかの判定が真である場合は、真理値表は関連付けられたアクションを実行します。これで真理値表の実行は完了します。
たとえば、条件 x == 1
と y == 1
が偽、条件 z == 1
が真である場合は、[判定 3] が真になり、変数 r
は 3 に設定されます。残りの判定はテストされず、真理値表の評価は終了します。最初の 3 つの判定が偽である場合は、既定の判定が自動的に真になり、そのアクション (r=4
) が実行されます。次の表は、この真理値表の例の評価に対応する疑似コードを示しています。
疑似コード | 説明 |
---|---|
if ((x == 1) & !(y == 1) & !(z == 1)) r = 1; | [判定 1] が真の場合は |
elseif (!(x == 1) & (y == 1) & !(z == 1)) r = 2; | [判定 2] が真の場合は |
elseif (!(x == 1) & !(y == 1) & (z == 1)) r = 3; | [判定 3] が真の場合は |
else r = 4; endif | 他のすべての判定が偽の場合は既定の判定が真。 |
真理値表関数の定義
真理値表関数を定義するには、次の手順に従います。
オブジェクト パレットで、真理値表関数のアイコン
をクリックします。
チャート キャンバスで、新しい真理値表関数の位置をクリックします。
関数のシグネチャ ラベルを入力します。
関数のシグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。シグネチャ ラベルの構文は以下のとおりです。
複数の戻り値と複数の入力引数を指定できます。戻り値と入力引数として、値のスカラー、ベクトル、または行列を指定できます。戻り値が 1 つのみの関数では、シグネチャ ラベルの大かっこを省略します。[return_val1,return_val2,...] = function_name(arg1,arg2,...)
引数と戻り値の両方に同じ変数名を使用できます。入力と出力で同じ変数を使用する場合は、"インプレース データ" を作成します。たとえば、以下のシグネチャ ラベルをもつ関数では、変数
y1
およびy2
を、入力と出力の両方として使用します。この関数を C コードにエクスポートすると、生成コードは[y1,y2,y3] = f(y1,u,y2)
y1
およびy2
を参照渡しされたインプレース引数として処理します。インプレース データを使用すると、生成コードが中間データをコピーする回数が減少するため、コードがより効率的になります。[シンボル] ペインおよびモデル エクスプローラーでは、関数に属するデータ項目として、関数シグネチャの引数と戻り値が表示されます。引数のスコープは
[入力]
です。戻り値のスコープは[出力]
です。データ プロパティの設定の説明に従って、各引数および戻り値のデータ プロパティを指定します。引数と戻り値が同じ名前である場合、引数のプロパティのみを編集できます。戻り値のプロパティは読み取り専用です。
関数をプログラミングするには、関数ボックスをダブルクリックして真理値表エディターを開きます。
真理値表エディターで、条件、判定、アクションを追加します。詳細については、真理値表のプログラミングを参照してください。
関数に必要な追加のデータ項目を作成します。詳細については、モデル エクスプローラーによるデータの追加を参照してください。
関数からは、専用のデータや、親ステートまたはチャートに属しているデータにアクセスできます。関数内のデータ項目には、以下のいずれかのスコープを設定できます。
Constant
— すべての関数呼び出しで、その初期値を保持する定数データ。Parameter
— すべての関数呼び出しで、その初期値を保持するパラメーター データ。Local
— 関数呼び出し後、次回の関数呼び出しまで保持されるローカル データ。アクション言語として C を使用する真理値表でのみ有効です。Temporary
— 関数呼び出しが開始されるたびに初期化される一時データ。アクション言語として C を使用する真理値表でのみ有効です。
C をアクション言語として使用する真理値表関数では、シミュレーション全体で関数呼び出しの間でデータ値を維持する場合、ローカル データを定義します。関数呼び出しが開始されるたびにデータ値を初期化する場合は、一時データを定義します。たとえば、関数の呼び出し回数を追跡する場合は、
[ローカル]
スコープを使用してカウンターを定義できます。一方、関数の完了後にカウンター値を維持する必要がない場合は、ループ カウンターが[一時的]
スコープをもつよう指定できます。MATLAB をアクション言語として使用する真理値表関数では、ローカル データまたは一時的な関数データを定義する必要はありません。代わりに、これらの関数では、未定義の変数を使用して、関数呼び出しの残りの部分でのみアクセス可能な値を格納できます。関数の呼び出し全体で維持される値を格納するには、チャート レベルでローカル データを使用します。
ヒント
関数のローカル データと一時データは MATLAB ワークスペースから初期化できます。詳細については、MATLAB ベース ワークスペースからのデータの初期化を参照してください。
ステートおよび遷移での真理値表関数の呼び出し
真理値表関数は、任意のステートまたは遷移のアクション、または他の関数から呼び出すことができます。真理値表関数をエクスポートする場合は、モデル内の任意のチャートから呼び出すことができます。関数のエクスポートの詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。
真理値表関数を呼び出すには、関数シグネチャを使用し、関数シグネチャの各仮引数に実際の引数の値を設定します。
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。
真理値表関数のプロパティの指定
以下に示すプロパティは、真理値表関数が Stateflow チャート内の他のコンポーネントとどのように相互作用するかを指定できます。これらのプロパティは、[プロパティ インスペクター]、モデル エクスプローラー、または [真理値表] プロパティ ダイアログ ボックスで変更できます。
[プロパティ インスペクター] を使用するには、次を行います。
[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
Stateflow エディターで、真理値表関数を選択します。
[プロパティ インスペクター] で、真理値表関数のプロパティを編集します。
モデル エクスプローラーを使用するには、次を行います。
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、真理値表関数を選択します。
[ダイアログ] ペインで、真理値表関数のプロパティを編集します。
[真理値表] プロパティ ダイアログ ボックスを使用するには、次を行います。
Stateflow エディターで、真理値表関数を右クリックします。
[プロパティ] を選択します。
プロパティ ダイアログ ボックスで、真理値表関数のプロパティを編集します。
これらのプロパティは、Stateflow.TruthTable
オブジェクトを使用してプログラムで変更することもできます。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。
名前
関数名。関数名のリンクをクリックすると、関数がネイティブ チャートの前面に表示されます。
関数インライン オプション
生成コード内の関数のインライン化を制御します。
自動
— 内部計算に基づいて関数をインライン化するかどうかを判定します。インライン化
— 他のチャートにエクスポートせず、反復処理の一部に含まれていない場合、関数はインライン化されます (反復処理が発生するのは、関数が自分自身を直接的に呼び出している場合や、他の関数呼び出しを介して間接的に呼び出している場合です)。関数
— 関数をインライン化しません。
このプロパティは、[プロパティ インスペクター] では使用できません。
ラベル
関数のシグネチャ ラベル。関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。このプロパティは、[プロパティ インスペクター] では使用できません。
過少指定
真理値表関数における過少指定の診断のレベルを制御します。詳細については、真理値表の過剰指定と過少指定の修正を参照してください。
過剰指定
真理値表関数における過剰指定の診断のレベルを制御します。詳細については、真理値表の過剰指定と過少指定の修正を参照してください。
アクション言語
Stateflow 真理値表関数のアクション言語を制御します。MATLAB または C を選択します。このプロパティは、C をアクション言語として使用するチャートでのみ使用できます。詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。
説明
真理値表関数の説明。
ドキュメント リンク
真理値表関数のオンライン ドキュメンテーションへのリンク。HTML ファイルまたは MATLAB コマンド ウィンドウのテキストとしてドキュメンテーションを表示する、Web の URL アドレスまたは MATLAB コマンドを入力できます。[ドキュメント リンク] ハイパーリンクをクリックすると、Stateflow でリンクが評価され、ドキュメンテーションが表示されます。
Truth Table ブロックのプロパティの指定
Truth Table ブロックのプロパティは、真理値表が Simulink モデルとどのように連動するかを指定します。これらのプロパティは、[プロパティ インスペクター]、モデル エクスプローラー、または [真理値表] プロパティ ダイアログ ボックスで変更できます。
[プロパティ インスペクター] を使用するには、次を行います。
[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
Stateflow エディターで、真理値表をクリックします。
[プロパティ インスペクター] で、真理値表のプロパティを編集します。
モデル エクスプローラーを使用するには、次を行います。
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、真理値表を選択します。
[ダイアログ] ペインで、真理値表のプロパティを編集します。
[真理値表] プロパティ ダイアログ ボックスを使用するには、次を行います。
Stateflow エディターを開きます。
[モデル化] タブで [テーブル プロパティ] をクリックします。
プロパティ ダイアログ ボックスで、真理値表のプロパティを編集します。
これらのプロパティは、Stateflow.TruthTableChart
オブジェクトを使用してプログラムで変更することもできます。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。
ヒント
Truth Table ブロックのプロパティは、真理値表関数のプロパティと、MATLAB をアクション言語として使用するチャートの組み合わせです。各プロパティの説明については、真理値表関数のプロパティの指定およびStateflow チャートのプロパティの指定を参照してください。
参考
ブロック
オブジェクト
ツール
- モデル エクスプローラー (Simulink)