オペレーター
CODESYS V3はすべてのIEC 61131-3演算子をサポートしています。これらの演算子はプロジェクト全体で暗黙的に認識されます。これらのIEC演算子に加えて、 CODESYS IEC 61131-3 以外の演算子もいくつかサポートします。
演算子は関数などのブロック内で使用されます。
ヒント
ST 演算子の処理順序 (結合強度) については、「ST 式」の章を参照してください。
注意
浮動小数点データ型の演算の場合、計算結果は適用されるターゲット システムのハードウェアによって異なります。
注意
データ型にオーバーフローまたはアンダーフローがある操作の場合、計算結果は適用されるターゲット システムのハードウェアによって異なります。
データ型のオーバーフロー/アンダーフロー
の CODESYS コンパイラはターゲット デバイス用のコードを生成し、常にターゲット デバイスで定義されたネイティブ サイズで一時結果を計算します。たとえば、x86 および ARM システムでは少なくとも 32 ビットの一時値で計算が実行され、x64 システムでは常に 64 ビットの一時値で計算が実行されます。これにより、計算速度が大幅に向上し、多くの場合、目的の結果も得られます。ただし、これは、場合によっては、データ型のオーバーフローまたはアンダーフローが切り捨てられないことも意味します。
例1
この加算の結果は切り捨てられず、 dwVar
は 65536
。
VAR wVar : WORD; dwVar: DWORD; END_VAR wVar := 65535; dwVar := wVar + 1;
例2
データ型のオーバーフローとアンダーフローは切り捨てられず、結果(bVar1, bVar2
)は、両方の比較において FALSE
32 ビットおよび 64 ビットのハードウェアで。
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := (wVar1 + 1) = wVar2; bVar2 := (wVar2 - 1) = wVar1;
例3
割り当てによって wVar3
値はターゲットデータ型に切り捨てられます WORD
そしてその結果 bvar1
は TRUE
。
VAR wVar1 : WORD; wVar2 : WORD; wVar3 : WORD; bVar1 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; wVar3 := (wVar1 + 1); bVar1 := wVar3 = wVar2;
例4
コンパイラに一時的な結果を強制的に切り捨てさせるには、変換を挿入することができます。
型変換により、両方の比較が16ビットのみになり、結果(bVar1, bVar2
)は、両方の比較においてそれぞれ TRUE
。
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := TO_WORD(wVar1 + 1) = wVar2; bVar2 := TO_WORD(wVar2 - 1) = wVar1;
算術演算子
ビット文字列演算子
ビットシフト演算子
選択演算子
比較演算子
比較演算子は、2 つの入力 (最初のオペランドと 2 番目のオペランド) を比較するブール値です。
アドレス演算子
オペレーターを呼び出す
型変換演算子
型変換演算子を明示的に呼び出すことができます。以下に説明する型変換演算子は、ある基本型から別の基本型への型指定変換やオーバーロードに使用できます。「大きい」型から「小さい」型への変換も暗黙的に可能です(たとえば、 INT
に BYTE
または DINT
に WORD
)。
型変換: <elementary data type> _TO_ another elementary data type>
オーバーロードされた変換: TO_ <elementary data type>
基本データ型
<elementary data type> = __UXINT | __XINT | __XWORD | BIT | BOOL | BYTE | DATE | DATE_AND_TIME | DINT | DT | DWORD | INT | LDATE | LDATE_AND_TIME | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD
キーワード T
、 TIME_OF_DAY
そして DATE_AND_TIME
データ型の代替形式 TIME
、 TOD
、 そして DT
。 T
、 TIME_OF_DAY
そして DATE_AND_TIME
型変換コマンドとしては表されません。
重要
型変換演算子のオペランド値がターゲットデータ型の値の範囲外の場合、結果の出力はプロセッサの種類に依存し、未定義になります。これは、たとえば、負のオペランド値が変換された場合に当てはまります。 LREAL
ターゲットデータ型に UINT
。
大きなデータ型から小さなデータ型に変換すると、情報が失われる可能性があります。
変換時の文字列操作 STRING
または WSTRING
型を変換する場合 STRING
または WSTRING
、型付けされた値は文字列として左揃えされ、長すぎる場合は切り捨てられます。したがって、型変換演算子の戻り変数を宣言します。 <>_TO_STRING
そして <>_TO_WSTRING
操作しなくても文字列に十分なスペースが確保されるほど十分に長い。
数値演算子
名前空間演算子
名前空間演算子は、IEC 61131-3 演算子から拡張されたものです。これにより、プロジェクト内の変数やモジュールに同じ名前を複数回使用する場合でも、変数やモジュールへの一意のアクセスを提供できるようになります。
マルチコア演算子
異なるタスクを操作するには、これらのタスクを同期する必要があります。これは、マルチコア プラットフォームで作業する場合に特に当てはまります。 CODESYS この同期をサポートするためにいくつかの特別な演算子を提供します。
これらの演算子はIEC-61131-3の拡張です。 TEST_AND_SET
そして __COMPARE_AND_SWAP
同様のタスクに使用されます。