SA0006:複数のタスクからの書き込みアクセス 複数のタスクによって書き込まれる変数を決定します。 理由:いくつかのタスクで記述された変数は、その値を予期せず変更する可能性があります。これは混乱を招く状況につながる可能性があります。文字列変数および一部の32ビットシステムでは、変数が2つのタスクで同時に書き込まれる場合、64ビット整数変数も一貫性のないステータスになる可能性があります。 例外:場
SA0029:実装と宣言の表記が異なります 識別子の表記が宣言の表記と異なるコード位置を決定します。 根拠: IEC 61131-3 標準では、識別子は大文字と小文字を区別しないと定義されています。これは、「」として宣言された変数を意味します。 varx 「」としても使用できます VaRx ただし、これは混乱を招き誤解を招くため、避けてください。 重要性:中 例 40 . 例 デバイスツリーにブロ
SA0036:未使用の出力変数 関連する機能または機能ブロック内で割り当てられていない機能および機能ブロックの出力変数を決定します。 理論的根拠:未使用の変数は、プログラムを読みにくくし、保守しにくくします。使用されない変数は、メモリを不必要に占有し、初期化中に実行時間のコストを不必要に消費します。 重要性:中 PLCopenルール:CP24 例 44 . 例 FUNCTION_BLOCK FB_
SA0037:入力変数への書き込みアクセス 入力変数を検出します ( VAR_INPUT ) POU 内で書き込み権限でアクセスされます。 理由:IEC 61131-3規格によると、入力変数はブロック内で変更してはなりません。このようなアクセスもエラーの原因であり、コードの保守が困難になります。次に、変数が入力として使用され、同時に補助変数として使用されることを示します。このような二重使用は避けて
SA0038:出力変数への読み取りアクセス 出力変数を検出します ( VAR_OUTPUT ) POU 内の読み取り権限でアクセスされます。 理由:61131-3によると、ブロック内の出力を読み取ることは禁止されています。これは、出力が出力としてだけでなく、中間結果の一時変数としても使用されることを示します。このような二重使用は避けてください。 重要度:低 例 47 . 例 VAR_GLOBAL
SA0041:ループ不変コードの可能性 各ループ サイクルで同じ値を計算するループ内の代入を検出します。このようなコード行はループの外側に挿入される可能性があります。 理由: これはパフォーマンスに関する警告です。ループ内で実行されるが、各ループ サイクルで同じことを行うコードは、ループの外で実行できます。 重要性:中 例 49 . 例 PROGRAM PLC_PRG VAR iCounter,
SA0095:条件の割り当て の条件で割り当てを決定します IF -、 CASE - また REPEAT -構築します。 理由:割り当て(:=)と比較(=)は簡単に混同される可能性があります。したがって、条件内の割り当ては、意図せずに簡単に行われる可能性があるため、報告されます。これは、コードの読者を混乱させる可能性もあります。 重要性:高い 例 87 . 例 PROGRAM PLC_PRG VA
SA0100:<n>バイトより大きい変数 nバイトを超える変数を検索します。ここで、nは現在の構成で指定されます。デフォルト:1024バイト。行をダブルクリックすると、値を変更できます。 理論的根拠:一部のプログラミングガイドラインでは、単一の変数の最大サイズが設定されています。これはここで確認できます。 重要度:低 例 88 . 例 PROGRAM PLC_PRG VAR aobyTest :
SA0163:ネストされたコメント ネストされたコメントを検出します。 理論的根拠:ネストされたコメントは読みにくいため、避ける必要があります。 重要度:低 PLCopenルール:C3 例 120 . 例 {attribute 'do-analysis'} (* That is (* nested comment 1 *) *) PROGRAM PLC_PRG VAR (* That is //
SA0164:複数行コメント で始まる複数行のコメントを検索します (* comment *) エンコードされます。で始まる単一行のコメントのみが許可されます // comment エンコードされます。 理論的根拠:一部のプログラミングガイドラインでは、コメントの最初と最後が見えなくなったり、エラーによって終了コメントブラケットが削除されたりする可能性があるため、コード内の複数行コメントを禁止して