F251_ATOB

Conversion code ASCII -> données binaires

Cette fonction convertit le code ASCII sauvegardé dans la zone indiquée par s2_AsciiData en données binaires de 16/32 bits. 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_BinaryData.

Paramètres

Entrée

s1_Control (STRING)

Caractère de contrôle, par ex. D-16

  • D : Convertit des données ASCII décimales
  • H : Convertit des données ASCII hexadécimales
  • + Conversion vers l’avant
  • - Conversion inverse
  • 16 : Convertit les données ASCII en données de 16 bits, -32 768 à +32 767 (16#0 à 16#FFFF)
  • 32 Convertit les données ASCII en données de 32 bits, -2 147 483 648 à +2 147 483 647 (16#0 à 16#FFFFFFFF)
s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

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

n_ConversionMethod (WORD, INT, UINT)

Méthode de conversion, par ex. 16#404

  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_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

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

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.

Explications sur les méthodes de conversion, par ex. n_ConversionMethod = 16#0413 pour les données ASCII '0123456789012'

Pour les données avec virgules, indiquer le nombre maxi. pour les données numériques. Pour les données ASCII décimales, les espaces, les symboles et le point décimal sont inclus. La plage de données est délimitée par la chaîne de caractères de contrôle s1_Control.

  1.  (1) Nombre de caractères ASCII par unité convertie
  2.  (2) Contenu du registre (hex.)
  3.  (3) Chaîne de caractères
  4.  (4) Offset dans les unités des caractères ASCII (8 bits) pour la sauvegarde du résultat.
  5.  (5) Nombre d’unités de 16 bits (1 mot) ou 32 bits (2 mots) qui doivent être converties

Exemples de conversion pour les données ASCII '0123456789ABCDEF'

  • s1_ Control=H+16, n_ConversionMethod=16#404

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

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INT, WORD

    0

    16#2301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#6745

     

    2

    16#AB89

    3

    16#EFCD

  • s1_ Control=H-16, n_ConversionMethod=16#404

    Conversion inverse 4–4 caractères ASCII

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INT, WORD

    0

    6#0123

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#4567

     

    2

    16#89AB

    3

    16#CDEF

  • s1_ Control=H+16, n_ConversionMethod=16#403

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

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INT, WORD

    0

    16#*201

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#*534

     

    2

    16#*867

    3

    16#*B9A

  • s1_ Control=H-16, n_ConversionMethod=16#403

    Conversion inverse 3–4 caractères ASCII

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INT, WORD

    0

    16#*012

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#*345

     

    2

    16#*678

    3

    6#*9AB

  • s1_ Control=H+32, n_ConversionMethod=16#802

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

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINT, DWORD

    0

    16#67452301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#EFCDAB89

  • s1_ Control=H-32, n_ConversionMethod=16#802

    Conversion inverse 8–2 caractères ASCII

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINT, DWORD

    0

    16#01234567

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#89ABCDEF

  • s1_ Control=H+32, n_ConversionMethod=16#502

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

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINT, DWORD

    0

    16#***42301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#***97856

  • s1_ Control=H-32, n_ConversionMethod=16#502

    Conversion inverse 5–2 caractères ASCII

    Données ASCII

    Données binaires

    Type de données

    Offs. en mots de 16 bits

    Nombre hexadécimal

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINT, DWORD

    0

    16#***01234

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#***56789

* Les caractères spéciaux deviennent '0'.

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;
		iArray2: ARRAY [0..1] OF INT:=[2(0)];
			(*Begin ASCII: _1,23,04,-5,6_*)
		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 2 x 4 caractères ASCII décimaux en données binaires. Offset = 0 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,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
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
    F251_ATOB(s1_Control := 'D-16', 
    s2_AsciiData := iAscii1, 
    n_ConversionMethod := 16#214, 
    d_BinaryData => iArray2);
END_IF;

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