SA0052:異常なシフト操作 符号付き変数のシフト演算(ビットシフト)を決定します。ビットフィールドデータ型のシフト操作の場合( Byte 、 DWORD 、 LWORD 、 WORD )エラーは出力されません。 理由: CODESYS 署名されたデータ型のシフト操作を許可します。ただし、これらの操作は一般的ではなく、混乱を招く可能性があります。 IEC-61131-3規格はそのような操作を規定
SA0072:カウンタ変数の使用が無効です 内のカウンター変数の使用を決定します FOR -リボン。 理由: でのカウンタ変数の操作 FOR ループすると簡単に無限ループが発生する可能性があります。カウンタ変数の特定の値に対するループの実行を防ぐには、次を使用します。 CONTINUE または単に IF 。 重要性:高い PLCopenルール:L12 例 79 . 例 PROGRAM PLC_PR
SA0076:列挙定数がありません 各列挙定数が条件として使用されるかどうかを決定します。 CASE ステートメントとクエリ CASE 支店。 理論的根拠:防御プログラミングでは、列挙型のすべての可能な値を処理する必要があります。特定の列挙値にアクションが必要ない場合は、コメントで明示的にマークする必要があります。そうすれば、コードの読者には、値が単に忘れられたのではないことが明らかになります。
SA0118:定数を使用しない初期化 定数を割り当てない初期化子を検索します。 理由:初期化は可能な限り一定であり、他の変数を参照しないようにする必要があります。特に、初期化中の関数呼び出しは、初期化されていないデータへのアクセスにつながる可能性があるため、避ける必要があります。 重要性:中 例 109 . 例 PROGRAM PLC_PRG VAR dwTemp : DWORD := 22; d
SA0124:宣言部分でのポインターの間接参照 宣言部分の初期化に使用されるポインター逆参照を決定します。 理由: ポインターと参照は初期化に使用しないでください。ポインターが初期化されていない場合、アクセス違反が発生する可能性があります。 重要性:中 例 110 . 例 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_T
SA0125:初期化の参照変数 宣言部分の初期化に使用される参照変数を決定します。 理由: ポインターと参照は初期化に使用しないでください。ポインターが初期化されていない場合、アクセス違反が発生する可能性があります。 重要性:中 例 111 . 例 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION
SA0140:ステートメントがコメントアウトされました コメントアウトされたステートメントを検索します 理論的根拠:コードは、デバッグ目的でコメントアウトされることがよくあります。そのようなコメントがリリースされたとき、コードを削除する必要があるのか、それともデバッグ目的でコメントアウトされて誤ってコメントされていないのかは後で不明になります。 重要性:高い PLCopenルール:C4 例 112
SA0046:初期化されていないインターフェイスが使用されている可能性があります 使用前に初期化されていないインターフェースの使用を検出します。 理由: インターフェイス参照は、使用する前に <> 0 であるかどうかをチェックする必要があります。そうしないと、アクセス中にアクセス違反が発生する可能性があります。 重要性:高い 例 114 . 例 //Declaration of INTERFACE
SA0145:初期化されていない参照の使用の可能性 使用前に初期化できず、オペレーターによっても初期化されない可能性のある、使用済みのすべての参照変数を取得します __ISVALIDREF チェックされます。このルールは、POUの実装部分に適用されます。宣言にはルールがあります SA0124 。 理由: アクセス中にアクセス違反が発生する可能性があるため、アクセス前に参照の有効性をチェックする必要
SA0150:メトリックの下限または上限の違反 下限または上限で有効なメトリックに違反しているビルディングブロックを識別します。 理論的根拠:特定のメトリックに準拠するコードは、読みやすく、保守しやすく、テストしやすいです。 重要性:高い PLCopenルール:CP9 例 116 . 例 初期状況:メトリック ビューの数 対話中です プロジェクト設定→静的コード分析→メトリクス 起動しました。下限