SA0167:一時的な機能ブロックインスタンス このチェックにより、一時変数として宣言されている機能ブロックインスタンスが決定されます。これは、メソッド内、関数内、またはとしてのインスタンスに影響します VAR_TEMP 宣言されているため、各処理サイクルまたは各ブロック呼び出しで再初期化されます。 理由: 機能ブロックには、通常、複数の PLC サイクルにわたって維持される状態があります。スタッ
SA0168:不要な割り当て コードに影響を与えない変数への割り当てを検索します。 理由:割り当て間で変数が評価されることなく、値が変数に複数回割り当てられている場合、最初の割り当てはプログラムに影響を与えません。 重要度:低 例 125 . 例 PROGRAM PLC_PRG VAR dwVal1 : DWORD; dwVal2 : DWORD; END_VAR // unnecessary a
SA0169:無視された出口 メソッドまたは関数が呼び出されたときに指定されていないメソッドおよび関数の出口を決定します。 理論的根拠:結果が使用されないため、無視された出口は、未処理のエラーまたは無意味な関数呼び出しを示している可能性があります。 重要性:中 例 126 . 例 FUNCTION Fun1 VAR_INPUT bIn : BOOL; VAR_END VAR_OUTPUT bOut
SA0170: 出力変数のアドレスは使用できません 出力変数のアドレスが含まれるコードの位置を検出します ( VAR_OUTPUT 、 VAR_IN_OUT ファンクションブロックの)を使用します。 理由: ファンクション ブロック出力のアドレスを次の方法で使用することは許可されていません。 経由 ADR -オペレーター によって REF= 例外: 出力変数が同じ関数ブロック内で使用されている場合
SA0171:列挙型には「strict」属性が必要です 属性と一致しない列挙型の宣言を取得します {attribute 'strict'} 提供されています。 理由:属性 {attribute 'strict'} コードが厳密な列挙プログラミングルールに違反している場合、コンパイラエラーがスローされます。デフォルトでは、新しい列挙を作成するときに、宣言は属性を使用して自動的に作成されます 'str
SA0053:ビット単位のシフトが大きすぎます オペランドのビット単位シフト(ビットシフト)を行う場合、オペランドのデータ型幅を超えていないか判断します。 理由:移動操作がデータ型の幅を超えると、定数が作成されます 0 。 回転シフトがデータ型の幅を超えている場合、読み取りが困難であるため、回転値を切り捨てる必要があります。 重要性:高い 例 62 . 例 PROGRAM PLC_PRG VAR
SA0054:REAL / LREALを比較して等式/不等式 比較演算子かどうかを決定します = (平等)と <> (不等式)タイプのオペランド REAL また LREAL 比べる。 理由: REAL / LREAL 値は、IEEE 754 標準に従って浮動小数点数として実装されます。この標準は、特定の一見単純な 10 進数を正確に表現できないことを意味します。その結果、以下のように異なる表現が存
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 -実行された操作と結果はこの場合になります