SA0033:未使用の変数 宣言されているが、コンパイルされたプログラムコード内で使用されていない変数を決定します。 理論的根拠:未使用の変数は、プログラムを読みにくくし、保守しにくくします。使用されない変数は、メモリを不必要に占有し、初期化中に実行時間のコストを不必要に消費します。 重要性:中 PLCopenルール:CP22 / CP24 ヒント GVL変数の場合:プロジェクトに複数のアプリケー
SA0035:未使用の入力変数 関数ブロックインスタンスで使用されない入力変数を決定します。 理論的根拠:未使用の変数は、プログラムを読みにくくし、保守しにくくします。使用されない変数は、メモリを不必要に占有し、初期化中に実行時間のコストを不必要に消費します。 重要性:中 PLCopenルール:CP24 例 43 . 例 FUNCTION_BLOCK FB_Afb VAR_INPUT iIn1:
SA0036:未使用の出力変数 関連する機能または機能ブロック内で割り当てられていない機能および機能ブロックの出力変数を決定します。 理論的根拠:未使用の変数は、プログラムを読みにくくし、保守しにくくします。使用されない変数は、メモリを不必要に占有し、初期化中に実行時間のコストを不必要に消費します。 重要性:中 PLCopenルール:CP24 例 44 . 例 FUNCTION_BLOCK FB_
SA0034:割り当てが正しくない列挙型変数 列挙型変数に割り当てられた値を取得します。定義された列挙定数のみを列挙変数に割り当てることができます。 理由: 列挙型の変数には、意図した値のみが含まれている必要があります。そうでないと、この変数を使用するコードが正しく動作しない可能性があります。プラグマでは常に列挙型を使用することをお勧めします。 {attribute 'strict'} 。その後、
SA0037:入力変数への書き込みアクセス 入力変数を検出します ( VAR_INPUT ) POU 内で書き込み権限でアクセスされます。 理由:IEC 61131-3規格によると、入力変数はブロック内で変更してはなりません。このようなアクセスもエラーの原因であり、コードの保守が困難になります。次に、変数が入力として使用され、同時に補助変数として使用されることを示します。このような二重使用は避けて
SA0038:出力変数への読み取りアクセス 出力変数を検出します ( VAR_OUTPUT ) POU 内の読み取り権限でアクセスされます。 理由:61131-3によると、ブロック内の出力を読み取ることは禁止されています。これは、出力が出力としてだけでなく、中間結果の一時変数としても使用されることを示します。このような二重使用は避けてください。 重要度:低 例 47 . 例 VAR_GLOBAL
SA0040:ゼロによる除算の可能性 ゼロ除算が発生する可能性のあるコードを判別します。 正当化: による除算 0 エラーが発生します。除算する変数は常に最初に 0 であるかどうかをチェックする必要があります。 重要性:高い 例 48 . 例 VAR_GLOBAL g_iVar AT %QW1 : INT; END_VAR PROGRAM PLC_PRG VAR iCounter : INT; i
SA0041:ループ不変コードの可能性 各ループ サイクルで同じ値を計算するループ内の代入を検出します。このようなコード行はループの外側に挿入される可能性があります。 理由: これはパフォーマンスに関する警告です。ループ内で実行されるが、各ループ サイクルで同じことを行うコードは、ループの外で実行できます。 重要性:中 例 49 . 例 PROGRAM PLC_PRG VAR iCounter,
SA0042:異なるアクセスパスの使用 同じ変数に対する異なるアクセスパスの使用を検出します。 理由:同じ要素へのアクセスが異なると、プログラムの可読性と保守性が低下します。一貫して使用することをお勧めします {attribute 'qualified-only'} ライブラリ、グローバル変数リスト、および列挙型の場合。これにより、完全に修飾されたアクセスが強制されます。 重要度:低 例 50 .
SA0043: 1 つの POU のみでのグローバル変数の使用 単一のビルディングブロックでのグローバル変数の使用を検出します。 理由: 1 つの場所でのみ使用されるグローバル変数も、その場所でのみ宣言する必要があります。 重要性:中 PLCopenルール:CP26 例 51 . 例 VAR_GLOBAL g_xVar AT %QX0.0 : BOOL ; g_iTest AT %QW1 : IN