SA0171:列挙型には「strict」属性が必要です 属性と一致しない列挙型の宣言を取得します {attribute 'strict'} 提供されています。 理由:属性 {attribute 'strict'} コードが厳密な列挙プログラミングルールに違反している場合、コンパイラエラーがスローされます。デフォルトでは、新しい列挙を作成するときに、宣言は属性を使用して自動的に作成されます 'str
SA0053:ビット単位のシフトが大きすぎます オペランドのビット単位シフト(ビットシフト)を行う場合、オペランドのデータ型幅を超えていないか判断します。 理由:移動操作がデータ型の幅を超えると、定数が作成されます 0 。 回転シフトがデータ型の幅を超えている場合、読み取りが困難であるため、回転値を切り捨てる必要があります。 重要性:高い 例 62 . 例 PROGRAM PLC_PRG VAR
SA0055:符号なしオペランドの不要な比較演算 符号なしオペランドとの不要な比較を検出します。符号なしデータ型がゼロ未満になることはありません。これは、サインチェックとして使用できます。 理由:このチェックで検出された比較は一定の結果を返し、これはコードのエラーを示します。 重要性:高い 例 64 . 例 PROGRAM PLC_PRG VAR byTest: BYTE; END_VAR //
SA0056:定数が範囲外 演算子の範囲外のリテラル(定数)を検索します。 理由:このメッセージは、値がこの値の値の範囲外にある定数と比較された場合に発行されます。その後、比較は定数を返します TRUE また FALSE 。これはプログラミングエラーを示しています。 重要性:高い 例 65 . 例 PROGRAM PLC_PRG VAR byTestVar: BYTE; END_VAR WHILE
SA0057:小数点以下の桁数が失われる可能性 小数点以下の桁数が失われる可能性のある命令を決定します。 理由:次の種類のコードの一部: diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2) 誤解を招く可能性があります。このコード行の作成者または読者は、分割が次のようになると想定する場合があります。 REAL -実行された操作と結果はこの場合になります
SA0058:列挙変数の操作 データ型列挙型の変数に対する操作を決定します。割り当てが許可されます。 理由: 列挙型は通常の整数値として使用すべきではありません。あるいは、エイリアス データ型を定義したり、サブレンジ型を使用したりすることもできます。 重要性:中 例外:属性を持つ列挙型の場合 {attribute 'strict'} がマークされている場合、コンパイラはすでにそのような操作を報告し
SA0059:常にTRUEまたはFALSEを返す比較操作 結果が常に次になるリテラルとの比較を検出します。 TRUE または FALSE 、コンパイル時にすでに処理できます。 理論的根拠:一定の演算 TRUE また FALSE 戻り値はプログラミングエラーを示します。 重要性:高い 例 69 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; END_VAR WHILE
SA0060:無効なオペランドとしてNull オペランドに値が含まれる操作を検出します。 0 無効または無意味な操作を引き起こす 理由:このような式は、プログラミングエラーを示している可能性があります。いずれにせよ、それは不必要に実行時間を要します。 重要性:中 例 70 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; wTemp2 : WORD; dwTemp3
SA0062:式でのTRUEまたはFALSEの使用 リテラルの使用法を決定します TRUE また FALSE 式で。 正当性: ブール値リテラルを使用した演算 TRUE または FALSE 、繰り返し計算され、毎回同じ結果が返されることは避けるべきです。この種の表現は余分なので置き換えるべきです。その存在はエラーを示します。いずれの場合も、式はプログラムの実行時間に不必要に負担をかけます。 重要性
SA0063:おそらく16ビット互換ではない操作 中間結果で16ビット演算を決定します。背景:32ビットの中間結果は、16ビットシステムでは切り捨てることができます。例: (int+10) 16ビットを超えることができます。 理由:このメッセージは、16ビットプロセッサと32ビットプロセッサの両方で実行する必要があるコードを記述しなければならないという非常にまれなケースでの問題から保護することを目