SA0053:ビット単位のシフトが大きすぎます オペランドのビット単位シフト(ビットシフト)を行う場合、オペランドのデータ型幅を超えていないか判断します。 理由:移動操作がデータ型の幅を超えると、定数が作成されます 0 。 回転シフトがデータ型の幅を超えている場合、読み取りが困難であるため、回転値を切り捨てる必要があります。 重要性:高い 例 62 . 例 PROGRAM PLC_PRG VAR
SA0055:符号なしオペランドの不要な比較演算 符号なしオペランドとの不要な比較を検出します。符号なしデータ型がゼロ未満になることはありません。これは、サインチェックとして使用できます。 理由:このチェックで検出された比較は一定の結果を返し、これはコードのエラーを示します。 重要性:高い 例 64 . 例 PROGRAM PLC_PRG VAR byTest: BYTE; END_VAR //
SA0062:式でのTRUEまたはFALSEの使用 リテラルの使用法を決定します TRUE また FALSE 式で。 正当性: ブール値リテラルを使用した演算 TRUE または FALSE 、繰り返し計算され、毎回同じ結果が返されることは避けるべきです。この種の表現は余分なので置き換えるべきです。その存在はエラーを示します。いずれの場合も、式はプログラムの実行時間に不必要に負担をかけます。 重要性
SA0019:暗黙のポインタ変換 暗黙的に生成されたポインタ変換を取得します。 位置揃え: で CODESYS 、ポインタは厳密に型指定されておらず、任意の方法で相互に割り当てることができます。これは頻繁に使用されるため、コンパイラによって報告されません。ただし、誤って予期しないアクセスが発生する可能性もあります。を割り当てると、 POINTER TO BYTE に POINTER TO DWOR
SA0130: 暗黙的な拡張変換 算術演算中に小さいデータ型から大きいデータ型への変換が暗黙的に実行されるコードの位置を検出します。 理由: ソース型の値の範囲がターゲット型の値の範囲内に完全に含まれている場合、コンパイラは異なる型の代入を許可します。ただし、コンパイラは、できる限り遅いタイミングでコードへの変換を構築します。タイプの割り当ての場合 lint := dint * dint の場合、
SA0133:明示的なナローイング変換 大きいデータ型から小さいデータ型への明示的に実行された変換を決定します。 根拠: 多数の型変換が行われる場合は、変数に間違ったデータ型を選択したことを示している可能性があります。このため、データ型変換の明示的な理由を要求するプログラミング ガイドラインがあります。 重要度:低 例 55 . 例 PROGRAM SA0133 VAR siVar:SINT; d
SA0134:明示的な符号付き/符号なし変換 明示的に実行された、符号付きデータ型から符号なしデータ型への変換、およびその逆の変換を検出します。 正当性: 型変換を過度に使用すると、変数に対して間違ったデータ型が選択された可能性があります。このため、データ型変換の明示的な理由を要求するプログラミング ガイドラインがあります。 重要度:低 例 56 . 例 PROGRAM PLC_PRG VAR b
SA0047:直接アドレスへのアクセス 実装コードでの直接アドレスアクセスを決定します。 理由:シンボリックプログラミングが常に望ましい:変数には意味を持つこともできる名前があります。アドレスが何に使用されているかはわかりません。 重要性:高い PLCopenルール:N1 / CP1 例 58 . 例 PROGRAM PLC_PRG VAR xVar : BOOL; byVar : BYTE; E
SA0048:直接アドレスのAT宣言 決定 AT -直接アドレスに関する宣言。 コード内で直接アドレスを使用すると、アドレスが複数の場所に出現するため問題が発生します。 最初のコントローラー構成では、物理オブジェクトのアドレスへの割り当てが定義されます。 プログラムの 2 番目では、変数がこれらのアドレスに割り当てられます。 構成の変更によりアドレスが再配置された場合は、プログラム内のまったく別の
SA0051:BOOL変数の比較演算 タイプの変数の比較演算を決定します BOOL 。 理由: CODESYS このような種類の比較が可能になります。しかし、それらは非常に珍しいため、混乱を招く可能性があります。 IEC 61131-3 規格では、これらの比較は規定されていません。これらを回避すると、他の開発システムへのコードの移植性が高まります。 重要性:中 例 60 . 例 PROGRAM P