SA0005:無効なアドレスとデータ型 無効なアドレスとデータ型の指定を検出します。アドレス内の有効なサイズプレフィックス:X for BOOL 、Bは1バイトのデータ型、Wは2バイトのデータ型、Dは4バイトのデータ型です。 理由:直接アドレスにある変数は、データ型の範囲に対応するアドレスに関連付ける必要があります。たとえば、次の場合、コードの読者を混乱させる可能性があります。 DWORD に B
SA0047:直接アドレスへのアクセス 実装コードでの直接アドレスアクセスを決定します。 理由:シンボリックプログラミングが常に望ましい:変数には意味を持つこともできる名前があります。アドレスが何に使用されているかはわかりません。 重要性:高い PLCopenルール:N1 / CP1 例 58 . 例 PROGRAM PLC_PRG VAR xVar : BOOL; byVar : BYTE; E
SA0051:BOOL変数の比較演算 タイプの変数の比較演算を決定します BOOL 。 理由: CODESYS このような種類の比較が可能になります。しかし、それらは非常に珍しいため、混乱を招く可能性があります。 IEC 61131-3 規格では、これらの比較は規定されていません。これらを回避すると、他の開発システムへのコードの移植性が高まります。 重要性:中 例 60 . 例 PROGRAM P
SA0075:ELSEがありません 決定 CASE -なしの指示 ELSE -ブランチ。 理論的根拠:防御的なプログラミングには、 ELSE それぞれに CASE -命令。もし私が ELSE -何もすることがない場合は、コメントでマークする必要があります。そうすれば、コードの読者には、事件が単に忘れられたのではないことが明らかになります。 重要度:低 PLCopenルール:L17 重要 For C
SA0078:CASEブランチのないCASEステートメント 決定 CASE -なしの指示 CASE -ブランチと1つだけ ELSE -命令。 理由: A CASE ケースのないステートメントは実行時間が無駄になり、読みにくくなります。 重要性:中 例 84 . 例 PROGRAM PLC_PRG VAR iVar : INT; xTemp : BOOL; END_VAR iVar := iVar
SA0111:ポインタ変数 タイプの変数を決定します POINTER TO 。 理由:IEC61131-3規格ではポインターが許可されていません。 重要度:低 例 95 . 例 VAR piTemp : POINTER TO INT; pbyTemp : POINTER TO BYTE; END_VAR での出力 メッセージ ビュー: SA0111: データ型 POINTER は使用できません こ
SA0112:参照変数 型の変数を検出します。 REFERENCE TO 理由:IEC61131-3規格では参照が許可されていません。 重要度:低 例 96 . 例 VAR ref_int : REFERENCE TO INT; ref_dw : REFERENCE TO DWORD; END_VAR での出力 メッセージ ビュー: SA0112: データ型 REFERENCE は許可されません
SA0121: VAR_EXTERNAL 宣言がありません 関数ブロックで宣言されていないグローバル変数の使用を検出します。 VAR_EXTERNAL 理由:IEC 61131-3規格によると、グローバル変数へのアクセスは、 VAR_EXTERNAL -宣言は許可されています。 重要度:低 PLCopenルール:CP18 例 103 . 例 VAR_GLOBAL iGlob1 : INT; END
SA0122:式として定義された配列インデックス 配列インデックスを宣言するときの式の使用を検出します。 理由:すべてのシステムが式を配列境界として許可しているわけではありません。 重要度:低 例 105 . 例 PROGRAM PLC_PRG VAR CONSTANT c_iValue : INT := INT#15; END_VAR VAR arr : ARRAY [0..c_iValue +
SA0123:INI、ADR、またはBITADRの使用 の使用を決定します CODESYS Static Analysis -特定の演算子 INI 、 ADR と BITADR 。 理由: CODESYS -特定の演算子は、コードの移植性を妨げます。 重要度:低 例 106 . 例 PROGRAM PLC_PRG VAR uiTemp : UINT; TempVarInFUNC : DWORD;