FP_ASCII_TO_BCD

Conversion code ASCII -> BCD

Cette instruction FP convertit les codes ASCII hexadécimaux à partir de s1_Start en caractères BCD lorsque le déclencheur EN est TRUE. s2_Control désigne le nombre d’octets devant être convertis et le sens de la conversion.

Le résultat est sauvegardé dans d.

Paramètres

Entrée

s1_Start (WORD, INT, UINT)

Adresse de départ

s2_Control (WORD)

Nombre d’octets devant être convertis et sens de la conversion

Sortie

d (WORD, DWORD)

Octets convertis

Remarques

  • Paramétrer le code de contrôles2_Control

    1.  (1) Taille des données à convertir :

      16 bits : 1–2 octets à convertir

      32 bits : 1–4 octets à convertir

    2.  (2) Toujours 0
    3.  (3) Sens de la conversion :

      0 : avant

      1 : inverse

  • Les deux caractères qui forment un octet sont interchangés lorsqu’ils sont sauvegardés. Deux octets sont convertis en un segment de données.

    • Conversion avant :

    • Conversion inverse :

  • Codes ASCII HEX exprimant des caractères BCD :

    Caractère BCD

    Code ASCII HEX

    0123456789

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

Exemple Données 16 bits signées/non signées, conversion vers l’avant, 4 caractères

Offset

Codes ASCII

Equivalent BCD

Offset

Caractères BCD convertis

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

s2_Control

16#0004

Exemple Données 16 bits, conversion inverse, 4 caractères

Offset

Codes ASCII

Equivalent BCD

Offset

Caractères BCD convertis

s1_Start

0

16#3231

21

Þ

d

0

16#1234

1

16#3433

43

1

s2_Control

16#1004

Exemple Données 32 bits, conversion vers l’avant, 8 caractères

Offset

Codes ASCII

Equivalent BCD

Offset

Caractères BCD convertis

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

Exemple Données 32 bits, conversion inverse, 8 caractères

Offset

Codes ASCII

Equivalent BCD

Offset

Caractères BCD convertis

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

Exemple Données 32 bits, conversion inverse, 7 caractères

Si un nombre impair de caractères est converti, 0 est entré pour les positions de bits 0–3 du dernier octet converti lorsque le sens de la conversion est "vers l’avant". Si le sens de la conversion est "inverse", 0 est entré pour les positions de bits 4–7 :

Offset

Codes ASCII

Equivalent BCD

Offset

Caractères BCD convertis

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

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si des caractères ASCII autres que 16#30–16#39 sont spécifiés.

  • Si le nombre d’octets désigné par s2_Control est supérieur à la zone spécifiée par s1_Start.

  • Si le résultat de la conversion est supérieur à la zone de données spécifiée par d

  • Si s2_Control = 0

  • Si le sens de la conversion est en dehors de l’intervalle autorisé

  • Si le nombre d’octets désigné par s2_Control est supérieur à 8.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si des caractères ASCII autres que 16#30–16#39 sont spécifiés.

  • Si le nombre d’octets désigné par s2_Control est supérieur à la zone spécifiée par s1_Start.

  • Si le résultat de la conversion est supérieur à la zone de données spécifiée par d

  • Si s2_Control = 0

  • Si le sens de la conversion est en dehors de l’intervalle autorisé

  • Si le nombre d’octets désigné par s2_Control est supérieur à 8.

Exemple

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.

	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

Corps du POU

La fonction est exécutée lorsque la variable bStart est définie sur TRUE. Deux caractères de la valeur d’entrée ASCII sont convertis vers l’avant.

Corps en 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

Corps en ST

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

Modifié le : 2021-08-09Feedback on this pagePanasonic hotline