巡回冗長検査
このファンクションは、パラメータNumberOfBytesと先頭アドレスStartAddressで指定されたnバイト(8ビット)を使用して、CRC16(Cyclic Redundancy Check)を計算します。
入力
チェックサム計算の開始アドレス。F70_BCC命令でCRC16計算をサポートしていないPLC(FP0, FP5, FP10)の場合、DTエリアまたはFLエリアを開始アドレスとして指定してください。
開始アドレスStartAddressからCRC16計算を行うバイト数(8ビット)
出力
計算されたチェックサム。フラグIsValidがTRUEにセットされたときだけ有効となります。
計算したチェックサムの有効・無効を示すフラグ
F70_BCC命令でCRC16計算をサポートしていないPLC(FP0, FP5, FP10)では、以下の場合にCRCが無効となります。
内部テーブルを生成する最初の8スキャン
変数StartAddressのアドレスエリアが、DTエリアまたはFLエリアでないとき
F70_BCC命令でCRC16計算をサポートしているPLCの場合、CRCは常に有効です。
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_CRC 巡回冗長検査
PLCの機種によって、下記のいずれかのファンクションが実行されます。
F70_BCC命令でパラメータs1=10でのCRC16計算をサポートしているPLC(FP-e, FP-Sigma, FP2, FP2SH, FP10SH)の場合は、直接F70_BCCを使用します。
その他のPLC機種(FP0, FP0R, FP3, FP5, FP10)では、明示的にCRC16を演算するサブプログラムが呼び出されます。このプログラムには、下記の制限があります:
最初の8スキャンの間に内部テーブルが生成されます。この間、チェックサムは計算されず、出力IsValidは"FALSE"となります。以降、チェックサムが計算され、出力IsValidが"TRUE"にセットされます。
StartAddressには、DTまたはFLのエリアを割り付ける必要があります。
CRC16ファンクションがサブプログラムに変換される機種の場合は、最大ステップ数が200程度まで増えることがあります。
プログラミングの際、特に大量のデータを扱う場合は、内部テーブルの生成とチェックサムの計算のため、時間が必要となることに注意してください。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
Array1: ARRAY [0..10] OF INT:=[0,1,2,3,4,5,6,7,8,9,10];
ARRAY1_BYTES: INT:=22;
Array1Crc: WORD:=0;
CrcIsvalid: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,CRC16!,Instance,10,0,21,4,,?DStartAddress?DNumberOfBytes?CCRC?CIsValid);
B(B_VARIN,,Array1,8,1,10,3,);
B(B_VARIN,,ARRAY1_BYTES,8,2,10,4,);
B(B_VAROUT,,Array1Crc,21,1,23,3,);
B(B_VAROUT,,CrcIsvalid,21,2,23,4,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CRC16(StartAddress := Array1,
NumberOfBytes := ARRAY1_BYTES,
CRC => Array1Crc,
IsValid => CrcIsvalid);