Main Content

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

アクション言語構文としての MATLAB と C の相違点

Simulink® モデルの Stateflow® チャートには、ステート アクションと遷移アクションの構文を定義するアクション言語プロパティがあります。チャート キャンバスの左下隅にあるアイコンが、チャートのアクション言語を示します。

  • アクション言語は MATLAB®

  • アクション言語は C。

MATLAB は、新しい Stateflow チャートの既定のアクション言語構文です。C をアクション言語として使用するチャートを作成するには、次のように入力します。

sfnew -c

アクション言語の機能の比較

次の表は、2 つのアクション言語の機能の最も大きな違いを示しています。

機能アクション言語が MATLABアクション言語が C の場合

ベクトルと行列のインデックス

かっこやコンマで区切られた 1 ベースのインデックス (たとえば、A(4,5))。ベクトルおよび行列でサポートされている演算を参照してください。

大かっこで区切られた 0 ベースのインデックス (たとえば、A[3][4])。ベクトルおよび行列でサポートされている演算を参照してください。

C 構造:

  • インクリメント演算とデクリメント演算 a++ および a--

  • 代入演算 a += ba –= ba *= b および a /= b

  • 評価演算 a != b および !a

  • 二項演算 a %% ba >> ba << ba & b および a | b

  • コメント マーカー // および /* */

MATLAB 構文への自動修正。たとえば、a++a = a+1 に修正されます。MATLAB をアクション言語として使用する場合の自動修正を参照してください。

サポートあり。チャート データでサポートされている演算を参照してください。

ステート アクション内の条件付きコントロール ステートメントおよびループ コントロール ステートメント

サポートあり。たとえば、ステート アクション内で iffor および while の各ステートメントを使用できます。ループと条件付きステートメントを参照してください。

サポートなし。条件付きパターンおよびループ パターンには、代わりにグラフィカル関数を使用します。グラフィカル関数の定義によるロジック パターンの再利用を参照してください。

遷移アクションの形式

自動修正により、遷移アクションは中かっこ {} で囲まれます。遷移アクションを参照してください。

遷移アクションを中かっこ {} で囲む必要なし。遷移アクションを参照してください。

パラレル ステートの順序付け

明示的な順序付けのみ。パラレル ステートの実行順序を参照してください。

明示的または暗黙的な順序付け。パラレル ステートの実行順序を参照してください。

可変サイズ データ

ステート アクションと遷移アクションで可変サイズのチャート データを変更。詳細については、MATLAB をアクション言語として使用するチャートでの可変サイズ データを参照してください。

次を使用して可変サイズのチャート データを変更:

  • MATLAB 関数

  • Simulink 関数

  • MATLAB をアクション言語として使用する真理値表

可変サイズ データを使用する計算はすべて、ステートまたは遷移で直接実行するのではなく、これらの関数内で実行しなければなりません。詳細については、C をアクション言語として使用するチャートでの可変サイズ データを参照してください。

固定小数点構造:

  • 特殊な代入演算子 :=

  • 4.3C などの状況依存の定数

サポートなし

サポートあり。C チャートでの固定小数点上位変換のオーバーライド固定小数点のコンテキスト依存定数を参照してください。

複素数データ

複素数表記法 a + bi または complex 演算子を使用。複素数データでサポートされている演算を参照してください。

complex 演算子を使用。複素数表記法はサポートされていません。複素数データでサポートされている演算を参照してください。

データ型の伝播

MATLAB のデータ型ルールに準拠。たとえば、double 型のデータを int32 型のデータに追加すると、結果は int32 型のデータになります。

C のデータ型ルールに準拠。たとえば、double 型のデータを int32 型のデータに追加すると、結果は double 型のデータになります。

明示的な型キャスト演算

次のいずれかのキャスト型を使用:

  • MATLAB 型変換関数。例: single(x)

  • 型のキーワードを含む関数 cast。例: cast(x,"int8")

  • "like" キーワードを含む関数 cast。例: cast(x,"like",z)

type 演算子はサポートされません。型キャスト演算を参照してください。

次のいずれかのキャスト型を使用:

  • MATLAB 型変換関数。例: uint16(x)

  • type 演算子を含む関数 cast。例: cast(x,type(z))

