SA0060:無効なオペランドとしてNull オペランドに値が含まれる操作を検出します。 0 無効または無意味な操作を引き起こす 理由:このような式は、プログラミングエラーを示している可能性があります。いずれにせよ、それは不必要に実行時間を要します。 重要性:中 例 70 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; wTemp2 : WORD; dwTemp3
SA0048:直接アドレスのAT宣言 決定 AT -直接アドレスに関する宣言。 コード内で直接アドレスを使用すると、アドレスが複数の場所に出現するため問題が発生します。 最初のコントローラー構成では、物理オブジェクトのアドレスへの割り当てが定義されます。 プログラムの 2 番目では、変数がこれらのアドレスに割り当てられます。 構成の変更によりアドレスが再配置された場合は、プログラム内のまったく別の
SA0073:非一時的なカウンター変数の使用 の非一時変数の使用を検出します FOR -グラインド。 理由:これはパフォーマンスの警告です。カウンタ変数は、プログラミングブロックが呼び出されるたびに常に初期化されます。このような変数を一時変数として使用できます( VAR_TEMP )、アクセスが高速になる可能性があり、変数は永続的なメモリスペースを占有しません。 重要性:中 PLCopenルール:
SA0076:列挙定数がありません 各列挙定数が条件として使用されるかどうかを決定します。 CASE ステートメントとクエリ CASE 支店。 理論的根拠:防御プログラミングでは、列挙型のすべての可能な値を処理する必要があります。特定の列挙値にアクションが必要ない場合は、コメントで明示的にマークする必要があります。そうすれば、コードの読者には、値が単に忘れられたのではないことが明らかになります。
SA0077:CASE式のデータ型の不一致 条件のデータ型がdesのデータ型と一致しないコード位置を検索します CASE -ブランチの一致。 理由:データ型が CASE -変数と CASE -一致しない場合は、エラーを示している可能性があります。 重要度:低 例 83 . 例 TYPE My_Enum : ( eins := 1, zwei := 2, drei := 3, vier := 4 )
SA0118:定数を使用しない初期化 定数を割り当てない初期化子を検索します。 理由:初期化は可能な限り一定であり、他の変数を参照しないようにする必要があります。特に、初期化中の関数呼び出しは、初期化されていないデータへのアクセスにつながる可能性があるため、避ける必要があります。 重要性:中 例 109 . 例 PROGRAM PLC_PRG VAR dwTemp : DWORD := 22; d
SA0160:再帰呼び出し ファンクションブロックのアクション、メソッド、およびプロパティでの再帰呼び出しを決定します。また、仮想関数呼び出しとインターフェース呼び出しを介して可能な再帰を検出します。 理由:再帰は非決定論的な動作につながるため、エラーの原因になります。 重要性:中 PLCopenルール:CP13 例 117 . 例 機能ブロック FB_Test 次の方法です Call 割り当て:
SA0115:データ型UNIONの宣言 の宣言を取得します UNION -データ型と型aの変数の宣言 UNION 。 根拠: IEC 61131-3 標準には共用体が含まれていません。共用体を使用しないとコードの移植が容易になります。 重要度:低 例 99 . 例 TYPE A_UNION: UNION lrTemp : LREAL; liTemp : LINT; END_UNION END_TY
プラグマ:analysis このプラグマを使用すると、プログラミングブロック内の個々のコード行のコーディングルールを非アクティブ化して、プログラミングブロックで使用できるようにします。 静的コード分析 考慮されません。ルール番号とその前のマイナス記号( "-")を指定して、コーディングルールを無効にします。プラス記号( "+")は、アクティブ化のために接頭辞が付けられます。プラグマでは、ルールをい
SA0012:定数として宣言できる変数 書き込みのためにアクセスされないため、定数として宣言できる変数を判別します。 正当性: 変数が宣言点でのみ書き込まれ、それ以外は読み取りのみに使用される場合、静的分析では変数も変更すべきではないと想定されます。まず、定数として宣言すると、プログラム変更時に変数が変更されないことがチェックされます。次に、定数として宣言すると、コードが高速になる可能性があります