SA0168:不要な割り当て コードに影響を与えない変数への割り当てを検索します。 理由:割り当て間で変数が評価されることなく、値が変数に複数回割り当てられている場合、最初の割り当てはプログラムに影響を与えません。 重要度:低 例 125 . 例 PROGRAM PLC_PRG VAR dwVal1 : DWORD; dwVal2 : DWORD; END_VAR // unnecessary a
SA0054:REAL / LREALを比較して等式/不等式 比較演算子かどうかを決定します = (平等)と <> (不等式)タイプのオペランド REAL また LREAL 比べる。 理由: REAL / LREAL 値は、IEEE 754 標準に従って浮動小数点数として実装されます。この標準は、特定の一見単純な 10 進数を正確に表現できないことを意味します。その結果、以下のように異なる表現が存
SA0056:定数が範囲外 演算子の範囲外のリテラル(定数)を検索します。 理由:このメッセージは、値がこの値の値の範囲外にある定数と比較された場合に発行されます。その後、比較は定数を返します TRUE また FALSE 。これはプログラミングエラーを示しています。 重要性:高い 例 65 . 例 PROGRAM PLC_PRG VAR byTestVar: BYTE; END_VAR WHILE
SA0059:常にTRUEまたはFALSEを返す比較操作 結果が常に次になるリテラルとの比較を検出します。 TRUE または FALSE 、コンパイル時にすでに処理できます。 理論的根拠:一定の演算 TRUE また FALSE 戻り値はプログラミングエラーを示します。 重要性:高い 例 69 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; END_VAR WHILE
SA0060:無効なオペランドとしてNull オペランドに値が含まれる操作を検出します。 0 無効または無意味な操作を引き起こす 理由:このような式は、プログラミングエラーを示している可能性があります。いずれにせよ、それは不必要に実行時間を要します。 重要性:中 例 70 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; wTemp2 : WORD; dwTemp3
SA0063:おそらく16ビット互換ではない操作 中間結果で16ビット演算を決定します。背景:32ビットの中間結果は、16ビットシステムでは切り捨てることができます。例: (int+10) 16ビットを超えることができます。 理由:このメッセージは、16ビットプロセッサと32ビットプロセッサの両方で実行する必要があるコードを記述しなければならないという非常にまれなケースでの問題から保護することを目
SA0005:無効なアドレスとデータ型 無効なアドレスとデータ型の指定を検出します。アドレス内の有効なサイズプレフィックス:X for BOOL 、Bは1バイトのデータ型、Wは2バイトのデータ型、Dは4バイトのデータ型です。 理由:直接アドレスにある変数は、データ型の範囲に対応するアドレスに関連付ける必要があります。たとえば、次の場合、コードの読者を混乱させる可能性があります。 DWORD に B
SA0073:非一時的なカウンター変数の使用 の非一時変数の使用を検出します FOR -グラインド。 理由:これはパフォーマンスの警告です。カウンタ変数は、プログラミングブロックが呼び出されるたびに常に初期化されます。このような変数を一時変数として使用できます( VAR_TEMP )、アクセスが高速になる可能性があり、変数は永続的なメモリスペースを占有しません。 重要性:中 PLCopenルール:
SA0075:ELSEがありません 決定 CASE -なしの指示 ELSE -ブランチ。 理論的根拠:防御的なプログラミングには、 ELSE それぞれに CASE -命令。もし私が ELSE -何もすることがない場合は、コメントでマークする必要があります。そうすれば、コードの読者には、事件が単に忘れられたのではないことが明らかになります。 重要度:低 PLCopenルール:L17 重要 For C
SA0077:CASE式のデータ型の不一致 条件のデータ型がdesのデータ型と一致しないコード位置を検索します CASE -ブランチの一致。 理由:データ型が CASE -変数と CASE -一致しない場合は、エラーを示している可能性があります。 重要度:低 例 83 . 例 TYPE My_Enum : ( eins := 1, zwei := 2, drei := 3, vier := 4 )