SA0060:無効なオペランドとしてNull オペランドに値が含まれる操作を検出します。 0 無効または無意味な操作を引き起こす 理由:このような式は、プログラミングエラーを示している可能性があります。いずれにせよ、それは不必要に実行時間を要します。 重要性:中 例 70 . 例 PROGRAM PLC_PRG VAR byTemp1 : BYTE; wTemp2 : WORD; dwTemp3
SA0063:おそらく16ビット互換ではない操作 中間結果で16ビット演算を決定します。背景:32ビットの中間結果は、16ビットシステムでは切り捨てることができます。例: (int+10) 16ビットを超えることができます。 理由:このメッセージは、16ビットプロセッサと32ビットプロセッサの両方で実行する必要があるコードを記述しなければならないという非常にまれなケースでの問題から保護することを目
SA0005:無効なアドレスとデータ型 無効なアドレスとデータ型の指定を検出します。アドレス内の有効なサイズプレフィックス:X for BOOL 、Bは1バイトのデータ型、Wは2バイトのデータ型、Dは4バイトのデータ型です。 理由:直接アドレスにある変数は、データ型の範囲に対応するアドレスに関連付ける必要があります。たとえば、次の場合、コードの読者を混乱させる可能性があります。 DWORD に B
SA0073:非一時的なカウンター変数の使用 の非一時変数の使用を検出します FOR -グラインド。 理由:これはパフォーマンスの警告です。カウンタ変数は、プログラミングブロックが呼び出されるたびに常に初期化されます。このような変数を一時変数として使用できます( VAR_TEMP )、アクセスが高速になる可能性があり、変数は永続的なメモリスペースを占有しません。 重要性:中 PLCopenルール:
SA0075:ELSEがありません 決定 CASE -なしの指示 ELSE -ブランチ。 理論的根拠:防御的なプログラミングには、 ELSE それぞれに CASE -命令。もし私が ELSE -何もすることがない場合は、コメントでマークする必要があります。そうすれば、コードの読者には、事件が単に忘れられたのではないことが明らかになります。 重要度:低 PLCopenルール:L17 重要 For C
SA0077:CASE式のデータ型の不一致 条件のデータ型がdesのデータ型と一致しないコード位置を検索します CASE -ブランチの一致。 理由:データ型が CASE -変数と CASE -一致しない場合は、エラーを示している可能性があります。 重要度:低 例 83 . 例 TYPE My_Enum : ( eins := 1, zwei := 2, drei := 3, vier := 4 )
SA0078:CASEブランチのないCASEステートメント 決定 CASE -なしの指示 CASE -ブランチと1つだけ ELSE -命令。 理由: A CASE ケースのないステートメントは実行時間が無駄になり、読みにくくなります。 重要性:中 例 84 . 例 PROGRAM PLC_PRG VAR iVar : INT; xTemp : BOOL; END_VAR iVar := iVar
SA0039:nullポインタの逆参照の可能性 nullポインタが逆参照される可能性のあるコードを決定します。 正当性: ポインターは、各逆参照の前にチェックして、ゼロに等しくないことを確認する必要があります。そうしないと、実行時にアクセス違反が発生する可能性があります。 重要性:高い 例 113 . 例 PROGRAM PLC_PRG VAR ptiVar1:POINTER TO INT; pt
SA0122:式として定義された配列インデックス 配列インデックスを宣言するときの式の使用を検出します。 理由:すべてのシステムが式を配列境界として許可しているわけではありません。 重要度:低 例 105 . 例 PROGRAM PLC_PRG VAR CONSTANT c_iValue : INT := INT#15; END_VAR VAR arr : ARRAY [0..c_iValue +
CANopen診断 この章では、CANopenプロトコルによって提供される診断オプションについて説明します。 CANopen州 CANopenネットワークは、NMTマスター(ネットワーク管理)とNMTスレーブで構成されています。この場合、NMTマスターはすべてのデバイスを制御し、それらの通信状態を変更できます。 CANopenデバイスは、次の4つの状態のいずれかになります。 初期化:スイッチをオン