このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
万博1manbetx®モデルのStateflow®チャートには,ステートおよび遷移のアクションで使用できる演算を定義するアクション言語プロパティがあります。言語プロパティは次のとおりです。
アクション言語はMATLAB®
アクション言語はC
詳細については,アクション言語構文としてのMATLABとCの相違点を参照してください。
次の表は,Stateflowチャート内のすべての二項演算の解釈を優先順位(0 =最高,10 =最低)に従ってまとめています。二項演算は左結合であるため,どの式でも,優先度が同じ演算子は左から右の順序で評価されます。その他の演算子の評価順序は指定されていません。たとえば,次の代入
A = f() > g();
f ()
とg ()
の評価順序は指定されていません。結果を予測しやすくするために,評価順序に依存する式を複数のステートメントに分割してコードを書くことをお勧めします。
演算 |
優先順位 |
アクション言語がMATLAB |
アクション言語がCの場合 |
---|---|---|---|
0 |
べき乗 |
べき乗。この演算はCライブラリ関数 この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティをオフにします。詳細については,C言語のビット演算が可能を参照してください。 |
|
1 |
乗算 |
乗算 |
|
1 |
除算 |
除算 |
|
1 |
剰余。非整数オペランドは,最初に整数にキャストされます。 |
||
2 |
加算 |
加算 |
|
2 |
減算 |
減算 |
|
3. |
サポートなし。関数 |
|
|
3. |
サポートなし。関数 |
|
|
4 |
比較,より大きい |
比較,より大きい |
|
|
4 |
比較、未満 |
比較、未満 |
|
4 |
比較、以上 |
比較、以上 |
|
4 |
比較、以下 |
比較、以下 |
|
5 |
比較,等しい |
比較,等しい |
|
5 |
比較,等しくない |
比較,等しくない |
|
5 |
サポートなし。演算 |
比較,等しくない |
|
5 |
サポートなし。演算 |
比較,等しくない |
6 |
論理。ビット単位和の場合は,関数 |
詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
|
7 |
サポートなし。ビット単位XORの場合は,関数 |
ビット単位XOR(既定)。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算とC言語のビット演算が可能を参照してください。 | |
8 |
論理。ビット単位或の場合は,関数 |
詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
|
9 |
論理和 |
論理和 |
|
10 |
論理或 |
論理或 |
次の表は,Stateflowチャート内のすべての単項演算と単項アクションの解釈をまとめています。単項演算は,
二項演算子より優先順位が高くなります。
右結合であるため,どの式でも,右から左の順序で評価されます。
演算 |
アクション言語がMATLAB |
アクション言語がCの場合 |
---|---|---|
|
論理。ビット単位不是の場合は,関数 |
詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
|
サポートなし。演算 |
論理不 |
|
負数 |
負数 |
|
サポートなし。式 |
インクリメント。 |
|
サポートなし。式 |
デクリメント。 |
次の表は,Stateflowチャート内の代入演算の解釈をまとめています。
演算 |
アクション言語がMATLAB |
アクション言語がCの場合 |
---|---|---|
|
シンプルな代入 |
シンプルな代入 |
|
サポートなし。型キャスト演算を使用して、固定小数点上位変換規則を上書きします。型キャスト演算を参照してください。 |
固定小数点数の代入。Cチャートでの固定小数点上位変換の上書きを参照してください。 |
|
サポートなし。式 |
|
|
サポートなし。式 |
|
|
サポートなし。式 |
|
|
サポートなし。式 |
|
|
サポートなし。式 |
一个=方式 (ビット単位和)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
|
サポートなし。式 |
= ^ b (ビット単位XOR)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
|
サポートなし。式 |
= | b (ビット単位或)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算とC言語のビット演算が可能を参照してください。 |
ある型の値を別の型の値に変換するには,型キャスト演算を使用します。明示的な型または別の変数の型にデータをキャストできます。
数値式を明示的なデータ型にキャストするには,次の形式のMATLAB型変換関数を使用します。
< type_fun >(表达)
< type_fun >
は型変換関数であり,双
、单
、int32
、int16
、int8
、uint32
、uint16
、uint8
、fi
(定点设计师)のいずれかを指定できます。< type_fun >
は布尔
、int64
、uint64
のいずれかにすることもできます。たとえば,次のステートメントは,式x + 3
を16ビット符号なしの整数にキャストして,値をデータy
に代入します。
y = uint16 (x + 3)
あるいは,MATLABをアクション言語として使用するチャートでは,関数投
を型のキーワード< type_key >
と共に使用できます。
铸造(表情,< type_key >)
型のキーワードには,“双”
、“单一”
、“int32”
、“int16”
、“int8”
、“uint32”
、“uint16”
および“uint8”
が含まれます。たとえば,前述の例と同様に,次のステートメントは式x + 3
を16ビット符号なし整数にキャストして,y
に代入します。
y =投(x + 3,“uint16”)
型キャストをより簡単にするために,数値式の型を,他のデータの型に基づいて変換することができます。
MATLABをアクション言語として使用するチャートで,関数投
を,キーワード“喜欢”
で呼び出します。たとえば,次のステートメントは,x + 3
の値を,データz
と同じ型に変換して,y
に割り当てます。
y =投(x + 3,“喜欢”,z)
z
には,許容される任意のStateflow型が設定されます。
Cをアクション言語として使用するチャートでは,类型
演算子は既存のStateflowデータの型を返します。この戻り値を,投
演算で明示的な型の代わりに使用します。たとえば,次のステートメントは,x + 3
の値を,データz
と同じ型に変換して,y
に割り当てます。
铸造(x + 3,类型(z))
次の表は,アクション言語としてCを使用するStateflowチャート内のすべてのビット演算の解釈をまとめたものです。
演算 |
説明 |
---|---|
a和b |
ビット単位。 |
a | |
ビット単位或。 |
a ^ |
ビット単位XOR。 |
~一个 |
ビット単位。 |
|
一个 をb ビット分右にシフトします。 |
|
一个 をb ビット分左にシフトします。 |
[C言語のビット演算が可能)チャートプロパティを選択して,ビットシフト演算一个> > b
と< < b
を除くすべてのビット演算を有効にしなければなりません。C言語のビット演算が可能を参照してください。
ビット演算はバイナリレベルで整数を処理します。非整数オペランドは,最初に整数にキャストされます。整数オペランドはCの上位変換規則に従って結果の中間値を決定します。その後,この中間値は演算結果に指定されている型にキャストされます。
ビット演算の中間値の代入に使用される暗黙的なキャストの結果,オーバーフローが発生する場合があります。結果の右端のビットを維持して予期せぬ動作を回避するには,チャートプロパティ(整数オーバーフローで飽和)を無効にします。
たとえば,次のモデルのどちらのチャートもビット演算y = ~你
を計算します。チャートはターゲット整数のサイズに32ビットを使用してこの演算の中間値を計算するので,この値の左端から24桁はすべて1になります。チャートが中間値をy
に代入すると,uint8
へのキャストによって整数オーバーフローが発生します。各チャートからの出力は,チャートが整数のオーバーフローをどのように処理するかによって決まります。
(整数オーバーフローで飽和)が有効の場合,チャートはビット演算の結果を飽和させて値0を出力します。
(整数オーバーフローで飽和)が無効の場合,チャートはビット演算の結果をラップして右端のビット8桁を出力します。
詳細については,整数オーバーフローで飽和を参照してください。
次の表は,アクション言語としてCを使用するStateflowチャート内のポインター演算とアドレス演算の解釈をまとめたものです。
演算 |
説明 |
---|---|
|
アドレス演算。カスタムコード変数およびStateflow変数で使用します。 |
|
ポインター演算。カスタムコード変数でのみ使用します。 |
たとえば,モデルsf_bus_demo
には,ポインターを引数として取るカスタムC関数が含まれています。チャートでは,カスタムコード関数を呼び出すときに,&
演算を使用して,アドレスによってStateflowデータを受け渡します。詳細については,Stateflowチャートのカスタム構造体の統合を参照してください。
アクション言語としてMATLABを使用するチャートでは,ポインター演算とアドレス演算はサポートされません。
嵌入式编码器®または万博1manbetx仿真软件编码器™をお持ちの場合は,コードの生成時にコード置換ライブラリ(CRL)を適用するようにコードジェネレーターを構成できます。コードジェネレーターは,演算がアプリケーションの要件を満たすように,生成するコードを変更します。嵌入式编码器を使用すると,カスタムコード置換ライブラリを開発して適用できます。
コード置換ライブラリの演算エントリでは,整数/固定小数点オペランドと結果パターンを指定できます。演算エントリは,次の演算に使用できます。
加算+
減算-
乗算*
除算/
たとえば,次の式では,u1
、u2
およびy
の型がコード置換ライブラリの加算エントリとの一致を許可する場合に,加算演算子+
をターゲット固有の実装に置き換えることができます。
y = u1 + u2
Cチャートのセマンティクスでは,演算式でターゲット整数のサイズが中間型として使用されるため,演算子エントリの整合性が制限されます。たとえば,次の演算式は,ターゲット整数への中間加算を計算します。
Y = (u1 + u2) % 3
MathWorks®が提供するコード置換ライブラリの使用の詳細については,什么是代码替换?(万博1manbetx仿真软件编码器)および代码替换库(万博1manbetx仿真软件编码器)を参照してください。カスタムコード置換ライブラリの開発の詳細については,什么是代码替换定制?(嵌入式编码)および可以从Simulink模型中替换的代码万博1manbetx(嵌入式编码)を参照してください。