CRC16

Controllo di ridondanza ciclico

Questa funzione calcola il CRC16 (Controllo di Ridondanza Ciclico) per tutti i tipi di PLC utilizzando n byte (8 bit) specificati con il parametro NumberOfBytes e l'indirizzo iniziale StartAddress.

Parametri

Ingresso

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

Indirizzo iniziale per il calcolo del checksum. Per i PLC che non supportano l'istruzione F70_BCC con il calcolo di CRC16 (FP0, FP5, FP10), l'indirizzo iniziale deve essere nell'area DT o FL.

NumberOfBytes (INT)

Il numero di byte (8 bit), ad iniziare da StartAddress, su cui viene eseguito il calcolo di CRC16.

Uscita

CRC (WORD, INT, UINT)

Il checksum calcolato, valido unicamente se il flag IsValid è impostato su TRUE.

IsValid (BOOL)

Flag indicante se il checksum calcolato è valido o meno.

Per i PLC che non supportano l'istruzione F70_BCC con il calcolo di CRC16 (FP0, FP5, FP10), il CRC non è valido:

  • durante le prime otto scansioni di esecuzione quando viene compilata una tabella interna

  • se l'area indirizzi della variabile StartAddress non si trova nell'area DT o FL.

Per i PLC che supportano l'istruzione F70_BCC con il calcolo di CRC16, il CRC è sempre valido.

Note

Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente: FP_CRC Controllo di ridondanza ciclico

A seconda del tipo di PLC, verrà utilizzata una delle due seguenti implementazioni della funzione:

  • I PLC che supportano l'istruzione F70_BCC con il parametro s1=10 per il calcolo di CRC16 (FP-e, FP-Sigma, FP2, FP2SH, FP10SH) utilizzano F70_BCC direttamente.

  • Per gli altri PLC (FP0, FP0R, FP3, FP5, FP10) viene richiamato un sottoprogramma che esegue un calcolo di CRC16 esplicito. Per tale sottoprogramma valgono le seguenti restrizioni:

    • Durante le prime otto scansioni di esecuzione viene compilata una tabella interna. Durante questo tempo il checksum non viene calcolato e l'uscita IsValid rimane FALSE. In seguito, il checksum viene calcolato e l'uscita IsValid viene impostata su TRUE.

    • StartAddress richiede un indirizzo nell'area DT o FL.

NOTA
  • Il numero di passi può aumentare fino a circa 200 se CRC16 è utilizzato come sottoprogramma.

  • Durante la programmazione, tenete presente che la compilazione della tabella interna e il calcolo del checksum richiedono un certo tempo, specialmente nel caso di grossi volumi di dati.

Esempio

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	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

Corpo 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

Corpo ST

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

L'ultima revisione: 2021-06-09Feedback su questa paginaPanasonic hotline