アクション言語構文としての MATLAB と C の相違点
Simulink® モデルの Stateflow® チャートには、ステート アクションと遷移アクションの構文を定義するアクション言語プロパティがあります。チャート キャンバスの左下隅にあるアイコンが、チャートのアクション言語を示します。
MATLAB® がアクション言語です。
C がアクション言語です。
選択するアクション言語は、ステート アクションと遷移アクションの書き込み方法、使用できる演算、チャートによるコードの生成方法に影響を及ぼします。
MATLAB は、新しい Stateflow チャートの既定のアクション言語構文です。C をアクション言語として使用するチャートを作成するには、次のように入力します。
sfnew -cアクション言語の選択
以下の場合は、アクション言語として MATLAB を使用します。
プロトタイピングと高速開発。アルゴリズムとロジックを迅速に反復する必要がある。
行列とベクトル演算。チャートで配列と複雑な数学演算を幅広く扱う。
MATLAB 統合。既存の MATLAB 関数とツールボックスを活用する必要がある。
以下の場合は、アクション言語として C を使用します。
パフォーマンスが重要なアプリケーション。リアルタイム システムにおいて最大の実行速度が必要。
リソースに制約があるハードウェアに対する組み込みターゲットとコード生成。
確定的な動作を含むアプリケーション。予測可能なタイミングとメモリ使用量が必要。
アクション言語による違い
アクション言語 MATLAB と C では、構文、サポートされる演算、コード生成の動作に違いがあります。2 つのアクション言語の最も大きな違いを以降の表に示します。
基本演算
| 機能 | アクション言語が MATLAB | アクション言語が C の場合 |
|---|---|---|
インクリメント演算とデクリメント演算 | チャートが、構文を自動的に MATLAB 構文に修正。たとえば、 | チャートが、 |
代入演算 | チャートが、構文を自動的に MATLAB 構文に修正。たとえば、 | チャートが、a += b、a –= b、a *= b、および a /= b をサポート。Stateflow データの演算を参照してください。 |
比較演算 | a ~= b | チャートが、a != b と !a をサポート。Stateflow データの演算を参照してください。 |
コメント マーカー | % に自動的に修正されます。 | チャートが、// と /* */ をサポート。Stateflow データの演算を参照してください。 |
| 条件付きステートメント | ステート アクション内で | ステート アクションでのみサポート。 |
| ループ ステートメント | ステート アクション内で | ループ ステートメントのサポートなし。条件付きパターンおよびループ パターンには、代わりにグラフィカル関数を使用します。グラフィカル関数の定義によるロジック パターンの再利用を参照してください。 |
インデックスとデータの処理
| 機能 | アクション言語が MATLAB | アクション言語が C の場合 |
|---|---|---|
ベクトルと行列のインデックス | 1 ベースのインデックス。たとえば、 | 0 ベースのインデックス。たとえば、 |
インデックスの区切り記号 | 小かっことコンマ。たとえば、 | 大かっこ。たとえば、 |
可変サイズ データ | ステート アクションと遷移アクションで可変サイズのチャート データを変更できます。詳細については、MATLAB をアクション言語として使用するチャートでの可変サイズ データを参照してください。 | 次を使用して可変サイズのチャート データを変更できます。
可変サイズ データを使用する計算はすべて、ステートまたは遷移で直接実行するのではなく、これらの関数内で実行しなければなりません。詳細については、C をアクション言語として使用するチャートでの可変サイズ データを参照してください。 |
| スカラー拡張 | サポートなし。 | サポートあり。すべての要素への値の代入を参照してください。 |
| 文字列の区切り記号 | 二重引用符 ( | 二重引用符 ("...") または一重引用符 ('...') を区切り記号として使用。string を使用したテキスト情報の管理を参照してください。 |
複素数データ | 複素数表記法 |
|
データ型の伝播 | MATLAB のデータ型ルールに準拠。たとえば、 | C のデータ型ルールに準拠。たとえば、 |
拡張機能とコード生成
| 機能 | アクション言語が MATLAB | アクション言語が C の場合 |
|---|---|---|
固定小数点構造:
| サポートなし。 | サポートあり。C チャートでの固定小数点上位変換のオーバーライドと固定小数点のコンテキスト依存定数を参照してください。 |
明示的な型キャスト演算 | MATLAB 型変換関数、または | |
MATLAB 関数内部でステート、ローカル データ、メッセージ、ローカル イベントを指定する場合のドット表記の使用 | サポートあり。ドット表記を使用したデータの識別を参照してください。 | サポートなし。 |
構造体パラメーター | 調整可能、調整不可能なパラメーターのサポートあり。 | 調整可能なパラメーターのみサポートあり。 |
グローバル | サポートあり。 | サポートなし。 |
複素数データ | 複素数表記法 |
|
MATLAB をアクション言語として使用する場合の自動修正
MATLAB をアクション言語として使用する Stateflow チャートでは、次の C 構造が MATLAB 構文に自動修正されます。
a++やa--などのインクリメント演算およびデクリメント演算。たとえば、a++はa = a+1に変更されます。a += b、a –= b、a *= b、a /= bなどの代入演算。たとえば、a += bはa = a+bに変更されます。a != bや!aなどの評価演算。たとえば、a != bはa ~= bに変更されます。コメント マーカー
//および/* */は%に変更されます。
この基本設定を無効にするには、関数 sfpref を使用します。
sfpref(EnableLabelAutoCorrectionForMAL=false);
MATLAB をアクション言語として使用する場合のガイドライン
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)を参照してください。