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.
Les instructions FP FP_ASCII_TO_BIN et FP_ASCII_CHECK ne font pas de distinction entre lettres majuscules et minuscules.
Entrée
Chaîne de caractères de contrôle et format, définie entre virgules inversées
Adresse de départ pour la sauvegarde des données ASCII
Quantité de nombres à convertir : 0–65535
Position de départ dans les données ASCII : 0–255
Sortie
TRUE, si les données ASCII consistent en nombres binaires pouvant être convertis dans le format souhaité
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 :
|
'%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' |
- |
● |
|
|
'+%8dPANA' |
- |
● |
● disponible sur les automates 16 bits/32 bits
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'
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.
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.
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
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'.
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
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;