アクション言語構文としての MATLAB と C の相違点
Simulink® モデルの Stateflow® チャートには、ステート アクションと遷移アクションの構文を定義するアクション言語プロパティがあります。チャート キャンバスの左下隅にあるアイコンが、チャートのアクション言語を示します。
アクション言語は MATLAB®。
アクション言語は C。
MATLAB は、新しい Stateflow チャートの既定のアクション言語構文です。C をアクション言語として使用するチャートを作成するには、次のように入力します。
sfnew -c
アクション言語の機能の比較
次の表は、2 つのアクション言語の機能の最も大きな違いを示しています。
機能 | アクション言語が MATLAB | アクション言語が C の場合 |
---|---|---|
ベクトルと行列のインデックス | かっこやコンマで区切られた 1 ベースのインデックス (たとえば、 | 大かっこで区切られた 0 ベースのインデックス (たとえば、 |
C 構造:
| MATLAB 構文への自動修正。たとえば、 | サポートあり。Stateflow データの演算を参照してください。 |
ステート アクション内の条件付きコントロール ステートメントおよびループ コントロール ステートメント | サポートあり。たとえば、ステート アクション内で | サポートなし。条件付きパターンおよびループ パターンには、代わりにグラフィカル関数を使用します。グラフィカル関数の定義によるロジック パターンの再利用を参照してください。 |
遷移アクションの形式 | 自動修正により、遷移アクションは中かっこ | 遷移アクションを中かっこ |
パラレル ステートの順序付け | 明示的な順序付けのみ。パラレル ステートの実行順序を参照してください。 | 明示的または暗黙的な順序付け。パラレル ステートの実行順序を参照してください。 |
可変サイズ データ | ステート アクションと遷移アクションで可変サイズのチャート データを変更。詳細については、MATLAB をアクション言語として使用するチャートでの可変サイズ データを参照してください。 | 次を使用して可変サイズのチャート データを変更:
可変サイズ データを使用する計算はすべて、ステートまたは遷移で直接実行するのではなく、これらの関数内で実行しなければなりません。詳細については、C をアクション言語として使用するチャートでの可変サイズ データを参照してください。 |
固定小数点構造:
| サポートなし | サポートあり。C チャートでの固定小数点上位変換のオーバーライドと固定小数点のコンテキスト依存定数を参照してください。 |
複素数データ | 複素数表記法 |
|
データ型の伝播 | MATLAB のデータ型ルールに準拠。たとえば、 | C のデータ型ルールに準拠。たとえば、 |
明示的な型キャスト演算 | 次のいずれかのキャスト型を使用:
| 次のいずれかのキャスト型を使用:
関数 |
スカラー拡張 | サポートなし | サポートあり。行列のすべての要素への値の代入を参照してください。 |
string データ | 二重引用符 ( | 二重引用符 (" ..." ) または一重引用符 (' ...' ) を区切り記号として使用。string を使用したテキスト情報の管理を参照してください。 |
データ プロパティの指定:
| サポートなし | サポートあり。詳細については、以下を参照してください。
|
グラフィカル関数、真理値表関数、および MATLAB 関数のデータのスコープ | Constant , Parameter , Input , Output | Local , Constant , Parameter , Input , Output , Temporary |
MATLAB 関数内部でステート、ローカル データ、メッセージ、ローカル イベントを指定する場合のドット表記の使用 | サポートあり。ドット表記を使用したデータの識別を参照してください。 | サポートなし |
カスタム コードの関数および変数 | 動作は [カスタム コードのインポート] コンフィギュレーション パラメーターの設定によって異なります。
Stateflow チャートでのカスタム コードの再利用とカスタム コードのインポート (Simulink)を参照してください。 | カスタム コードの関数および変数はステートおよび遷移でサポートされます。 |
構造体パラメーター | 調整可能、調整不可能なパラメーターのサポートあり。 | 調整可能なパラメーターのみサポートあり。 |
グローバル | サポートあり | サポートなし。 |
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;
条件アクションと遷移アクションでは制御フロー ロジックは使用しない
制御フロー ロジック (if
、switch
、for
、while
ステートメントなど) はステート アクションでのみサポートされています。制御フロー ロジックを条件アクションまたは遷移アクションで使用すると、構文エラーが発生します。
ステート アクションではグローバル変数や永続変数は宣言しない
キーワード global
および persistent
はステート アクションではサポートされていません。
ローカル データと出力データに初期値を代入
アクション言語として MATLAB を使用する場合は、初期値のないデータを読み取るとエラーが発生します。
列挙値の識別子には型の接頭辞を含める
識別子 TrafficColors.Red
は有効ですが、Red
は有効ではありません。
モデルからコードを生成するために、コード生成用にサポートされている MATLAB 言語の機能を使用
それ以外の場合は、サポートされていない関数は coder.extrinsic
を使用して呼び出します。この方法では、シミュレーションに必要な機能は得られますが、生成コードではこの機能を得られません。サポートされていない機能と関数のリストは、言語、関数、オブジェクトのサポート (Simulink)を参照してください。