主要内容

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

チャートデータでサポートされている演算

万博1manbetx®モデルのStateflow®チャートには,ステートおよび遷移のアクションで使用できる演算を定義するアクション言語プロパティがあります。言語プロパティは次のとおりです。

  • アクション言語はMATLAB®

  • アクション言語はC

詳細については,アクション言語構文としてのMATLABとCの相違点を参照してください。

二項演算

次の表は,Stateflowチャート内のすべての二項演算の解釈を優先順位(0 =最高,10 =最低)に従ってまとめています。二項演算は左結合であるため,どの式でも,優先度が同じ演算子は左から右の順序で評価されます。その他の演算子の評価順序は指定されていません。たとえば,次の代入

A = f() > g();
では,f ()g ()の評価順序は指定されていません。結果を予測しやすくするために,評価順序に依存する式を複数のステートメントに分割してコードを書くことをお勧めします。

演算

優先順位

アクション言語がMATLAB

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

a ^

0

べき乗

べき乗。この演算はCライブラリ関数战俘と等価です。オペランドはまず浮動小数点数にキャストされます。詳細については,C库関数の呼び出しを参照してください。

この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティをオフにします。詳細については,C言語のビット演算が可能を参照してください。

a * b

1

乗算

乗算

a / b

1

除算

除算

% % b

1

サポートなし。関数快速眼动または国防部を使用します。

剰余。非整数オペランドは,最初に整数にキャストされます。

a + b

2

加算

加算

a - b

2

減算

減算

一个> > b

3.

サポートなし。関数bitshiftを使用します。

一个bビット分右にシフトします。詳細については,ビット演算を参照してください。

< < b

3.

サポートなし。関数bitshiftを使用します。

一个bビット分左にシフトします。詳細については,ビット演算を参照してください。

a >

4

比較,より大きい

比較,より大きい

< b

4

比較、未満

比較、未満

> = b

4

比較、以上

比較、以上

< = b

4

比較、以下

比較、以下

a = =

5

比較,等しい

比較,等しい

~ = b

5

比較,等しくない

比較,等しくない

一个= b !

5

サポートなし。演算~ = bを使用します。

比較,等しくない

< > b

5

サポートなし。演算~ = bを使用します。

比較,等しくない

a和b

6

論理。ビット単位和の場合は,関数bitandを使用します。

  • ビット単位和(既定)。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。

  • 論理。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティをオフにします。

詳細については,ビット演算C言語のビット演算が可能を参照してください。

a ^

7

サポートなし。ビット単位XORの場合は,関数bitxorを使用します。

ビット単位XOR(既定)。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算C言語のビット演算が可能を参照してください。

a |

8

論理。ビット単位或の場合は,関数bitorを使用します。

  • ビット単位或(既定)。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。

  • 論理。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティをオフにします。

詳細については,ビット演算C言語のビット演算が可能を参照してください。

& & b

9

論理和

論理和

一个| | b

10

論理或

論理或

単項演算と単項アクション

次の表は,Stateflowチャート内のすべての単項演算と単項アクションの解釈をまとめています。単項演算は,

  • 二項演算子より優先順位が高くなります。

  • 右結合であるため,どの式でも,右から左の順序で評価されます。

演算

アクション言語がMATLAB

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

~一个

論理。ビット単位不是の場合は,関数bitcmpを使用します。

  • ビット単位不是(既定)。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。

  • 論理。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティをオフにします。

詳細については,ビット演算C言語のビット演算が可能を参照してください。

!

サポートなし。演算~一个を使用します。

論理不

——一个

負数

負数

+ +

サポートなし。式= + 1を使用します。

インクリメント。= + 1と等価です。

一个,

サポートなし。式a = a - 1を使用します。

デクリメント。a = a - 1と等価です。

代入演算

次の表は,Stateflowチャート内の代入演算の解釈をまとめています。

演算

アクション言語がMATLAB

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

a = b

シンプルな代入

シンプルな代入

a: b =

サポートなし。型キャスト演算を使用して、固定小数点上位変換規則を上書きします。型キャスト演算を参照してください。

固定小数点数の代入。Cチャートでの固定小数点上位変換の上書きを参照してください。

+ = b

サポートなし。式一个= a + bを使用します。

一个= a + bと等価です。

a - b =

サポートなし。式一个= a - bを使用します。

一个= a - bと等価です。

* = b

サポートなし。式= a * bを使用します。

= a * bと等価です。

a / b =

サポートなし。式一个= a / bを使用します。

一个= a / bと等価です。

& = b

サポートなし。式一个= bitand (a, b)を使用します。

一个=方式(ビット単位和)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算C言語のビット演算が可能を参照してください。

^ = b

サポートなし。式一个= bitxor (a, b)を使用します。

= ^ b(ビット単位XOR)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算C言語のビット演算が可能を参照してください。

| = b

サポートなし。式一个= bitor (a, b)を使用します。

