SA0022 :(おそらく)割り当てられていない戻り値 戻り値に割り当てられていない実行スレッドを含むすべての関数とメソッドを検索します。 理論的根拠:関数またはメソッドの未割り当ての戻り値は、コードが欠落していることを示しています。戻り値に常にデフォルト値がある場合でも、あいまいさを避けるために、これを明示的に再度割り当てることは常に理にかなっています。 重要性:中 例 33 . 例 FUNCT
SA0025:修飾されていない列挙定数 列挙の前に修飾名がない場合の列挙定数を決定します。 理由: 限定されたアクセスにより、コードが読みやすくなり、保守が容易になります。修飾された変数名を強制しないと、プログラムの拡張時に追加の列挙が挿入される可能性があります。この列挙には、既存の列挙と同じ名前の定数が含まれています (以下の例を参照: "red")。これにより、このコード部分へのアクセスがあい
SA0027:識別子の複数の使用 プロジェクトのスコープ内での変数またはオブジェクト(POU)の名前/識別子の複数の使用を検出します。 列挙の場合、修飾名が考慮されます。 理論的根拠:同じ名前は、コードを読むときに混乱する可能性があります。間違ったオブジェクトに誤ってアクセスすると、エラーが発生する可能性があります。したがって、このような状況を回避するために、命名規則を定義して従います。 次のケー
SA0033:未使用の変数 宣言されているが、コンパイルされたプログラムコード内で使用されていない変数を決定します。 理論的根拠:未使用の変数は、プログラムを読みにくくし、保守しにくくします。使用されない変数は、メモリを不必要に占有し、初期化中に実行時間のコストを不必要に消費します。 重要性:中 PLCopenルール:CP22 / CP24 ヒント GVL変数の場合:プロジェクトに複数のアプリケー
SA0040:ゼロによる除算の可能性 ゼロ除算が発生する可能性のあるコードを判別します。 正当化: による除算 0 エラーが発生します。除算する変数は常に最初に 0 であるかどうかをチェックする必要があります。 重要性:高い 例 48 . 例 VAR_GLOBAL g_iVar AT %QW1 : INT; END_VAR PROGRAM PLC_PRG VAR iCounter : INT; i
SA0167:一時的な機能ブロックインスタンス このチェックにより、一時変数として宣言されている機能ブロックインスタンスが決定されます。これは、メソッド内、関数内、またはとしてのインスタンスに影響します VAR_TEMP 宣言されているため、各処理サイクルまたは各ブロック呼び出しで再初期化されます。 理由: 機能ブロックには、通常、複数の PLC サイクルにわたって維持される状態があります。スタッ
SA0168:不要な割り当て コードに影響を与えない変数への割り当てを検索します。 理由:割り当て間で変数が評価されることなく、値が変数に複数回割り当てられている場合、最初の割り当てはプログラムに影響を与えません。 重要度:低 例 125 . 例 PROGRAM PLC_PRG VAR dwVal1 : DWORD; dwVal2 : DWORD; END_VAR // unnecessary a
SA0171:列挙型には「strict」属性が必要です 属性と一致しない列挙型の宣言を取得します {attribute 'strict'} 提供されています。 理由:属性 {attribute 'strict'} コードが厳密な列挙プログラミングルールに違反している場合、コンパイラエラーがスローされます。デフォルトでは、新しい列挙を作成するときに、宣言は属性を使用して自動的に作成されます 'str
SA0061:ポインタの異常な操作 タイプの変数に対する操作を決定します POINTER TO それはしません = (平等)、 <> (不平等)、 + (追加)または ADR それは。 の CODESYS ポインタ演算は一般的に許可されており、賢明に使用することもできます。したがって、整数値を持つポインターの追加は、ポインターに対する通常の操作として分類されます。これにより、ポインタを使用して可変
SA0019:暗黙のポインタ変換 暗黙的に生成されたポインタ変換を取得します。 位置揃え: で CODESYS 、ポインタは厳密に型指定されておらず、任意の方法で相互に割り当てることができます。これは頻繁に使用されるため、コンパイラによって報告されません。ただし、誤って予期しないアクセスが発生する可能性もあります。を割り当てると、 POINTER TO BYTE に POINTER TO DWOR