F70_BCC

Calcolo del codice di controllo (BCC)

Calcola il codice di controllo (BCC), utilizzato per rilevare gli errori nella trasmissione dei messaggi, di s3_Number byte di dati ASCII a partire dall'area a 16 bit specificata da s2_Start in base al metodo di calcolo specificato da s1_Control. Il codice di controllo (BCC) viene memorizzato nel byte basso dell'area a 16 bit specificata da d. (Il BCC è un byte. Il byte alto di d non cambia.)

Parametri

Ingresso

s1_Control (INT)

Specifica il metodo di calcolo del BCC:

  • 0: Addizione (SYS_BCC_CALCULATION_METHOD_ADD)

  • 1: Sottrazione (SYS_BCC_CALCULATION_METHOD_SUB)

  • 2: Esclusivo OR (SYS_BCC_CALCULATION_METHOD_XOR)

  • 16#A: CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)

s2_Start (WORD, INT, UINT)

Area a 16 bit iniziale per il calcolo del BCC

s3_Number (INT)

Specifica il numero di byte per il calcolo del BCC

Uscita

d (WORD, INT, UINT)

area a 16 bit per la memorizzazione del BCC

Note

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

Specificazione del codice di controllo s1_Control

  1.  (1) Metodo di calcolo

    0: Addizione (SYS_BCC_CALCULATION_METHOD_ADD)

    1: Sottrazione (SYS_BCC_CALCULATION_METHOD_SUB)

    2: Esclusivo OR (SYS_BCC_CALCULATION_METHOD_XOR)

    16#A: CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)

  2.  (2) Posizione del byte iniziale per il calcolo (N. di byte da s2)

    0–F

  3.  (3) Posizione del byte iniziale per la memorizzazione dei risultati (N. di byte da d)
  4.  (4) Dato di conversione
    • 0: Dato binario (CRC: 2 byte / Non CRC: 1 byte)
    • 1: dato ASCII (2 byte)
NOTA

Se CRC-16 è specificato come metodo di calcolo, non è possibile specificare il codice ASCII per i dati di conversione.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)

se il numero dei byte specificati per i dati target eccede il limite dell'area dati specificata.

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)

se il numero dei byte specificati per i dati target eccede il limite dell'area dati specificata.

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
		Start: BOOL:=FALSE;
			(*activates the function*)
		BCC_Calc_Method: INT:=2;
		ASCII_String: STRING[32]:='%01#RCSX0000';
			(*specifies the operation:
0: addition
1: subtraction
2:XOR*)
		BCC: WORD:=0;
			(*result after a 0->1 leading
edge from start: 10#172*)
	END_VAR

Corpo LD

Un codice di controllo (BCC) viene eseguito su ASCII_String quando Start passa a TRUE. Il metodo di calcolo è esclusivo OR. (Utilizzare questo metodo nel caso in cui debbano essere trasmesse grandi quantità di dati).

Modalità di calcolo del BCC con l'operazione esclusiva OR:

bvar_1

bvar_2

bvar_3

0

0

0

0

1

1

1

0

1

1

1

0

  1.  (1) Codice ASCII HEX
  2.  (2) Codice ASCII BIN
  3.  (3) Operazione esclusiva OR
  4.  (4) calcolo
  5.  (5) Codice di controllo (BCC)
  6.  (6) Risultato di calcolo (16#1D) memorizzato in d.

I bit del codice ASCII BIN dei primi due caratteri vengono confrontati tra loro per restituire un risultato dell'operazione esclusiva OR di 8 caratteri:

Segno per il confronto

Codice ASCII BIN

%

00100101

0

00110000

Risultato esclusivo OR

00010101

Questo risultato viene quindi confrontato con il codice ASCII BIN del carattere successivo, ossia "1".

Segno per il confronto

Codice ASCII BIN

Risultato esclusivo OR

00010101

1

00110001

OR esclusivo successivo

00100100

E così via fino a raggiungere il carattere finale.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 11 ;
        NETWORK_BODY
B(B_F,F70_BCC!,Instance,26,1,34,7,,?DEN?Ds1_Control?Ds2_Start?Ds3_Number?AENO?Cd);
B(B_CONTACT,,Start,3,2,5,4,);
B(B_VARIN,,BCC_Calc_Method,24,3,26,5,);
B(B_F,Adr_Of_VarOffs_I!,Instance,16,5,25,9,,?D@'Var'?DOffs?CAdr);
B(B_VAROUT,,BCC,34,3,36,5,);
B(B_VARIN,,ASCII_String,11,4,13,6,);
B(B_VARIN,,2,14,7,16,9,);
B(B_F,LEN!,Instance,16,8,21,11,,?DIN?C);
L(16,5,16,7);
L(13,5,16,5);
L(13,5,13,10);
L(13,10,16,10);
L(25,5,25,7);
L(25,5,26,5);
L(26,6,26,10);
L(21,10,26,10);
L(5,3,26,3);
L(1,3,3,3);
L(1,0,1,11);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF start then
    F70_BCC( s1_Control:= BCC_Calc_Methode,
         s2_Start:= Adr_Of_VarOffs( Var:= ASCII_String,
         Offs:= 2),
         s3_Number:= LEN( ASCII_String),
         d=> BCC);
END_IF;

L'ultima revisione: 2022-04-19Feedback su questa paginaPanasonic hotline