関数 cast の型のキーワードはサポートされません。型キャスト演算を参照してください。

スカラー拡張

サポートなし

サポートあり。行列のすべての要素への値の代入を参照してください。
string データ

サポートなし

サポートあり。string を使用したテキスト情報の管理を参照してください。

データ プロパティの指定:

  • 最初のインデックス

  • 最終値をベース ワークスペースへ保存

  • 単位

サポートなし

サポートあり。詳細については、以下を参照してください。

グラフィカル関数、真理値表関数、および MATLAB 関数のデータのスコープ

ConstantParameterInputOutputLocalConstantParameterInputOutputTemporary

MATLAB 関数内部でステート、ローカル データ、メッセージ、ローカル イベントを指定する場合のドット表記の使用

サポートあり。ドット表記を使用したデータの識別を参照してください。

サポートなし

カスタム コードの関数および変数

動作は [カスタム コードのインポート] コンフィギュレーション パラメーターの設定によって異なります。

  • [カスタム コードのインポート] がオンの場合は、カスタム コードの関数と変数の両方がステートおよび遷移でサポートされます (既定)。

  • [カスタム コードのインポート] がオフの場合は、カスタム コード関数のみがサポートされます。関数 coder.ceval (MATLAB Coder) を使用します。

カスタム コードカスタム コードのインポート (Simulink)を参照してください。

カスタム コードの関数および変数はステートおよび遷移でサポートされます。

生成コード内の行優先の配列レイアウト

サポートあり。生成コード内の行列の配列レイアウトを選択を参照してください。

サポートあり。生成コード内の行列の配列レイアウトを選択を参照してください。

生成コード内の多次元配列レイアウト

サポートなし

ローカル データのサポートあり。生成コード内の行列の配列レイアウトを選択を参照してください。

構造体パラメーター

調整可能、調整不可能なパラメーターのサポートあり。

調整可能なパラメーターのみサポートあり。

グローバル fimath オブジェクトの使用

サポートあり

サポートなし。

MATLAB をアクション言語として使用する場合のガイドライン

ベクトルと行列には 1 ベースのインデックスを使用

1 ベースのインデックスは MATLAB 構文と一致しています。詳細については、インデックス表記を参照してください。

ベクトルと行列のインデックスには大かっこ ([ ]) ではなく小かっこ (( )) を使用

次のステートメントは有効です。

a(2,5) = 0;

次のステートメントは無効です。

a[2][5] = 0;

詳細については、インデックス表記を参照してください。

コメントには MATLAB 形式を使用

MATLAB との一貫性を保つため、ステートと遷移には % を使用してコメントを指定します。たとえば、次のコメントは適切です。

% This is a valid comment in the style of MATLAB

///* */ などの C スタイルのコメントは、% を使用するよう自動修正されます。

遷移アクションは中かっこ ({ }) で囲む

次の遷移ラベルには、有効な遷移アクションが含まれています。

E [x > 0] / {x = x+1;}

次の遷移ラベルは間違っていますが、有効な構文に自動修正されます。

E [x > 0] / x = x+1;

条件アクションと遷移アクションでは制御フロー ロジックは使用しない

制御フロー ロジック (ifswitchforwhile ステートメントなど) はステート アクションでのみサポートされています。制御フロー ロジックを条件アクションまたは遷移アクションで使用すると、構文エラーが発生します。

ステート アクションではグローバル変数や永続変数は宣言しない

キーワード global および persistent はステート アクションではサポートされていません。

ローカル データと出力データに初期値を代入

アクション言語として MATLAB を使用する場合は、初期値のないデータを読み取るとエラーが発生します。

列挙値の識別子には型の接頭辞を含める

識別子 TrafficColors.Red は有効ですが、Red は有効ではありません。

モデルからコードを生成するために、コード生成用にサポートされている MATLAB 言語の機能を使用

それ以外の場合は、サポートされていない関数は coder.extrinsic を使用して呼び出します。この方法では、シミュレーションに必要な機能は得られますが、生成コードではこの機能を得られません。サポートされていない機能と関数のリストは、言語、関数、オブジェクトのサポート (Simulink)を参照してください。

参考

関連するトピック