FP_HEX_TO_ASCII

Conversion données HEX -> code ASCII

Cette instruction FP convertit les données hexadécimales à s_Start en code ASCII lorsque le déclencheur EN est TRUE. Le nombre d’octets devant être convertis est désigné par n_Bytes. 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 hexadécimal. En raison de la conversion en code ASCII, les données converties seront deux fois plus longues que les données sources.

Paramètres

Entrée

s_Start (WORD, DWORD)

Données hexadécimales

n_Bytes (INT, DINT, UINT, UDINT)

Nombre d’octets

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

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.

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_Bytes est supérieur à la zone spécifiée par s_Start.

  • Si le résultat calculé est supérieur à la zone désignée par d_Start.

  • Si n_Bytes= 0 ou une valeur négative

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_Bytes est supérieur à la zone spécifiée par s_Start.

  • Si le résultat calculé est supérieur à la zone désignée par d_Start.

  • Si n_Bytes= 0 ou une valeur négative

ExempleDonnées 16 bits

Offset

Caractères hex.

Offset

Codes ASCII convertis

Équivalent STRING

s_Start

0

16#ABCD

Þ

d_Start

0

16#4443

DC

n_Bytes

16#0002

16#4241

BA

ExempleDonnées 32 bits

Offset

Caractères hex.

Offset

Codes ASCII convertis

Équivalent STRING

s_Start

0

16#1234

Þ

d_Start

0

16#3433

43

1

16#5678

1

16#3231

21

n_Bytes

16#0004

16#3837

87

16#3635

65

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;
		awInput: ARRAY [0..2] OF WORD:=[16#ABCD,2(0)];
		awResult: ARRAY [0..5] OF WORD:=[6(16#FFFF)];
	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 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#4443ø^awResult[1]=16#4241ø^awResult[2]=16#3030ø^awResult[3]=16#3030ø^awResult[4] is not written,23,0,38,6,);
B(B_CONTACT,,bStart,4,5,6,7,R);
B(B_F,FP_HEX_TO_ASCII!,,12,4,22,9,,?DEN?D@'s'?Dn_Chars?AENO?Cd_Start);
B(B_VARIN,,awInput[0],10,6,12,8,);
B(B_VAROUT,,awResult[0],22,6,24,8,);
B(B_VARIN,,4,10,7,12,9,);
L(1,0,1,9);
L(1,6,4,6);
L(6,6,12,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

if (DF(bStart)) then
	FP_HEX_TO_ASCII(s_Start := awInput[0], n_Bytes := 4, d_Start => awResult[0]);
	(* After conversion: 
		awResult[0]=16#4443
		awResult[1]=16#4241
		awResult[2]=16#3030
		awResult[3]=16#3030
		awResult[4] is not written *)
end_if;

Modifié le : 2024-11-21Commentaires sur cette pageAssistance téléphonique