ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

チャート データでサポートされている演算

Simulink® モデルの Stateflow® チャートには、ステートおよび遷移のアクションで使用できる演算を定義するアクション言語プロパティがあります。言語プロパティは次のとおりです。

  • アクション言語は MATLAB®

  • アクション言語は C

詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。

二項演算

次の表は、Stateflow チャート内のすべての二項演算の解釈を優先順位 (0 = 最高、10 = 最低) に従ってまとめています。二項演算は左結合であるため、どの式でも、優先度が同じ演算子は左から右の順序で評価されます。その他の演算子の評価順序は指定されていません。たとえば、次の代入

A = f() > g();
では、f()g() の評価順序は指定されていません。結果を予測しやすくするために、評価順序に依存する式を複数のステートメントに分割してコードを書くことをお勧めします。

演算

優先順位

アクション言語が MATLAB

アクション言語としての C の使用

a ^ b

0

べき乗

べき乗。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティをオフにします。Stateflow チャートのプロパティの指定 を参照してください。

a * b

1

乗算

乗算

a / b

1

除算

除算

a %% b

1

サポートなし。関数 rem または mod を使用します。

剰余。非整数オペランドは、最初に整数にキャストされます。

a + b

2

加算

加算

a - b

2

減算

減算

a >> b

3

サポートなし。関数 bitshift を使用します。

ab ビット分右にシフトします。非整数オペランドは、最初に整数にキャストされます。

a << b

3

サポートなし。関数 bitshift を使用します。

ab ビット分左にシフトします。非整数オペランドは、最初に整数にキャストされます。

a > b

4

比較、より大きい

比較、より大きい

a < b

4

比較、未満

比較、未満

a >= b

4

比較、以上

比較、以上

a <= b

4

比較、以下

比較、以下

a == b

5

比較、等しい

比較、等しい

a ~= b

5

比較、等しくない

比較、等しくない

a != b

5

サポートなし。演算 a ~= b を使用します。

比較、等しくない

a <> b

5

サポートなし。演算 a ~= b を使用します。

比較、等しくない

a & b

6

論理 AND。ビット単位 AND の場合は、関数 bitand を使用します。

  • ビット単位 AND (既定)。非整数オペランドは、最初に整数にキャストされます。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。

  • 論理 AND。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティをオフにします。

Stateflow チャートのプロパティの指定を参照してください。

a ^ b

7

サポートなし。ビット単位 XOR の場合は、関数 bitxor を使用します。

ビット単位 XOR (既定)。非整数オペランドは、最初に整数にキャストされます。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。Stateflow チャートのプロパティの指定 を参照してください。

a | b

8

論理 OR。ビット単位 OR の場合は、関数 bitor を使用します。

  • ビット単位 OR (既定)。非整数オペランドは、最初に整数にキャストされます。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。

  • 論理 OR。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティをオフにします。

詳細は、Stateflow チャートのプロパティの指定を参照してください。

a && b

9

論理 AND

論理 AND

a || b

10

論理 OR

論理 OR

単項演算と単項アクション

次の表は、Stateflow チャート内のすべての単項演算と単項アクションの解釈をまとめています。単項演算は、

  • 二項演算子より優先順位が高くなります。

  • 右結合であるため、どの式でも、右から左の順序で評価されます。

演算

アクション言語が MATLAB

アクション言語としての C の使用

~a

論理 NOT。ビット単位 NOT の場合は、関数 bitcmp を使用します。

  • ビット単位 NOT (既定)。非整数オペランドは、最初に整数にキャストされます。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。

  • 論理 NOT。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティをオフにします。

Stateflow チャートのプロパティの指定を参照してください。

!a

サポートなし。演算 ~a を使用します。

論理 NOT

-a

負数

負数

a++

サポートなし。式 a = a+1 を使用します。

インクリメント。a = a+1 と等価です。

a--

サポートなし。式 a = a-1 を使用します。

デクリメント。a = a-1 と等価です。

代入演算

次の表は、Stateflow チャート内の代入演算の解釈をまとめています。

演算

アクション言語が MATLAB

アクション言語としての C の使用

a = b

シンプルな代入

シンプルな代入

a := b

サポートなし。型キャスト演算を使用して、固定小数点上位変換規則を上書きします。型キャスト演算を参照してください。

固定小数点数の代入。C チャートでの固定小数点上位変換の上書きを参照してください。

a += b

サポートなし。式 a = a+b を使用します。

a = a+b と等価です。

a -= b

サポートなし。式 a = a-b を使用します。

a = a-b と等価です。

a *= b

サポートなし。式 a = a*b を使用します。

a = a*b と等価です。

a /= b

サポートなし。式 a = a/b を使用します。

a = a/b と等価です。

a &= b

サポートなし。式 a = bitand(a,b) を使用します。

