SA0040:ゼロによる除算の可能性 ゼロ除算が発生する可能性のあるコードを判別します。 正当化: による除算 0 エラーが発生します。除算する変数は常に最初に 0 であるかどうかをチェックする必要があります。 重要性:高い 例 48 . 例 VAR_GLOBAL g_iVar AT %QW1 : INT; END_VAR PROGRAM PLC_PRG VAR iCounter : INT; i
SA0043: 1 つの POU のみでのグローバル変数の使用 単一のビルディングブロックでのグローバル変数の使用を検出します。 理由: 1 つの場所でのみ使用されるグローバル変数も、その場所でのみ宣言する必要があります。 重要性:中 PLCopenルール:CP26 例 51 . 例 VAR_GLOBAL g_xVar AT %QX0.0 : BOOL ; g_iTest AT %QW1 : IN
SA0105:複数のインスタンス呼び出し 複数回呼び出されるファンクションブロックのインスタンスを検出します。この目的のために、関数ブロックは次のプラグマでマークされる必要があります。 {attribute 'analysis:report-multiple-instance-calls'} 理由: 一部の機能ブロックは、サイクル内で 1 回だけ呼び出せるように設計されています。このテストでは、複
SA0057:小数点以下の桁数が失われる可能性 小数点以下の桁数が失われる可能性のある命令を決定します。 理由:次の種類のコードの一部: diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2) 誤解を招く可能性があります。このコード行の作成者または読者は、分割が次のようになると想定する場合があります。 REAL -実行された操作と結果はこの場合になります
SA0013:同じ変数名の宣言 他の変数によって既に使用されている名前を持つ変数を検出します (たとえば、同じ名前を持つグローバル変数とローカル変数)。同じアクセス範囲内で関数名、アクション名、メソッド名、またはプロパティ名が使用されている変数も検出されます。の GVL で宣言された変数も検出されます。 デバイス ビューまたは POU プール内で。ただし、この場合、 POU ビューはアプリケーショ
SA0058:列挙変数の操作 データ型列挙型の変数に対する操作を決定します。割り当てが許可されます。 理由: 列挙型は通常の整数値として使用すべきではありません。あるいは、エイリアス データ型を定義したり、サブレンジ型を使用したりすることもできます。 重要性:中 例外:属性を持つ列挙型の場合 {attribute 'strict'} がマークされている場合、コンパイラはすでにそのような操作を報告し
SA0066:中間結果の使用 レジスタ サイズより小さいデータ型を持つステートメントでの一時結果の使用を検出します。この場合、暗黙的なキャストによって望ましくない結果が生じる可能性があります。 正当な理由: パフォーマンス上の理由から、 CODESYS Static Analysis プロセッサのレジスタ幅に対して演算を実行します。中間結果は切り捨てられません。これは、次のような誤解を招く可能性が
SA0012:定数として宣言できる変数 書き込みのためにアクセスされないため、定数として宣言できる変数を判別します。 正当性: 変数が宣言点でのみ書き込まれ、それ以外は読み取りのみに使用される場合、静的分析では変数も変更すべきではないと想定されます。まず、定数として宣言すると、プログラム変更時に変数が変更されないことがチェックされます。次に、定数として宣言すると、コードが高速になる可能性があります
SA0015:FB_Initを介したグローバルデータへのアクセス メソッドを介したグローバル変数への関数ブロックのアクセスを決定します FB_Init 。この変数の値は、初期化の順序によって異なります。 理由:ブロックのインスタンスの宣言ポイントによっては、ルールに違反した場合に初期化されていない変数にアクセスする可能性があります。 重要性:高い 例 27 . 例 VAR_GLOBAL g_xTe
SA0017: ポインター変数への異常な代入 アドレスを持たないポインタへの割り当てを決定します(演算子 ADR またはポインタ変数)または定数 0 それは。 理由: ポインタに有効なアドレスではない値が割り当てられている場合、ポインタの逆参照により「アクセス違反例外」が発生します。 重要性:高い 例 29 . 例 PROGRAM PLC_PRG VAR pInt : POINTER TO INT