FP_ASCII_TO_HEX

Conversion code ASCII -> HEX

Cette instruction FP convertit les codes ASCII HEX hexadécimaux à partir de s_Start en caractères hexadécimaux lorsque le déclencheur EN est TRUE. n_Chars désigne le nombre d’octets devant être convertis.Le résultat est sauvegardé dans d.

Le code ASCII requiert 8 bits (1 octet) pour exprimer un caractère hexadécimal. Après conversion en nombre hexadécimal, les données converties sont deux fois moins longues que les données sources du code ASCII.

Paramètres

Entrée

s_Start (WORD, INT, UINT)

Adresse de départ

n_Chars (INT, DINT, UINT, UDINT)

Nombre d’octets

Sortie

d (WORD, DWORD)

Octets convertis

Remarques

Deux caractères du code ASCII sont convertis en deux digits numériques d’un octet. Dans cette procédure, des caractères de niveau supérieur et de niveau inférieur sont échangés. Quatre caractères sont convertis en un segment de données.

Codes ASCII HEX exprimant des caractères hexadécimaux :

Caractère hexadécimal

Code ASCII HEX

0123456789ABCDEF

16#3016#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39 16#41 16#42 16#43 16#44 16#45 16#46

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 le nombre d’octets désigné par n_Chars est supérieur à la zone spécifiée par s_Start.

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

  • Si n_Chars = 0

  • Si des caractères ASCII autres que 0–F sont spécifiés.

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 le nombre d’octets désigné par n_Chars est supérieur à la zone spécifiée par s_Start.

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

  • Si n_Chars = 0

  • Si des caractères ASCII autres que 0–F sont spécifiés.

Exemple Données 16 bits signées/non signées :

Offset

Codes ASCII

Equivalent hex.

Offset

Caractères hex. convertis

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

3

Exemple Données 32 bits signées/non signées :

Offset

Codes ASCII

Equivalent hex.

Offset

Caractères hex. convertis

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

16#0000

3

2

4

Exemple Données 16 bits signées/non signées :

Offset

Codes ASCII

Equivalent hex.

Offset

Caractères hex. convertis

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0008

4

1

5

Exemple Données 16 bits signées/non signées, nombre de caractères impair :

Si un nombre impair de caractères est converti, 0 est entré pour les positions de bits 0–3 du dernier octet converti.

Offset

Codes ASCII

Equivalent hex.

Offset

Caractères hex. convertis

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7056

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0007

4

1

5

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;
		wConversionResult: WORD:=0;
	END_VAR

Corps du POU

La fonction est exécutée lorsque la variable bStart est définie sur TRUE.

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,,2,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_HEX!,,13,1,23,6,,?DEN?Ds_Start?Dn_Chars?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_HEX(s_Start := wASCIIInput, 
                    n_Chars := 2, 
                    d => wConversionResult);
End_if;

Modifié le : 2021-04-26Feedback on this pagePanasonic hotline