FP_DECODE

Decodifica esadecimale -> stato bit

Questa istruzione FP decodifica i contenuti dei dati specificati da s1_Start secondo i contenuti di s2_Control se il trigger EN è impostato su TRUE. Il risultato decodificato è memorizzato nell'area a partire da d_Start.

FP_DECODE è l'istruzione inversa diFP_ENCODE.

Parametri

Ingresso

s1_Start (WORD)

Area source o costante equivalente da decodificare

s2_Control (WORD)

Dati di controllo per specificare la posizione bit iniziale e il numero di bit da decodificare

Uscita

d_Start (WORD)

Indirizzo iniziale per memorizzare i dati decodificati (destinazione)

Note

  • Le variabili s1_Start, s2_Control e d_Start devono presentare lo stesso tipo di dato.

  • Esempios2_Control=16#404

    1.  (1) Origine
    2.  (2) Posizione bit
    3.  (3) Posizione bit 4
    4.  (4) 4 bit (bit 4–7, binario: 2#0111 o decimale: 7) di s1_Start vengono decodificati quando il trigger è TRUE
    5.  (5) Destinazione

      I dati decodificati TRUE vengono salvati nella posizione di bit 7 di d_Start.

      Tutti i bit, ad eccezione del bit 7, sono compilati con zeri.

    Il contenuto del segmento bit 2^nL del bit nH dell'area specificata da s1_Start viene decodificato (dove nL è il numero dei bit da decodificare).

    I dati decodificati vengono memorizzati nei segmenti bit 2^nL che iniziano dall'area specificata da d_Start (in cui nH è il bit di conversione iniziale). I bit non validi nell'area specificata per il risultato vengono compilati con zeri.

  • Descrizione di s2_Control

    s2_Control specifica la posizione bit iniziale e il numero di bit da decodificare utilizzando dati esadecimali.

    1.  (1) Dati a 16 bit
    2.  (2) Numero di bit 0–15

    I bit contrassegnati con "-" non sono validi.

     

    Impostazione

    16#0–16#F

    (3)

    Posizione bit iniziale da decodificare

     

    Impostazione

    16#0–16#8

    (4)

    Numero di bit decodificati

    16#0

    0

     

    16#0

    0

    16#1

    1

    16#1

    1

    16#2

    2

    16#2

    2

    16#3

    3

    16#3

    3

    16#4

    4

    16#4

    4

    16#5

    5

    16#5

    5

    16#6

    6

    16#6

    6

    16#7

    7

    16#7

    7

    16#8

    8

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

  • Relazione tra il numero di bit e l'area dati occupata dal risultato della decodifica

    Numero di bit da decodificare

    Area dati richiesta per il risultato

    Numero di bit decodificati (risultato)

    1

    1 word

    2 bit 1)

    2

    1 word

    4 bit 1)

    3

    1 word

    8 bit 1)

    4

    1 word

    16 bit

    5

    2 word

    32 bit

    6

    4 word

    64 bit

    7

    8 word

    128 bit

    8

    16 word

    256 bit

    1) I bit non validi nell'area dati richiesta per il risultato vengono compilati con zeri.

  • Esempio di dati decodificati

    Quando si decodificano dati a 4 bit, i dati a 16 bit per il risultato decodificato sono mostrati di seguito.

    • Condizione di decodificas2_Control

    • Posizione bit iniziale 0: 16#0

    • Numero di bit da decodificare: 16#4 (4 bit)

    Dati da decodificare (4 bit)

    Risultato decodificato

    Equivalente

    Dec.

    16#0000

    0

    0000 0000 0000 0001

    16#0001

    1

    0000 0000 0000 0010

    16#0010

    2

    0000 0000 0000 0100

    16#0011

    3

    0000 0000 0000 1000

    16#0100

    4

    0000 0000 0001 0000

    16#0101

    5

    0000 0000 0010 0000

    16#0110

    6

    0000 0000 0100 0000

    16#0111

    7

    0000 0000 1000 0000

    16#1000

    8

    0000 0001 0000 0000

    16#1001

    9

    0000 0010 0000 0000

    16#1010

    10

    0000 0100 0000 0000

    16#1011

    11

    0000 1000 0000 0000

    16#1100

    12

    0001 0000 0000 0000

    16#1101

    13

    0010 0000 0000 0000

    16#1110

    14

    0100 0000 0000 0000

    16#1111

    15

    1000 0000 0000 0000

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se 1 £ nL £ 8, in cui nL è il numero dei bit da codificare/decodificare.

  • se 1 £ nH + nL £ 16, in cui nH è il bit di avvio conversione e nL è il numero di bit da codificare/decodificare.

  • se l'area di memoria utilizzata dal risultato decodificato supera il limite.

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se 1 £ nL £ 8, in cui nL è il numero dei bit da codificare/decodificare.

  • se 1 £ nH + nL £ 16, in cui nH è il bit di avvio conversione e nL è il numero di bit da codificare/decodificare.

  • se l'area di memoria utilizzata dal risultato decodificato supera il limite.

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
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wInput_value: WORD:=2#1100011000011110;
		wControlCode: WORD:=16#0003;
			(*specifies decoding*)
		wConversionResult: WORD:=0;
			(*result after a 0->1 leading
edge from start:
2#0000000001000000*)
	END_VAR

Corpo del POU

Quando la variabile bStart è impostata su TRUE, la funzione viene eseguita.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,8,1,10,3,);
B(B_VARIN,,wInput_value,11,2,13,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VAROUT,,wConversionResult,21,2,23,4,);
B(B_F,FP_DECODE!,,13,0,21,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(10,2,13,2);
L(1,2,8,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF start then
    FP_DECODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wConversionResult);
END_IF;

L'ultima revisione: 2024-10-18Feedback su questa paginaPanasonic hotline