SA0010:コンポーネントが1つしかないアレイ コンポーネントが1つしかない配列を検索します。 理由:1つのコンポーネントを持つ配列は、基本型の変数に置き換えることができます。この変数へのアクセスは、インデックスを使用して変数にアクセスするよりも大幅に高速です。 例外: 配列の長さは定数によって決定されることが多く、これはプログラムのパラメーターです。そうすれば、プログラムはさまざまな長さの配列
SA0011: メンバーが 1 つしかない無駄な宣言 メンバーが 1 つだけある構造体または列挙型を検出します 理由: メンバーが 1 つだけの構造体や列挙型は宣言すべきではありません。このような宣言は読者を混乱させる可能性があります。要素が 1 つだけある構造体は、エイリアス型で置き換えることができます。要素が 1 つだけある列挙は定数に置き換えることができます。 PLCopenルール:CP22
SA0012:定数として宣言できる変数 書き込みのためにアクセスされないため、定数として宣言できる変数を判別します。 正当性: 変数が宣言点でのみ書き込まれ、それ以外は読み取りのみに使用される場合、静的分析では変数も変更すべきではないと想定されます。まず、定数として宣言すると、プログラム変更時に変数が変更されないことがチェックされます。次に、定数として宣言すると、コードが高速になる可能性があります
SA0013:同じ変数名の宣言 他の変数によって既に使用されている名前を持つ変数を検出します (たとえば、同じ名前を持つグローバル変数とローカル変数)。同じアクセス範囲内で関数名、アクション名、メソッド名、またはプロパティ名が使用されている変数も検出されます。の GVL で宣言された変数も検出されます。 デバイス ビューまたは POU プール内で。ただし、この場合、 POU ビューはアプリケーショ
SA0014:インスタンスへの割り当て 機能ブロックインスタンスへの割り当てを決定します。ポインタ変数または参照変数を持つインスタンスの場合、これらの割り当てにはリスクが伴う可能性があります。 理由:これはパフォーマンスの警告です。インスタンスが別のインスタンスに割り当てられている場合、すべての要素とサブ要素が1つのインスタンスから別のインスタンスにコピーされます。データへのポインタもコピーされま
SA0015:FB_Initを介したグローバルデータへのアクセス メソッドを介したグローバル変数への関数ブロックのアクセスを決定します FB_Init 。この変数の値は、初期化の順序によって異なります。 理由:ブロックのインスタンスの宣言ポイントによっては、ルールに違反した場合に初期化されていない変数にアクセスする可能性があります。 重要性:高い 例 27 . 例 VAR_GLOBAL g_xTe
SA0016:構造のギャップ 現在設定されているターゲットシステムのアライメント要件によって引き起こされる構造または機能ブロックのギャップを特定します。可能であれば、構造要素を再配置するか、ダミー要素で埋めることによって、ギャップを削除する必要があります。これが不可能な場合は、プラグマを介して影響を受ける構造のルールを使用できます analysis 非アクティブ化します。 理由:プラットフォームご
SA0017: ポインター変数への異常な代入 アドレスを持たないポインタへの割り当てを決定します(演算子 ADR またはポインタ変数)または定数 0 それは。 理由: ポインタに有効なアドレスではない値が割り当てられている場合、ポインタの逆参照により「アクセス違反例外」が発生します。 重要性:高い 例 29 . 例 PROGRAM PLC_PRG VAR pInt : POINTER TO INT
SA0018:異常なビットアクセス 符号付き変数へのビットアクセスを検出します。ただし、IEC 61131-3 規格では、ビット フィールドに対するビット アクセスとビット シフト操作のみが許可されています。 厳格なルールも参照してください SA0147 そして SA0148 。 理由:符号付きデータ型をビットフィールドとして使用しないでください。その逆も同様です。 IEC 61131-3規格では
SA0020:REAL変数への切り捨てられた値の割り当ての可能性 データ型変数の切り捨てられた値を含む可能性のある整数変数の演算を検出します REAL 割り当てられています。 理由:整数計算の結果が次の場合、静的コード分析でエラーが発生します REAL - また LREAL -変数が割り当てられます。プログラマーは、そのような割り当ての解釈が正しくない可能性があることに注意する必要があります。 l