FP_BCD_TO_ASCII

Conversion BCD -> ASCII

Cette instruction FP convertit le code BCD à s1 en code ASCII 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 la zone spécifiée par d_Start. Le code ASCII requiert 8 bits (un octet) pour exprimer un caractère BCD. Après conversion en code ASCII, les données converties sont deux fois plus longues que les données sources.

Paramètres

Entrée

s1 (WORD, DWORD)

Code BCD

s2_Control (WORD)

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

Sortie

d_Start (WORD, INT, UINT)

Adresse de départ de la zone de données dans laquelle le résultat est sauvegardé. La taille est de n_Bits * 2 mots.

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#3016#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39

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 les données spécifiées par s1_Start ne sont pas des données BCD.

  • 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_Start.

  • 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 à 4.

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 les données spécifiées par s1_Start ne sont pas des données BCD.

  • 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_Start.

  • 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 à 4.

ExempleDonnées 16 bits, conversion vers l’avant, 2 octets (caractères)

Offset

Caractères BCD

Offset

Codes ASCII convertis

Equivalent BCD

s1

0

16#1234

Þ

d_Start

0

16#3433

43

s2_Control

16#0002

16#3231

21

ExempleDonnées 16 bits, conversion inverse, 2 octets (caractères)

Offset

Caractères BCD

Offset

Codes ASCII convertis

Equivalent BCD

s1

0

16#1234

Þ

d_Start

0

16#3231

21

s2_Control

16#1002

16#3433

43

ExempleDonnées 32 bits, conversion vers l’avant, 4 octets (caractères)

Offset

Caractères BCD

Offset

Codes ASCII convertis

Equivalent BCD

s1

0

16#5678

Þ

d_Start

0

16#3837

87

1

16#1234

1

16#3635

65

s2_Control

16#0004

16#3433

43

16#3231

21

ExempleDonnées 32 bits, conversion inverse, 4 octets (caractères)

Offset

Caractères BCD

Offset

Codes ASCII convertis

Equivalent BCD

s1

0

16#5678

Þ

d_Start

0

16#3231

21

1

16#1234

1

16#3433

43

s2_Control

16#1004

16#3635

65

16#3837

87

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;
		wInput: WORD:=16#1234;
		awResult: ARRAY [0..2] OF WORD:=[3(0)];
	END_VAR

Corps du POU

La fonction est exécutée lorsque la variable bStart est définie sur TRUE. Deux octets à partir de s1_Start sont convertis en une valeur ASCII dans le sens inverse.

Corps en LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#3231ø^awResult[1]=16#3433ø^awResult[2] is not written,24,1,39,5,);
B(B_CONTACT,,bStart,4,4,6,6,R);
B(B_F,FP_BCD_TO_ASCII!,,12,3,22,8,,?DEN?D@'s1'?Ds2_Control?AENO?Cd_Start);
B(B_VARIN,,wInput,10,5,12,7,);
B(B_VAROUT,,awResult[0],22,5,24,7,);
B(B_VARIN,,16#1002,10,6,12,8,);
L(1,0,1,8);
L(1,5,4,5);
L(6,5,12,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

If (DF(bStart)) Then
    FP_BCD_TO_ASCII(s1 := wInput, s2_Control := 16#1002,
                    d_Start => awResult[0]);
            (* After conversion: 
			awResult[0]=16#3231
			awResult[1]=16#3433
			awResult[2] is not written *)

End_if;

Modifié le : 2023-03-10Feedback on this pagePanasonic hotline