F250_BTOA

Conversion données binaires -> code ASCII

Cette fonction convertit les données binaires de 16/32 bits sauvegardées dans la zone indiquée par s2_BinaryData en code ASCIII. La méthode de conversion est spécifiée par n_ConversionMethod en fonction des quatre caractères de contrôle de s1_Control. Le résultat de la conversion est sauvegardé dans la zone spécifiée par d_AsciiData.

Paramètres

Entrée

s1_Control (STRING)

Caractère de contrôle

  1.  (1) D : Convertit en données ASCII décimales

    H : Convertit en données ASCII hexadécimales

  2.  (2) + Conversion vers l’avant

    - Conversion inverse

  3.  (3) 16 : Convertit en unités de 16 bits (1 mot)

    32 : Convertit en unités de 32 bits (2 mots)

s2_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Zone de départ de sauvegarde des données binaires

n_ConversionMethod (WORD, INT, UINT)

Méthode de conversion

  1.  (1) Nombre de caractères ASCII par unité convertie
  2.  (2) Offset dans les unités des caractères ASCII (8 bits).
  3.  (3) Nombre d’unités de 16 bits (1 mot) ou 32 bits (2 mots) converties

(pour en savoir plus, voir les explications dans les tableaux suivants)

Sortie

d_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Zone de départ de sauvegarde des données ASCII

Remarques

Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_BIN_TO_ASCII

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si une erreur apparaît dans le caractère de contrôle désigné par s1_Control.

  • Si le sens normal (+) est indiqué dans s1_Control lorsque le format est décimal.

  • Si le nombre de caractères ASCII par unité convertie, indiqué par n_ConversionMethod, est supérieur à 4 pour des données de 16 bits ou 8 pour des données de 32 bits, lorsque le format hexadécimal est indiqué par s1_Control.

  • Si 0 est le nombre indiqué dans n_ConversionMethod pour les unités de 16 ou 32 bits (1 ou 2 mots) qui doivent être converties.

  • Si le nombre de décimales de 16 ou 32 bits qui doivent être converties, indiqué par n_ConversionMethod est supérieur à la zone de sauvegarde des données ASCII.

  • Si le résultat de la conversion est supérieur à la zone de sauvegarde.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si une erreur apparaît dans le caractère de contrôle désigné par s1_Control.

  • Si le sens normal (+) est indiqué dans s1_Control lorsque le format est décimal.

  • Si le nombre de caractères ASCII par unité convertie, indiqué par n_ConversionMethod, est supérieur à 4 pour des données de 16 bits ou 8 pour des données de 32 bits, lorsque le format hexadécimal est indiqué par s1_Control.

  • Si 0 est le nombre indiqué dans n_ConversionMethod pour les unités de 16 ou 32 bits (1 ou 2 mots) qui doivent être converties.

  • Si le nombre de décimales de 16 ou 32 bits qui doivent être converties, indiqué par n_ConversionMethod est supérieur à la zone de sauvegarde des données ASCII.

  • Si le résultat de la conversion est supérieur à la zone de sauvegarde.

Explication sur les méthodes de conversion, par ex. n_ConversionMethod = 16#0214

  1.  (1) Nombre de caractères ASCII par unité convertie (voir nota pour les restrictions)
  2.  (2) Contenu du registre (hex.)
  3.  (3) Chaîne de caractères (voir nota)
  4.  (4) Offset dans les unités des caractères ASCII (8 bits) pour la sauvegarde du résultat.

    (Les valeurs 'X' ne changent pas.)

  5.  (5) Nombre d’unités de 16 bits (1 mot) ou 32 bits (2 mots) qui doivent être converties
  6.  (6) Contenu du registre (hex.)
  7.  (7) Valeurs (déc.)
NOTA

Concernant le nombre de caractères ASCII (8 bits) par unité convertie

  • Conversion d’unités binaires de 16 bits en données ASCII hexadécimales :

    Intervalle : 16#1–16#4

  • Conversion d’unités binaires de 32 bits en données ASCII hexadécimales :

    Intervalle : 16#1–16#8

  • Conversion des données binaires en données ASCII décimales :

    Intervalle : 16#1–16#F

Exemples de conversion :

  • s1_ Control=16+H, n_Conversion Method=16#204

    Conversion vers l’avant 2–4 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    INT, WORD

    0

    16#5678

    '78'

    '56'

    '34'

    '12'

    1

    16#1234

  • s1_ Control=16-H, n_Conversion Method=16#204

    Conversion inverse 2–4 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    INT, WORD

    0

    16#5678

    '78'

    '56'

    '12'

    '34'

    1

    16#1234

  • s1_ Control=16+H, n_Conversion Method=16#203

    Conversion vers l’avant 2–3 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    INT, WORD

    0

    16#0456

    '56'

    '42'

    '31'

    '$xx$xx'

    1

    16#0123

  • s1_ Control=16-H, n_Conversion Method=16#203

    Conversion inverse 2–3 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    INT, WORD

    0

    16#0456

    '45'

    '61'

    '23'

    '$xx$xx'

    1

    16#0123

  • s1_ Control=32+H, n_Conversion Method=16#108

    Conversion vers l’avant 1–8 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    DINT, DWORD

    0

    16#12345678

    '78'

    '56'

    '34'

    '12'

  • s1_ Control=32-H, n_Conversion Method=16#108

    Conversion inverse 1–8 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    DINT, DWORD

    0

    16#12345678

    '12'

    '34'

    '56'

    '78'

  • s1_ Control=32+H, n_Conversion Method=16#105

    Conversion vers l’avant 1–5 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    DINT, DWORD

    0

    16#00012345

    '45'

    '23'

    '1$xx'

    '$xx$xx'

  • s1_ Control=32-H, n_Conversion Method=16#105

    Conversion inverse 1–5 caractères ASCII

    Données binaires

    Résultat de la conversion en données ASCII

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    DINT, DWORD

    0

    16#00012345

    '12'

    '34'

    '5$xx'

    '$xx$xx'

Les valeurs 'X' ne changent pas.

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
		bExecute: BOOL:=FALSE;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

Corps du POU

Lorsque bExecute est sur TRUE, l’instruction est exécutée. Elle convertit deux unités de 16 bits en 2 x 4 données ASCII décimales. Offset = 1 caractère ASCII (8 bits).

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 := 9 ;
        NETWORK_BODY
B(B_F,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

IF DF(bExecute) then
    F250_BTOA(s1_Control := '16-D', 
        s2_BinaryData := iArray1, 
        n_ConversionMethod := 16#214, 
        d_AsciiData => iAscii1);
END_IF;

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