a = a&b (ビット単位 AND) と等価です。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。Stateflow チャートのプロパティの指定を参照してください。

a ^= b

サポートなし。式 a = bitxor(a,b) を使用します。

a = a^b (ビット単位 XOR) と等価です。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。Stateflow チャートのプロパティの指定を参照してください。

a |= b

サポートなし。式 a = bitor(a,b) を使用します。

a = a|b (ビット単位 OR) と等価です。この演算を有効にするには、[C 言語のビット演算が可能] チャート プロパティを選択します。Stateflow チャートのプロパティの指定 を参照してください。

ポインター演算とアドレス演算

次の表は、Stateflow チャート内のポインター演算とアドレス演算の解釈をまとめています。

演算

アクション言語が MATLAB

アクション言語としての C の使用

&a

サポートなし

アドレス演算。カスタム コード変数および Stateflow 変数で使用します。

*a

サポートなし

ポインター演算。カスタム コード変数でのみ使用します。

たとえば、モデル sf_bus_demo には、ポインターを引数として取るカスタム C 関数が含まれています。チャートでは、カスタム コード関数を呼び出すときに、& 演算を使用して、アドレスによって Stateflow データを受け渡します。詳細については、Stateflow チャートでのカスタム構造体の統合を参照してください。

型キャスト演算

ある型の値を別の型の値に変換するには、型キャスト演算を使用します。明示的な型または別の変数の型にデータをキャストできます。

明示的なデータ型へのキャスト

数値式を明示的なデータ型にキャストするには、次の形式の MATLAB 型変換関数を使用します。

<type_fun>(expression)

<type_fun> は型変換関数であり、doublesingleint32int16int8uint32uint16uint8 のいずれかを指定できます。C をアクション言語として使用するチャートの場合、<type_fun> には boolean も指定可能です。たとえば、次のステートメントは、式 x+3 を 16 ビット符号なしの整数にキャストして、値をデータ y に代入します。

y = uint16(x+3)

あるいは、MATLAB をアクション言語として使用するチャートでは、関数 cast を型のキーワード <type_key> と共に使用できます。

cast(expression,<type_key>)

型のキーワードには、'double''single''int32''int16''int8''uint32''uint16' および 'uint8' が含まれます。たとえば、前述の例と同様に、次のステートメントは式 x+3 を 16 ビット符号なし整数にキャストして、y に代入します。

y = cast(x+3,'uint16')

他のデータに基づいた型のキャスト

型キャストをより簡単にするために、数値式の型を、他のデータの型に基づいて変換することができます。

MATLAB をアクション言語として使用するチャートで、関数 cast を、キーワード 'like' で呼び出します。たとえば、次のステートメントは、x+3 の値を、データ z と同じ型に変換して、y に割り当てます。

y = cast(x+3,'like',z)
この場合、データ z には、許容される任意の Stateflow 型が設定されます。

C をアクション言語として使用するチャートでは、type 演算子は既存の Stateflow データの型を返します。この戻り値を、cast 演算で明示的な型の代わりに使用します。たとえば、次のステートメントは、x+3 の値を、データ z と同じ型に変換して、y に割り当てます。

cast(x+3,type(z))

アプリケーション実装による演算の置換

Embedded Coder® または Simulink Coder™ をお持ちの場合は、コードの生成時にコード置換ライブラリ (CRL) を適用するようにコード ジェネレーターを構成できます。コード ジェネレーターは、演算がアプリケーションの要件を満たすように、生成するコードを変更します。Embedded Coder を使用すると、カスタム コード置換ライブラリを開発して適用できます。

コード置換ライブラリの演算エントリでは、整数/固定小数点オペランドと結果パターンを指定できます。演算エントリは、次の演算に使用できます。

  • 加算 +

  • 減算 -

  • 乗算 *

  • 除算 /

たとえば、次の式では、u1u2 および y の型がコード置換ライブラリの加算エントリとの一致を許可する場合に、加算演算子 + をターゲット固有の実装に置き換えることができます。

y = u1+u2

C チャートのセマンティクスでは、演算式でターゲット整数のサイズが中間型として使用されるため、演算子エントリの整合性が制限されます。たとえば、次の演算式は、ターゲット整数への中間加算を計算します。

y = (u1 + u2) % 3
ターゲット整数のサイズが 32 ビットである場合は、この式をコード置換ライブラリからの加算演算子で置き換えて桁落ちすることなく符号付き 16 ビット値を得ることはできません。

MathWorks® が提供するコード置換ライブラリの使用の詳細については、コード置換とは (Simulink Coder)およびコード置換ライブラリ (Simulink Coder)を参照してください。カスタム コード置換ライブラリの開発の詳細については、What Is Code Replacement Customization? (Embedded Coder)およびCode You Can Replace From Simulink Models (Embedded Coder)を参照してください。

関連するトピック