SA0010:コンポーネントが1つしかないアレイ コンポーネントが1つしかない配列を検索します。 理由:1つのコンポーネントを持つ配列は、基本型の変数に置き換えることができます。この変数へのアクセスは、インデックスを使用して変数にアクセスするよりも大幅に高速です。 例外: 配列の長さは定数によって決定されることが多く、これはプログラムのパラメーターです。そうすれば、プログラムはさまざまな長さの配列
SA0011: メンバーが 1 つしかない無駄な宣言 メンバーが 1 つだけある構造体または列挙型を検出します 理由: メンバーが 1 つだけの構造体や列挙型は宣言すべきではありません。このような宣言は読者を混乱させる可能性があります。要素が 1 つだけある構造体は、エイリアス型で置き換えることができます。要素が 1 つだけある列挙は定数に置き換えることができます。 PLCopenルール:CP22
コマンド: IF ステートメントを反転する 関数 : このコマンドは、 IF のセマンティクスを変更せずにステートメントを作成します。 IF 声明。条件は否定されます。の声明は、 THEN そして ELSE 枝が入れ替わる。すべてのコメントは保持されます。 電話 : 下のコンテキストメニュー リファクタリング 指示 要件: カーソルが任意の場所に配置されている 内で の IF 声明。 表 2 .
SA0023:複雑な戻り値 プロセッサの単純なレジスタコピーでは返すことができない複雑な戻り値を決定します。これには、構造体、配列、およびタイプの戻り値が含まれます STRING (占有ストレージスペースのサイズに関係なく)。 理由: これはパフォーマンスに関する警告です。関数、メソッド、またはプロパティの結果として大きな値が返された場合、プロセッサはコードの実行時にそれらの値を複数回コピーします
SA0037:入力変数への書き込みアクセス 入力変数を検出します ( VAR_INPUT ) POU 内で書き込み権限でアクセスされます。 理由:IEC 61131-3規格によると、入力変数はブロック内で変更してはなりません。このようなアクセスもエラーの原因であり、コードの保守が困難になります。次に、変数が入力として使用され、同時に補助変数として使用されることを示します。このような二重使用は避けて
SA0103:非アトミックデータへの同時アクセス 非アトミック変数(データ型など)かどうかを判断します STRING 、 WSTRING 、 ARRAY 、 STRUCT 、FBインスタンス、64ビットデータ型)は、複数のタスクで使用できます。 理由:アクセス中に同期がない場合、あるタスクでの読み取りと別のタスクでの書き込みにより、読み取られる値に一貫性がなくなる可能性があります。 重要性:中 ヒ
SA0105:複数のインスタンス呼び出し 複数回呼び出されるファンクションブロックのインスタンスを検出します。この目的のために、関数ブロックは次のプラグマでマークされる必要があります。 {attribute 'analysis:report-multiple-instance-calls'} 理由: 一部の機能ブロックは、サイクル内で 1 回だけ呼び出せるように設計されています。このテストでは、複
SA0053:ビット単位のシフトが大きすぎます オペランドのビット単位シフト(ビットシフト)を行う場合、オペランドのデータ型幅を超えていないか判断します。 理由:移動操作がデータ型の幅を超えると、定数が作成されます 0 。 回転シフトがデータ型の幅を超えている場合、読み取りが困難であるため、回転値を切り捨てる必要があります。 重要性:高い 例 62 . 例 PROGRAM PLC_PRG VAR
SA0064:ポインタの追加 ポインタの追加を決定します。 位置揃え: で CODESYS 、ポインター演算は一般に許可されており、適切に使用することもできます。ただし、これはエラーの原因でもあります。したがって、一般にポインター演算を禁止するプログラミング規則が存在します。このテストでは、そのような要件を確認できます。 重要性:中 例 74 . 例 PROGRAM PLC_PRG VAR iTe
SA0117:データ型BITの変数 データ型の変数宣言を検出します。 BIT (構造定義内で可能) 根拠: IEC 61131-3 規格にはデータ型が含まれていません。 BIT 。コードは、 BIT 。 重要度:低 例 100 . 例 TYPE Struct1 : STRUCT bitVar : BIT; iVar : INT; bVar : BOOL; END_STRUCT END_TYPE で