FP_ASCII_TO_BCD

Convertir ASCII -> BCD

Estas instrucciones FP convierten los códigos ASCII hexadecimales de s1_Start a caracteres BCD si la entrada de trigger EN es TRUE. s2_Control especifica el número de bytes a convertir y la dirección de conversión.

El resultado se guarda en d.

Parámetros

Entrada

s1_Start (WORD, INT, UINT)

Dirección de inicio

s2_Control (WORD)

Número de bytes y dirección de conversión

Salida

d (WORD, DWORD)

Bytes convertidos

Observaciones

  • Especificación del código de control s2_Control

    1.  (1) tamaño de datos a convertir:

      16 bits: 1–2 bytes a convertir

      32 bits: 1–4 bytes a convertir

    2.  (2) siempre 0
    3.  (3) dirección de conversión:

      0: directo

      1: inverso

  • Cuando se almacenan, se intercambian los dos caracteres que forman un byte. Los dos bytes se convierten como un solo segmento de datos.

    • Dirección directa:

    • Dirección inversa:

  • Códigos ASCII HEX para representar caracteres BCD:

    Carácter BCD

    Código ASCII HEX

    0123456789

    16#30 16#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39

EjemploDatos de 16 bits con signo/sin signo, dirección directa, 4 caracteres

Offset

Códigos ASCII

Equivalente BCD

Offset

Caracteres BCD convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

s2_Control

16#0004

EjemploDatos de 16 bits, dirección inversa, 4 caracteres

Offset

Códigos ASCII

Equivalente BCD

Offset

Caracteres BCD convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#1234

1

16#3433

43

1

s2_Control

16#1004

EjemploDatos de 32 bits, dirección directa, 8 caracteres

Offset

Códigos ASCII

Equivalente BCD

Offset

Caracteres BCD convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#0008

EjemploDatos de 32 bits, dirección inversa, 8 caracteres

Offset

Códigos ASCII

Equivalente BCD

Offset

Caracteres BCD convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#5678

1

16#3433

43

1

16#1234

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1008

EjemploDatos de 32 bits, dirección inversa, 7 caracteres

Si el número de caracteres a convertir es impar, se introducen ceros en las posiciones de bit 0–3 del último byte convertido si la dirección de conversión es "directa". Si la dirección de conversión es "inversa", se introducirán ceros para las posiciones de bit 4–7:

Offset

Códigos ASCII

Equivalente BCD

Offset

Caracteres BCD convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#4567

1

16#3433

43

1

16#0123

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1007

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el área especificada utilizando el modificador índice supera el límite.

  • si se especifican caracteres ASCII diferentes a 16#30–16#39

  • si el número de bytes especificado por s2_Control es superior al área especificada por s1_Start

  • si el resultado de la conversión es superior al área de datos especificada por d

  • si s2_Control = 0

  • si la dirección de conversión está fuera de rango

  • si el número de bytes especificado en s2_Control es superior a 8

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el área especificada utilizando el modificador índice supera el límite.

  • si se especifican caracteres ASCII diferentes a 16#30–16#39

  • si el número de bytes especificado por s2_Control es superior al área especificada por s1_Start

  • si el resultado de la conversión es superior al área de datos especificada por d

  • si s2_Control = 0

  • si la dirección de conversión está fuera de rango

  • si el número de bytes especificado en s2_Control es superior a 8

Ejemplo

Cabecera de la POU

Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wASCIIInput: WORD:=16#3031;
		wControlCode: WORD:=16#2;
			(*specifies the operation:
digit 0: the number of bytes
to convert
digit 1,2: has to be zero
digit 3: nomal or reverse direction*)
		wConversionResult: WORD:=0;
			(*result after a 0->1 leading
edge from start:
[16#2033,0]*)
	END_VAR

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función. Se convierten dos caracteres del valor de entrada ASCII en dirección directa

Cuerpo 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,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,wControlCode,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_BCD!,,13,1,23,6,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

if bStart then
    FP_ASCII_TO_BCD(s1_Start := wASCIIInput, 
                    s2_Control := wControlCode, 
                    d => wConversionResult);
END_IF;

Modificado el: 2021-07-14Comentarios sobre esta páginaPanasonic hotline