Codificação BCD

<< Clique para Mostrar o Sumário >>

 

Codificação BCD

A Codificação BCD, Binary-Coded Decimal ou Decimal Codificado em Binário, foi originalmente concebida para contornar limitações quanto ao número máximo de dígitos passíveis de serem representados nos formatos mais tradicionais de armazenamento de valores. Formatos como a representação de números reais em ponto flutuante mostram-se normalmente aceitáveis para cálculos matemáticos e científicos. Porém, erros de aproximação causados pela existência de algarismos que não possam ser representados por problemas de overflow ou underflow podem não ser admissíveis em certas aplicações, como em procedimentos financeiros. Para superar este tipo de limitação, foi desenvolvida a codificação BCD, que permite a representação de números até o último algarismo.

Nessa representação, cada algarismo decimal é representado isoladamente em formato binário, sem limitações no que se refere ao número de algarismos.

A tabela a seguir mostra os algarismos decimais e os valores em binário correspondentes em BCD.

Algarismos decimais em codificação BCD

Decimal

BCD

Decimal

BCD

0

0000b

5

0101b

1

0001b

6

0110b

2

0010b

7

0111b

3

0011b

8

1000b

4

0100b

9

1001b

 

A fim de melhorar a eficiência desta codificação, é comum representar-se dois algarismos por byte. Note que, na tabela anterior, cada dígito decimal requer apenas 4 (quatro) bits, ou meio byte, para a representação.

Tal representação com 2 (dois) dígitos em cada byte é chamada de BCD Comprimido, ou Packed BCD, e é a representação utilizada por este Driver, ou seja, os pacotes enviados por este Driver com valores BCD utilizam 1 (um) byte de dados para cada 2 (dois) algarismos do valor decimal representado. Por isto o campo Size, no caso de tipos de dados BCD, deve ser definido como a metade do número máximo de algarismos representados nos valores a serem lidos ou escritos.

 

Exemplo

Como exemplo, suponha que se pretenda enviar o valor 84 em decimal, 0x54 em formato hexadecimal, usando a codificação BCD comprimido em 1 (um) byte, o formato usado por este Driver.

O primeiro passo é separar os 2 (dois) dígitos decimais que compõem o valor na representação decimal:

Dígito 1: 8 (oito)

Dígito 2: 4 (quatro)

 

Se deseja-se enviar o valor a um equipamento sem a codificação BCD, o valor enviado ao protocolo seria o próprio valor 84, que seria representado em formato hexadecimal pelo valor 0x54, ou ainda 01010100b em formato binário.

Usando o formato BCD comprimido, entretanto, representa-se os 2 (dois) dígitos decimais separadamente em cada metade, ou nibble, do byte a ser enviado:

BCD: 0x84 ou 10000100b

 

Note que, ao se interpretar por engano este valor 0x84 em formato BCD como um valor em formato hexadecimal sem esta codificação, e este valor seja convertido para decimal, obtêm-se o valor 132, sem significado algum.

A tabela a seguir apresenta mais alguns exemplos de valores decimais entre 0 (zero) e 99 e as respectivas representações no formato BCD Comprimido em 1 (um) byte, apresentados nos formatos hexadecimal e binário.

Algarismos decimais em codificação BCD Comprimido

Decimal

Hexadecimal

BCD (Hexadecimal)

BCD (Binário)

10

0x0A

0x10

00010000b

0

0x00

0x00

00000000b

99

0x63

0x99

10011001b

81

0x51

0x81

10000001b

45

0x2D

0x45

01000101b

 

Exemplo de Configuração para o Formato BCD

1) Leitura do valor 11223344 em formato BCD

Note que o inteiro 11223344 possui 8 (oito) algarismos, portanto, na janela de propriedades deste Driver deve-se criar uma nova Operação, definindo o campo Data como tipo BCD e o campo Size com tamanho 4 (quatro), ou seja, os 8 (oito) algarismos do valor BCD devem ser dimensionados para bytes, agrupando os algarismos sempre aos pares, 11 22 33 44, para saber quantos bytes são necessários para representá-lo.

Leitura de um valor com codificação BCD Comprimido

memória do equipamento

valor do tag

Notas

Registro 1 = 0x1122 e Registro 2 = 0x3344

11223344

O valor 11223344 necessita de 4 (quatro) bytes para ser representado em formato BCD, e é necessário ocupar 2 (dois) registros Modbus na memória do equipamento

Esta página foi útil?