FP_ASCII_CHECK

Contrôle des données ASCII

Cette instruction FP contrôle si les codes ASCII enregistrés dans la zone spécifiée par s2_AsciiData peuvent être correctement convertis selon la méthode de conversion spécifiée par s1_Format.

  • Si les résultats sont corrects, la variable système sys_bIsEqual et la sortie d_IsValid passent à ON.

  • Si les résultats sont incorrects, la variable système sys_bIsEqual et la sortie d_IsValid passent à OFF.

NOTA

Les instructions FP FP_ASCII_TO_BIN et FP_ASCII_CHECK ne font pas de distinction entre lettres majuscules et minuscules.

Paramètres

Entrée

s1_Format (STRING)

Chaîne de caractères de contrôle et format, définie entre virgules inversées

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

Adresse de départ pour la sauvegarde des données ASCII

n_Conversions (WORD, INT, UINT)

Quantité de nombres à convertir : 0–65535

n_AsciiDataStartPosition (INT)

Position de départ dans les données ASCII : 0–255

Sortie

d_IsValid (BOOL)

TRUE, si les données ASCII consistent en nombres binaires pouvant être convertis dans le format souhaité

Explication de chaque digit du code de contrôle s1_Format :

Position dans le code de contrôle

Description

s1_Format

API 16 bits

API 32 bits

Sens de la conversion

     

+

Vers l’avant (uniquement pour les nombres hexadécimaux avec spécificateur x, X)

'+%4X'

Si le signe plus est omis : inverse (par défaut)

'%4X'

%

Spécificateur de chaîne de caractères de format (obligatoire)

 

Format du remplissage

     

0

Compléter avec des zéros

'%06x'

-

+

Ajouter un signe plus

'%+4d'

-

-

Alignement à gauche

'%-6d'

-

˽

(espace) ajouter un espace au lieu du signe plus

'%˽4d'

-

#

Insérer 0x pour les nombres hexadécimaux

'%#4X'

-

Toujours ajouter un point décimal pour les nombres réels

'%#8.0f'

-

8

Largeur des données ASCII

'%08d'

Sans largeur :

  • FP_BIN_TO_ASCII : la largeur minimale requise est utilisée

  • FP_ASCII_TO_BIN et FP_ASCII_CHECK : le séparateur par virgule est requis

'%d,'

-

Précision après le point décimal

     

.5

N’importe quel(s) digit(s) après le point décimal

'%8.5f'

-

I

Doubler la longueur du spécificateur

par ex. le spécificateur i et l = Ii -> DINT

'+%4ld'

Spécificateur de format

     

i

INT

'%10i'

u

UINT

'%10u'

-

d

INT

'%6d'

x

Hexadécimal, caractère minuscule

'+%4x'

X

Hexadécimal, caractère majuscule

'+%4X'

b

BCD

'+%5b'

-

f

Nombre à virgule flottante

'+%-6.2f'

-

e

Exponentiel 1.23e10

'+%9.3e'

-

E

Exponentiel, majuscule, par ex. 1.23E10

'+%9.3E'

-

g

À virgule flottante ou exponentiel

'+%12g'

-

G

À virgule flottante ou exponentiel, caractère majuscule

'+%9.3G'

-

  • Pour FP_BIN_TO_ASCII : tout type de chaîne de caractères peut être ajouté à la conversion par ex.'PANA'

  • Pour FP_ASCII_TO_BIN et FP_ASCII_CHECK : seule la virgule est autorisée

'+%8dPANA'

-

disponible sur les automates 16 bits/32 bits