= | b(ビット単位或)と等価です。この演算を有効にするには,[C言語のビット演算が可能)チャートプロパティを選択します。詳細については,ビット演算C言語のビット演算が可能を参照してください。

型キャスト演算

ある型の値を別の型の値に変換するには,型キャスト演算を使用します。明示的な型または別の変数の型にデータをキャストできます。

明示的なデータ型へのキャスト

数値式を明示的なデータ型にキャストするには,次の形式のMATLAB型変換関数を使用します。

< type_fun >(表达)

< type_fun >は型変換関数であり,int32int16int8uint32uint16uint8fi(定点设计师)のいずれかを指定できます。< type_fun >布尔int64uint64のいずれかにすることもできます。たとえば,次のステートメントは,式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ビット分右にシフトします。

< < b

一个bビット分左にシフトします。

[C言語のビット演算が可能)チャートプロパティを選択して,ビットシフト演算一个> > b< < bを除くすべてのビット演算を有効にしなければなりません。C言語のビット演算が可能を参照してください。

ビット演算はバイナリレベルで整数を処理します。非整数オペランドは,最初に整数にキャストされます。整数オペランドはCの上位変換規則に従って結果の中間値を決定します。その後,この中間値は演算結果に指定されている型にキャストされます。

メモ

MATLABをアクション言語として使用するチャートでは,ビット演算はサポートされません。代わりに,関数bitandbitorbitxorbitnotbitshiftを使用してください。

ビット演算と整数のオーバーフロー

ビット演算の中間値の代入に使用される暗黙的なキャストの結果,オーバーフローが発生する場合があります。結果の右端のビットを維持して予期せぬ動作を回避するには,チャートプロパティ(整数オーバーフローで飽和)を無効にします。

たとえば,次のモデルのどちらのチャートもビット演算y = ~你を計算します。チャートはターゲット整数のサイズに32ビットを使用してこの演算の中間値を計算するので,この値の左端から24桁はすべて1になります。チャートが中間値をyに代入すると,uint8へのキャストによって整数オーバーフローが発生します。各チャートからの出力は,チャートが整数のオーバーフローをどのように処理するかによって決まります。

  • (整数オーバーフローで飽和)が有効の場合,チャートはビット演算の結果を飽和させて値0を出力します。

  • (整数オーバーフローで飽和)が無効の場合,チャートはビット演算の結果をラップして右端のビット8桁を出力します。

詳細については,整数オーバーフローで飽和を参照してください。

ポインター演算とアドレス演算

次の表は,アクション言語としてCを使用するStateflowチャート内のポインター演算とアドレス演算の解釈をまとめたものです。

演算

説明

アドレス演算。カスタムコード変数およびStateflow変数で使用します。

*一个

ポインター演算。カスタムコード変数でのみ使用します。

たとえば,モデルsf_bus_demoには,ポインターを引数として取るカスタムC関数が含まれています。チャートでは,カスタムコード関数を呼び出すときに,演算を使用して,アドレスによってStateflowデータを受け渡します。詳細については,Stateflowチャートのカスタム構造体の統合を参照してください。

アクション言語としてMATLABを使用するチャートでは,ポインター演算とアドレス演算はサポートされません。

アプリケーション実装による演算の置換

嵌入式编码器®または万博1manbetx仿真软件编码器™をお持ちの場合は,コードの生成時にコード置換ライブラリ(CRL)を適用するようにコードジェネレーターを構成できます。コードジェネレーターは,演算がアプリケーションの要件を満たすように,生成するコードを変更します。嵌入式编码器を使用すると,カスタムコード置換ライブラリを開発して適用できます。

コード置換ライブラリの演算エントリでは,整数/固定小数点オペランドと結果パターンを指定できます。演算エントリは,次の演算に使用できます。

  • 加算+

  • 減算-

  • 乗算

  • 除算/

たとえば,次の式では,u1u2およびyの型がコード置換ライブラリの加算エントリとの一致を許可する場合に,加算演算子+をターゲット固有の実装に置き換えることができます。

y = u1 + u2

Cチャートのセマンティクスでは,演算式でターゲット整数のサイズが中間型として使用されるため,演算子エントリの整合性が制限されます。たとえば,次の演算式は,ターゲット整数への中間加算を計算します。

Y = (u1 + u2) % 3
ターゲット整数のサイズが32ビットである場合は,この式をコード置換ライブラリからの加算演算子で置き換えて桁落ちすることなく符号付き16ビット値を得ることはできません。

MathWorks®が提供するコード置換ライブラリの使用の詳細については,什么是代码替换?(万博1manbetx仿真软件编码器)および代码替换库(万博1manbetx仿真软件编码器)を参照してください。カスタムコード置換ライブラリの開発の詳細については,什么是代码替换定制?(嵌入式编码)および可以从Simulink模型中替换的代码万博1manbetx(嵌入式编码)を参照してください。

関連するトピック