このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
真理値表のプログラミング
真理値表を作成したら、仕様に従って実行するようにプログラミングできます。真理値表をプログラミングするには、条件、判定、アクションを追加します。真理値表の作成の詳細については、真理値表を使用して組み合わせ論理をモデル化を参照してください。
真理値表は、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。詳細については、真理値表を使用して組み合わせ論理をモデル化を参照してください。
真理値表を編集用に開く
チャートまたは Simulink® モデルで真理値表を作成してラベルを付加してから、論理的な動作を指定します。これらの仕様は、Simulink モデルの Truth Table ブロックと、Stateflow チャートの真理値表関数の両方に当てはまります。この例では、真理値表関数の動作を指定します。
真理値表を開くには、真理値表を使用して組み合わせ論理をモデル化で作成した真理値表関数 ttable
をダブルクリックします。
既定の真理値表には、それぞれ 1 行の [条件テーブル]と [アクション テーブル] が含まれています。[条件テーブル] には、単一の判定列 [D1] と単一のアクション行が含まれています。
アクション言語の選択
アクション言語として C を使用する Stateflow チャート内に真理値表がある場合、Stateflow 真理値表のアクション言語を指定できます。
[プロパティ インスペクター] を開きます。[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
[プロパティ] セクションで、[C] または [MATLAB] をアクション言語として選択します。
MATLAB をアクション言語として使用する Stateflow チャートは、MATLAB をアクション言語として使用する真理値表のみをサポートします。
真理値表条件の入力
真理値表の論理的な動作を指定する際には、条件の指定から始めます。新しい真理値表 ttable
を編集のために開きます。ttable
の動作のプログラミングを、条件を指定することから開始します。
[条件テーブル]の [条件] 列に条件を入力します。入力する条件ごとに、[説明] 列に説明を任意で入力できます。真理値表 ttable
の条件を入力するには、次のようにします。
追加を行う [条件テーブル] 上の行をクリックします。
サイド パネルの [行の追加] ボタン
を 2 回クリックします。
真理値表で [条件テーブル] の下部に 2 つの行が追加されます。
[条件テーブル] ペインと [アクション テーブル] ペインを分割しているバーをクリックして下方向にドラッグし、[条件テーブル] ペインの表示を広げます。
[条件テーブル] で、[説明] 列の一番上のセルをクリックします。
セルが強調表示され、カーソルが、点滅した状態でセル内に表示されます。
次のテキストを入力します。
x is equal to 1
右側にある次のセル ([条件] 列) をクリックします。
[条件] 列の最初のセルで、次を入力します。
XEQ1:
このテキストは、オプションとして条件に含めることが可能なラベルです。各ラベルの先頭には英字 (
[a-z][A-Z]
)、続けて任意の数の英数字 ([a-z][A-Z][0-9]
) またはアンダースコア (_
) を使用しなければなりません。Enter キーを押し、次のテキストを入力します。
x == 1
このテキストは、実際の条件です。入力した各条件は、必ずゼロ (偽) または非ゼロ (真) として評価されます。条件にはオプションで大かっこを使用できます (たとえば、
[x == 1]
)。真理値表関数に受け渡されたデータは、真理値表条件でその引数を介して使用できます。前述の条件は、引数
x
が 1 に等しいかどうかをテストします。チャートなど、真理値表の親オブジェクトに対して定義されたデータを使用することも可能です。前述の手順を繰り返して、他の 2 つの条件を入力します。
真理値表判定の入力
各判定列 (D1、D2 など) は、AND 関係に基づいて条件結果のグループを単一の判定に結合します。判定の条件結果で許容される値は、T
(真)、F
(偽)、および -
(真または偽) です。真理値表条件の入力では、真理値表 ttable
の条件を入力しました。引き続き、以下の手順で、判定を判定列に入力します。
追加を行う [条件テーブル] の説明列をクリックします。
サイド パネルの [列の追加] ボタン
を 3 回クリックします。
判定列 D1 の一番上のセルをクリックします。
値
T
が表示されるまで、スペース バーを押します。スペース バーを押すたびに、取り得る値である
F
、T
、-
が順次切り替わります。これらの文字を直接入力することも可能です。1 を押すと値がT
に、0 を押すと値がF
に設定されます。x
を押すと値が-
に設定されます。判定列の残りの値を入力します。
真理値表の実行時に、判定は左から右の順序でテストされます。判定に含まれる個別の条件結果をテストする順序は、定義されていません。真理値表は、上から下の順序 (最初に条件 1、続いて条件 2 という要領) で各判定の条件を評価します。この実装は将来、変更される可能性があるため、特定の実行順序に依存することは避けてください。
既定の判定列
ttable
の最後の判定列 D4 は、真理値表の既定の判定です。既定の判定は、前述の判定列でテスト対象にならない残りの判定をすべてカバーします。右端の判定列にあるすべてのセルに - と入力し、既定の判定を作成します。- は、条件の任意の結果 (T
または F
) を表します。既定の判定列は、[条件テーブル] の右側の最後の列でなければなりません。
真理値表アクションの入力
真理値表の実行時に、判定は左から右の順序でテストされます。判定が一致すると、その判定列の [アクション] 行で指定された [アクション テーブル] のアクションが実行されます。次に、真理値表の処理が終了します。
真理値表判定の入力では、真理値表に判定を入力しました。次の手順では、[アクション テーブル] の各判定に応じて発生させるアクションを入力します。続いて、各アクションを [条件テーブル] の [アクション] 行の判定に割り当てます。
アクション テーブルの設定
追加を行う [アクション テーブル] 上の行をクリックします。
サイド パネルの [行の追加] ボタン
を 3 回クリックします。
真理値表のアクションをプログラミングします。
真理値表のアクションのプログラミング
アクション言語として MATLAB を使用する真理値表については、MATLAB コードを記述してアクションをプログラミングできます。このコードでは、制御フロー ロジックを追加して、MATLAB 関数を直接呼び出すことが可能になります。以下の手順では、MATLAB 構文の以下の機能を使用して、真理値表 ttable
のアクションをプログラミングします。
永続変数
if ... else ... end
制御フローfor
ループ
以下の手順に従います。
[アクション テーブル] の [説明] 列で、一番上のセルをクリックします。
セルが強調表示され、カーソルが、点滅した状態でセル内に表示されます。
以下の説明を入力します。
Maintain a counter and a circular vector of values of length 6. Every time this action is called, output r takes the next value of the vector.
右方向の矢印キーを押して、[アクション] 列内の右側にある次のセルを選択します。
以下のテキストを入力します。
A1:
アクションの先頭には、オプション ラベルに続いてコロン (
:
) を入力します。以後、このラベルを [条件テーブル] の [アクション] 行に入力して、各判定列のアクションを指定します。条件ラベルの場合と同様に、アクション ラベルの先頭には英字 ([a-z][A-Z]
)、続けて任意の文字数の英数字 ([a-z][A-Z][0-9]
) またはアンダースコア (_
) を使用しなければなりません。Enter キーを押して、次のコードを入力します。
persistent values counter; cycle = 6; coder.extrinsic("plot"); 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);
真理値表関数に受け渡されたデータは、真理値表アクションでその引数と戻り値を介して使用できます。前述のアクションは、戻り値
r
の値をベクトルvalues
の次の値と等しくなるように設定します。チャートなど、真理値表の親オブジェクトに対して定義されたデータでアクションを指定することも可能です。真理値表アクションは、真理値表や親 (チャート自体など) に対して定義されたイベントのブロードキャストや送信にも対応できます。以下に示すように、残りのアクションを [アクション テーブル] に入力します。
シミュレーション時にアクション
A1
が実行されると、values
ベクトルのプロットが表示されます。
これで、アクションを判定に割り当てる準備が整いました。
判定への真理値表アクションの割り当て
少なくとも 1 つのアクションを [アクション テーブル] から [条件テーブル] の各判定に割り当てなければなりません。真理値表は、この関連付けに基づいて、判定のテスト結果が真の場合に実行するアクションを判定します。
判定にアクションを割り当てる場合のルール
アクションを真理値表の判定に割り当てる場合は、以下のルールが適用されます。
判定列の [アクション] 行のセルに行番号やラベルを入力することで、判定のアクションを指定します。
ラベル指定子を使用する場合、ラベルは [アクション テーブル] のアクションで表示しなければなりません。
判定ごとにアクションを少なくとも 1 つ指定しなければなりません。
判定のアクションは、オプションではありません。各判定には、[アクション テーブル] のアクションを指定するアクション指定子を少なくとも 1 つ指定しなければなりません。判定のアクションを指定しない場合は、アクション ステートメントを含まない行を指定します。
コンマ、セミコロン、スペース区切り形式で複数の指定子を使用することで、判定に複数のアクションを指定できます。
たとえば、判定列 D1 に対して、
A1,A2,A3
または1;2;3
を指定すると、判定 D1 が真になった場合に、最初の 3 つのアクションを実行できます。行番号とラベル アクション指定子は、任意の順序で交互に混在できます。
以下の例では、行とラベルのアクション指定子の両方を使用しています。
以下に示すように、複数の判定に対して同じアクションを指定できます。
[条件テーブル] の [アクション] 行の行番号指定子は、[アクション テーブル] の行の順序が変化しても自動的に調整されます。
判定にアクションを割り当てる方法
この節では、真理値表 ttable
の判定にアクションを割り当てる方法について説明します。この例では、各判定列の [アクション] 行のセルには、[アクション テーブル] のアクションごとに指定されたラベルが含まれています。以下の手順に従います。
判定列 D1 の一番下のセル ([条件テーブル] の [アクション] 行の最初のセル) をクリックします。
判定行 D1 にアクション指定子
A1
を入力します。D1 が真である場合に、[アクション テーブル] のアクション
A1
が実行されます。残りの判定列のアクション指定子を入力します。
これで、真理値表のプログラミングの最終手順を実行する準備が整いました。
初期アクションと最終アクションの追加
判定のアクションに加えて、初期アクションと最終アクションを真理値表関数に追加できます。初期アクションでは、判定がテストされる前に実行されるアクションを指定します。最終アクションでは、真理値表の処理が終了する前に最後のアクションとして実行されるアクションを指定します。真理値表の初期アクションと最終アクションを指定するには、アクション ラベル INIT
と FINAL
を [アクション テーブル] で使用します。
以下の手順に従って、真理値表 ttable
の実行前と実行後に MATLAB コマンド ウィンドウに診断メッセージを表示する初期アクションと最終アクションを追加します。
真理値表で、[アクション テーブル] の 1 行目を右クリックし、[行の挿入] を選択します。
[アクション テーブル] の最上部に空白行が表示されます。
[モデル化] タブで [行の追加] を選択します。
[アクション テーブル] の末尾に空白行が表示されます。
真理値表の下部の境界をクリックして下方向にドラッグし、[アクション テーブル] の 6 行すべてが表示されるようにします。
以下のように、1 行目に初期アクションを追加します。
説明 アクション 初期アクション:
メッセージの表示
INIT:
coder.extrinsic("disp");
disp("truth table ttable entered");
以下のように、6 行目に最終アクションを追加します。
説明 アクション 最終アクション:
メッセージの表示
FINAL:
coder.extrinsic("disp");
disp("truth table ttable exited");
前述の真理値表の例のように初期アクションと最終アクションが [アクション テーブル] の先頭行と最終行に表示されている場合でも、これらのアクションは任意の行に入力できます。また、[条件テーブル] の [アクション] 行でアクション指定子 INIT
または FINAL
を使用することで、初期アクションと最終アクションを判定に割り当てることができます。