Exemples de caractère de contrôle s1_Format

  • Exemple : '+%4X' convertit une valeur binaire en une valeur d’une largeur de quatre caractères majuscules, conversion avant (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽12A'

  • Exemple : '%4X' convertit une valeur binaire en une valeur d’une largeur de quatre caractères majuscules, conversion inverse (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽B2A'

  • Exemple : '%06d' convertit une valeur binaire en une valeur d’une largeur de six caractères, valeur décimale avec trois zéros à gauche (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '000100'

  • Exemple : '%+4d' convertit une valeur binaire en une valeur d’une largeur de quatre caractères, valeur décimale, signe + ajouté (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '+100 ˽ ˽'

  • Exemple : '%-6d' convertit une valeur binaire en une valeur d’une largeur de six caractères alignés à gauche (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '100˽ ˽ ˽'

  • Exemple : '%˽4d' convertit une valeur binaire en une valeur d’une largeur de quatre caractères, avec un espace à gauche (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽100'

  • Exemple : '%#8.0f' convertit une valeur binaire en une valeur d’une largeur de huit caractères, nombre à virgule flottante, quatre espaces à gauche (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽ ˽123.'

  • Exemple : '%8.3f' convertit une valeur binaire en une valeur d’une largeur de huit caractères, précision de trois caractères après le point décimal (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽123.456'

  • Exemple : '+%10u' convertit une valeur binaire en une valeur d’une largeur de 10 caractères, avec sept espaces à gauche, nombre entier non signé (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

  • Exemple : '%06d' convertit une valeur binaire en une valeur d’une largeur de six caractères, avec trois espaces à gauche (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽100'

    Intervalle autorisé pour la valeur précédent le spécificateur :

    '˽ ˽ ˽ ˽ ˽100PANA'

    S’il n’y a pas de largeur spécifiée, une virgule est ajoutée, par ex. '%d,' (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '100,'

    • FP_BIN_TO_ASCII : la largeur minimale requise est utilisée

    • FP_ASCII_TO_BIN et FP_ASCII_CHECK : le séparateur par virgule est requis

  • Exemple : '+%4ld' convertit une valeur binaire en une valeur d’une largeur de quatre caractères, DINT ou DWORD sont requis pour le résultat de la conversion (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽100'

  • Exemple : '+%6i' convertit une valeur binaire d’une largeur de six caractères, avec trois espaces à gauche, nombre entier signé, conversion avant (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽-100'

  • Exemple : '+%6d' convertit une valeur binaire en une valeur d’une largeur de six caractères, avec trois espaces à gauche, conversion avant (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '000100'

  • Exemple : '+%4X' convertit une valeur binaire en une valeur d’une largeur de quatre caractères, nombre hexadécimal en caractères majuscules, conversion avant (valide pour les automates 16 bits/32 bits)

    Données ASCII valides pour cet exemple : '˽12A'

  • Exemple : '+%5b' convertit une valeur binaire en une valeur d’une largeur de cinq caractères, données BCD (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽123'

  • Exemple : '+%-6.2f' convertit une valeur binaire en une valeur d’une largeur de six caractères alignés à gauche, précision de deux digits après le point décimal (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '1.23˽'

  • Exemple : '+%9.3e' convertit une valeur binaire en une valeur d’une largeur de neuf caractères, précision de 3 digits après le point décimal, exponentiel en caractère minuscule (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '1.235e+03'

  • Exemple : '1.235E+03' convertit une valeur binaire en une valeur d’une largeur de neuf caractères, précision de 3 digits après le point décimal, exponentiel en majuscule (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '1.235E+03'

  • Exemple : '+%12g' convertit une valeur binaire en une valeur d’une largeur de 12 caractères, nombre à virgule flottante (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽ ˽ ˽1234.57'

  • Exemple : '+%9.3G' convertit une valeur binaire en une valeur d’une largeur de neuf caractères, précision de trois caractères après le point décimal, nombre à virgule flottante, exponentiel en majuscule (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽1.E+03'

  • Pour FP_BIN_TO_ASCII : tout type de chaîne de caractères peut être ajouté à la conversion

    Exemple : '+%8dPANA' convertit une valeur binaire en une valeur d’une largeur de huit caractères, nombre décimal, 'PANA'est ajouté (valide uniquement pour les automates 32 bits)

    Données ASCII valides pour cet exemple : '˽ ˽ ˽ ˽ ˽100PANA'

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 sFormat.

  • Si une conversion avant (+) est indiquée dans sFormat lorsque le format est décimal.

  • Si le nombre de caractères ASCII par unité convertie, indiqué par n_Conversions, 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_Format.

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

  • Si le nombre indiqué par n_Conversions pour les décimales de 16 ou 32 bits qui doivent être converties, 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 sFormat.

  • Si une conversion avant (+) est indiquée dans sFormat lorsque le format est décimal.

  • Si le nombre de caractères ASCII par unité convertie, indiqué par n_Conversions, 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_Format.

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

  • Si le nombre indiqué par n_Conversions pour les décimales de 16 ou 32 bits qui doivent être converties, 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.

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;
		sExample1: STRING[32]:='*1234,5678,';
		bIsAsciiValid: BOOL:=FALSE;
	END_VAR

Corps du POU

Lorsque bStart est défini sur TRUE, l’instruction contrôle si les données connectées à s2_AsciiData peuvent être converties en données décimales lorsque la chaîne de caractères du format est '%d'.

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 := 8 ;
        NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_VAROUT,,bIsAsciiValid,41,2,43,4,);
B(B_F,FP_ASCII_CHECK!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_IsValid);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

If (bStart) then
    FP_ASCII_CHECK(s1_Format := '%d,',
                   s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                   n_Conversions := 2, 
                   n_AsciiDataStartPosition := 1,
                   d_IsValid => bIsAsciiValid);
End_if;

Modifié le : 2024-12-04Commentaires sur cette pageAssistance téléphonique