Main Content

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

チャートのアクション言語の変更

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

  • アクション言語は MATLAB®

  • アクション言語は C。

チャートのアクション言語は、[チャート] プロパティ ダイアログ ボックスの [アクション言語] ボックスで変更できます。詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。

既定のアクション言語の変更

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

sfnew -C

新しいチャートの既定のアクション言語を変更するには、次のコマンドを使用します。

コマンド結果
sfpref('ActionLanguage','MATLAB')sfnew で別途指定しない限り、作成されるすべての新しいチャートで MATLAB がアクション言語となります。
sfpref('ActionLanguage','C')sfnew で別途指定しない限り、作成されるすべての新しいチャートで C がアクション言語となります。

詳細については、sfprefを参照してください。

MATLAB をアクション言語として使用する場合の自動修正

MATLAB をアクション言語として使用する Stateflow チャートでは、以下の一般的な C 構造が MATLAB 構文に自動修正されます。

  • a++a-- などのインクリメント演算およびデクリメント演算。たとえば、a++a = a+1 に変更されます。

  • a += ba –= ba *= ba /= b などの代入演算。たとえば、a += ba = a+b に変更されます。

  • a != b!a などの評価演算。たとえば、a != ba ~= b に変更されます。

  • コメント マーカー // および /* */% に変更されます。

この基本設定を無効にするには、関数 sfpref と以下のコマンドを使用できます。

sfpref('EnableLabelAutoCorrectionForMAL',0)
詳細については、sfprefを参照してください。

C から MATLAB への構文変換

空でないチャートの場合は、アクション言語プロパティを C から MATLAB に変更すると、チャートの上部に通知が表示されます。この通知では、C 構文を MATLAB 構文に変換するオプションが提供されます。通知内でリンクをクリックすると、Stateflow でチャート内の構文が変換されます。次のような C 構文構造が変換されます。

  • 0 ベースのインデックス。

  • a++a-- などのインクリメント演算およびデクリメント演算。たとえば、a++a = a+1 に変更されます。

  • a += ba –= ba *= ba /= b などの代入演算。たとえば、a += ba = a+b に変更されます。

  • a %% ba >> ba << b などの二項演算。たとえば、a %% brem(a,b) に変更されます。

  • a ^ ba & ba | b などのビット演算。たとえば、チャート プロパティ [C 言語のビット演算が可能] が選択されている場合、a ^ bbitxor(a,b) に変更されます。

  • C スタイルのコメント マーカー。たとえば、// および /* */% に変更されます。

MATLAB に変換できない C 構造体がチャートに含まれている場合、Stateflow はダイアログ ボックスにメッセージを表示します。警告リンクをクリックすると、診断ビューアーに警告が表示されます。サポートされる構文で変換を続行するかどうか選択してください。MATLAB に変換されない C 構造には以下が含まれます。

  • cast および type を使用する明示的な型キャスト

  • &*:= のような演算子

  • カスタム データ

  • ml 演算子を使用したワークスペース変数へのアクセス

  • コード生成でサポートされていない関数

  • 16 進数および単精度の表記

  • 状況依存の定数

MATLAB をアクション言語として使用する場合のルール

 チャート内のデータには一意の名前を使用

 チャート内の関数には一意の名前を使用

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

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

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

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

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

 グラフィカル関数では遷移アクションを使用しない

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

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

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

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