CRC16

巡回冗長検査

このファンクションは、パラメータNumberOfBytesと先頭アドレスStartAddressで指定されたnバイト(8ビット)を使用して、CRC16(Cyclic Redundancy Check)を計算します。

パラメータ

入力

StartAddress (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

チェックサム計算の開始アドレス。F70_BCC命令でCRC16計算をサポートしていないPLC(FP0, FP5, FP10)の場合、DTエリアまたはFLエリアを開始アドレスとして指定してください。

NumberOfBytes (INT)

開始アドレスStartAddressからCRC16計算を行うバイト数(8ビット)

出力

CRC (WORD, INT, UINT)

計算されたチェックサム。フラグIsValidTRUEにセットされたときだけ有効となります。

IsValid (BOOL)

計算したチェックサムの有効・無効を示すフラグ

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ヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 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

LDボディ

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

STボディ

CRC16(StartAddress := Array1, 
        NumberOfBytes := ARRAY1_BYTES, 
        CRC => Array1Crc, 
        IsValid => CrcIsvalid);

最終修正日: 2019-05-21このページに関するフィードバックお問い合わせ窓口