SA0105:複数のインスタンス呼び出し 複数回呼び出されるファンクションブロックのインスタンスを検出します。この目的のために、関数ブロックは次のプラグマでマークされる必要があります。 {attribute 'analysis:report-multiple-instance-calls'} 理由: 一部の機能ブロックは、サイクル内で 1 回だけ呼び出せるように設計されています。このテストでは、複
SA0005:無効なアドレスとデータ型 無効なアドレスとデータ型の指定を検出します。アドレス内の有効なサイズプレフィックス:X for BOOL 、Bは1バイトのデータ型、Wは2バイトのデータ型、Dは4バイトのデータ型です。 理由:直接アドレスにある変数は、データ型の範囲に対応するアドレスに関連付ける必要があります。たとえば、次の場合、コードの読者を混乱させる可能性があります。 DWORD に B
SA0072:カウンタ変数の使用が無効です 内のカウンター変数の使用を決定します FOR -リボン。 理由: でのカウンタ変数の操作 FOR ループすると簡単に無限ループが発生する可能性があります。カウンタ変数の特定の値に対するループの実行を防ぐには、次を使用します。 CONTINUE または単に IF 。 重要性:高い PLCopenルール:L12 例 79 . 例 PROGRAM PLC_PR
SA0073:非一時的なカウンター変数の使用 の非一時変数の使用を検出します FOR -グラインド。 理由:これはパフォーマンスの警告です。カウンタ変数は、プログラミングブロックが呼び出されるたびに常に初期化されます。このような変数を一時変数として使用できます( VAR_TEMP )、アクセスが高速になる可能性があり、変数は永続的なメモリスペースを占有しません。 重要性:中 PLCopenルール:
SA0078:CASEブランチのないCASEステートメント 決定 CASE -なしの指示 CASE -ブランチと1つだけ ELSE -命令。 理由: A CASE ケースのないステートメントは実行時間が無駄になり、読みにくくなります。 重要性:中 例 84 . 例 PROGRAM PLC_PRG VAR iVar : INT; xTemp : BOOL; END_VAR iVar := iVar
SA0124:宣言部分でのポインターの間接参照 宣言部分の初期化に使用されるポインター逆参照を決定します。 理由: ポインターと参照は初期化に使用しないでください。ポインターが初期化されていない場合、アクセス違反が発生する可能性があります。 重要性:中 例 110 . 例 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_T
SA0125:初期化の参照変数 宣言部分の初期化に使用される参照変数を決定します。 理由: ポインターと参照は初期化に使用しないでください。ポインターが初期化されていない場合、アクセス違反が発生する可能性があります。 重要性:中 例 111 . 例 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION
SA0145:初期化されていない参照の使用の可能性 使用前に初期化できず、オペレーターによっても初期化されない可能性のある、使用済みのすべての参照変数を取得します __ISVALIDREF チェックされます。このルールは、POUの実装部分に適用されます。宣言にはルールがあります SA0124 。 理由: アクセス中にアクセス違反が発生する可能性があるため、アクセス前に参照の有効性をチェックする必要
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