FP_ENCODE

Codifica stato bit -> esadecimale

Questa funzione ritorna l'esponente in base 2 del bit con il peso maggiore della variabile in ingresso a s1_Start, secondo le impostazioni definite in s2_Control. Il risultato della codifica viene memorizzato nell'area di destinazione a 16 bit specificata da d_Start a partire dalla posizione bit specificata. I bit non validi nell'area specificata per il risultato della codifica vengono compilati con zeri.

FP_ENCODE è l'istruzione inversa diFP_DECODE.

Parametri

Ingresso

s1_Start (WORD)

Area a 16 bit iniziale da codificare (source)

s2_Control (WORD)

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

Uscita

d_Start (WORD)

area a 16 bit per memorizzare il dato codificato (destinazione)

Note

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

  • Esempio con s2_Control=16#0005

    16#

    0

    0

    0

    5

     

    Numero di bit da codificare: 25=32 bit

    Posizione bit iniziale dei dati da codificare: posizione bit 0

    1.  (1) Origine
    2.  (2) Posizione bit
    3.  (3) 32 bit come specificati da 16#0005
    4.  (4) L'ottavo bit dei dati a 32 bit è TRUE.
    5.  (5) Destinazione

      Il risultato della codifica 8 (decimale) viene memorizzato in d_Start quando il trigger EN è TRUE.

    6.  (6) Posizione bit iniziale
    7.  (7) Le posizioni bit da 8 a 15 vengono riempite con zeri.
    8.  (8) Risultato della codifica: 8

    Descrizione del processo

    Il contenuto del segmento bit 2^nL all'inizio dell'area specificata da s1_Start viene codificato (dove nL + il numero di bit da codificare).

    Il risultato della codifica viene memorizzato come dati decimali negli otto bit che iniziano dal bit specificato come bit nH (laddove 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 iniziale dei bit dei dati di destinazione e il numero di bit da codificare 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 dei dati di destinazione codificati

     

    Impostazione

    16#0–16#8

    (4)

    Numero di bit codificati

    16#0

    0

     

    16#1

    2

    16#1

    1

    16#2

    4

    16#2

    2

    16#3

    8 (1 byte)

    16#3

    3

    16#4

    16 (1 word)

    16#4

    4

    16#5

    32 (2 word)

    16#5

    5

    16#6

    64 (4 word)

    16#6

    6

    16#7

    128 (8 word)

    16#7

    7

    16#8

    256 (16 word)

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

    Esempio di codifica

    Codificando i dati a 16 bit (nL=4), i risultato della codifica vengono mostrati nel seguente modo.

    Dati da codificare (4 bit)

    Risultato della codifica

    Equivalente

    Dec.

    0000 0000 0000 0001

    16#0000

    0

    0000 0000 0000 0010

    16#0001

    1

    0000 0000 0000 0100

    16#0010

    2

    0000 0000 0000 1000

    16#0011

    3

    0000 0000 0001 0000

    16#0100

    4

    0000 0000 0010 0000

    16#0101

    5

    0000 0000 0100 0000

    16#0110

    6

    0000 0000 1000 0000

    16#0111

    7

    0000 0001 0000 0000

    16#1000

    8

    0000 0010 0000 0000

    16#1001

    9

    0000 0100 0000 0000

    16#1010

    10

    0000 1000 0000 0000

    16#1011

    11

    0001 0000 0000 0000

    16#1100

    12

    0010 0000 0000 0000

    16#1101

    13

    0100 0000 0000 0000

    16#1110

    14

    1000 0000 0000 0000

    16#1111

    15

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 il dato da codificare è tutto zero.

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 il dato da codificare è tutto zero.

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#0000000001000000;
		wControlCode: WORD:=16#0003;
			(*specifies the encodation*)
		wOutput_value: WORD:=0;
			(*result after a 0->1 leading
edge from start:
2#0000000000000110*)
	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 := 5 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,6,1,8,3,);
B(B_VARIN,,wInput_value,10,2,12,4,);
B(B_VARIN,,wControlCode,10,3,12,5,);
B(B_VAROUT,,wOutput_value,20,2,22,4,);
B(B_F,FP_ENCODE!,,12,0,20,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(1,2,6,2);
L(8,2,12,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF bStart then
    FP_ENCODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wOutput_value);
END_IF;

L'ultima revisione: 2024-03-14Feedback su questa paginaPanasonic hotline