FP_FORMAT_STRING

Écrire des données formatées dans une chaîne de caractères

Cette instruction écrit les données formatées spécifiées par Data1 (extensible à Data16) vers une chaîne de caractères formatée pour laquelle le format est spécifié par le caractère de contrôle sFormat.

Entrée

sFormat (STRING)

Caractère de contrôle avec spécificateurs de format définissant comment la chaîne de caractères formatée doit être créée

  • Variable chaîne de caractères ou constante de caractères (jusqu’à 256 caractères) spécifiant comment la chaîne de caractères doit être créée.

  • Le caractère de contrôle comprend le texte, le spécificateur de format (%d,%e, etc.), le code du saut de ligne (\n) et le code du tabulateur (\t).

  • La chaîne de caractères peut contenir jusqu’à 4096 caractères. Au-delà de 4096 caractères, une erreur d’opération apparaît.

  • Un maximum de 16 digits peut être spécifié pour le spécificateur de format. Au-delà de 16 digits, une erreur d’opération apparaît.

  • Le nombre maximum de caractères après conversion d’1 donnée est 32, sauf %s et %S. Au-delà de 32 caractères, une erreur d’opération apparaît.

  • Toutes les chaînes de caractères qui ne sont pas identifiées comme étant un spécificateur de format sont traitées comme du texte à formater.

Data1 (INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL, STRING)

Données qui doivent être formatées

  • Données variables à écrire dans la chaîne de caractères formatée.

  • Données variables disposées dans l’ordre spécifié dans le caractère de contrôle.

Sortie

Résultat (STRING)

Chaîne de caractères formatée avec données au format ASCII.

Remarques

  • L’entrée Data1 peut être étendue jusqu’à un maximum de 16 entrées.

  • Le nombre d’entrées Data1..DataN doit être identique au nombre de spécificateurs de format dans la chaîne de caractères de contrôle spécifiée dans sFormat.

  • Le type de données en entrée DataN doit correspondre au spécificateur de format indiqué dans sFormat (voir le tableau ci-dessous).

Description et exemples de caractère de contrôle sFormat

sFormat : par ex. %+12.5d,

Utiliser les données chaînes de caractères au format indiqué ci-dessous pour spécifier le type, le nombre de caractères et la précision de la chaîne de caractères formatée. Diverses options (telles que l’insertion d’un signe ou d’espaces) peuvent être sélectionnées selon le type de données à convertir.

Position dans l’exemple

Description

sFormat

Données binaires

Résultat de la conversion en données ASCII

Commentaire

0

Ajouter des zéros

'%05d'

100

'00100'

Lorsque le nombre de caractères est spécifié, des zéros (0) peuvent être ajoutés au caractère de contrôle sFormat à cette position.

+

Ajouter un signe plus

'%+4d'

100

'+100'

Largeur de quatre caractères, valeur décimale, signe + ajouté

-

Alignement à gauche

'%-6d'

100

'100'

Largeur de six caractères, valeur décimale, alignement à gauche

(espace) ajouter un espace au lieu du signe plus

'%4d'

100

'100'

Largeur de quatre caractères, valeur décimale avec des espaces à gauche

#

Insérer 0x pour les nombres hexadécimaux

'%#4X'

100

'0X64'

Largeur de quatre caractères, valeur numérique au format hexadécimal commençant par 0X

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

'%#8.0f'

123.45678

'123.'

Largeur de huit caractères, nombre à virgule flottante, quatre espaces à gauche

12

Largeur de données ASCII (avec ou sans virgule)

Lorsque la largeur est inférieure au nombre de caractères requis par cette valeur, une erreur d'opération apparaît. Pour en savoir plus, voir "Drapeaux d’erreur"

'%012d'

100

'000000000100'

Largeur de 12 caractères avec neuf zéros à gauche

Sans largeur :

'%d,'

100

'100,'

Pas de largeur spécifiée, une virgule est ajoutée

Précision après le point décimal

.5

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

'%8.3f'

123.45599

'123.456'

Largeur de huit caractères, précision de trois caractères après le point décimal

12.5

Spécifier le nombre total de caractères (n) et le nombre de caractères de précision (m) avec [n.m], [n] ou [.m]. Le nombre de caractères de précision (m) change selon le type de données de conversion.

d , Ld, i , Li, u ,Lu, x , Lx , b, Lb

Représente le nombre de caractères dans les chaînes de caractères numériques.

f, Lf, e, Le, E, LE

Représente le nombre de caractères après le point décimal.

g, Lg, G, LG

Représente le nombre de chiffres significatifs.

Type de données à convertir

'%06d'

100

'100'

d , i , u , x , X , b : nombre de caractères dans les chaînes de caractères numériques.

f : nombre de caractères après le point décimal.

g : nombre de chiffres significatifs.

d

Nombre entier signé ® ASCII décimal

'%6d'

100

'000100'

Largeur de six caractères, valeur décimale avec trois zéros à gauche

u

Nombre entier signé ® ASCII décimal

'%10u'

-100

'100'

Largeur de 10 caractères avec sept espaces à gauche, nombre entier non signé

x

Nombre entier non signé ® ASCII hexadécimal

'%4x'

16#12A

'12a'

Largeur de quatre caractères, nombre hexadécimal en caractères minuscules

X

Hexadécimal, caractère majuscule

'%4X'

16#12A

'12A'

Largeur de quatre caractères, nombre hexadécimal en caractères majuscules

b

Nombre entier BCD ® ASCII hexadécimal

'%5b'

16#123

'123'

Largeur de cinq caractères, données BCD

f

Nombre réel à virgule flottante ® ASCII à virgule flottante

'%-6.2f'

1.2345

'1.23'

Largeur de six caractères, alignés à gauche, précision de deux digits après le point décimal

e

Nombre réel à virgule flottante ® ASCII avec notation exponentielle

'%9.3e'

1234.5678

'1.235e+03'

Largeur de 9 caractères, précision de 3 digits après le point décimal, exponentiel, minuscule

E

Exponentiel, majuscule, par ex. 1.23E10

'%9.3E'

1234.5678

'1.235E+03'

Largeur de 9 caractères, précision de 3 digits après le point décimal, exponentiel, majuscule

g

Nombre réel à virgule flottante ® ASCII à virgule flottante ou ASCII avec notation exponentielle

'%12g'

1234.5678

'1234.57'

Largeur de 12 caractères, nombre à virgule flottante

G

À virgule flottante ou exponentiel, caractère majuscule

'%#9.3G'

1234

'1.E+03'

Largeur de neuf caractères, précision de trois caractères après le point décimal

s

Chaîne de caractères ®ASCII

'%10s'

abcdef

'abcdef'

Données chaînes de caractères (pour le nombre de caractères spécifié)

S

Chaîne de caractères ® caractère majuscule ASCII

'%-10S'

abcDEF

'abcDEF'

Données chaînes de caractères sensibles à la casse

Données de conversion pour le caractère de contrôle sFormat

Caractère de contrôle

Données binaires avant conversion

Données ASCII après conversion

Exemple

'%d' ou '%i'

Données de 16 bits (nombre entier signé)

Données ASCII décimales

'%d' , '%5d' , '%+5d"

'%-5d' , '%05d' , '%10.5d' , '%d,' , '% d'

'%Ld' ou '%Li'

Données de 32 bits (nombre entier signé)

'%u'

Données de 16 bits (nombre entier non signé)

'%u' , '%5u' , '%+5u'

'%-5u' , '%05u' , '%10.5u' , '%u,'

'%Lu'

Données de 32 bits (nombre entier non signé)

'%x'

Données de 16 bits

Données ASCII hexadécimales (conversion avant/inverse)

'%x' , '%5x' , '%-5x'

'%05x' , '%10.5x' , '%x,' , '%#x' , '%X'

'%Lx'

Données de 32 bits

'%b'

Données BCD de 16 bits

'%b' , '%5b' , '%-5b'

'%05b' , '%10.5b' , '%b,'

'%Lb'

Données BCD de 32 bits

'%f'

Données nombre réel, précision simple, 32 bits

Données ASCII à virgule flottante

'%f' , '%5.2f' , '%+5.2f'

'%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f'

'%Lf'

Données nombre réel, précision double, 64 bits

'%e'

Données nombre réel, précision simple, 32 bits

Données ASCII avec notation exponentielle

'%e' , '%5.2e' , '%+5.2e'

'%-5.2e' , '%05.2e' ,'%e,'

'%#5.2e' , '% e' , '%E'

'%Le'

Données nombre réel, précision double, 64 bits

'%LE'

Données nombre réel long, précision double, 64 bits

'%#5.2E' , '% E' , '%E'

'%g'

Données nombre réel, précision simple, 32 bits

Données ASCII avec notation exponentielle ou données ASCII à virgule flottante (selon celle qui est la plus petite dans la notation correspondante)

'%g' , '%5.2g' , '%+5.2g'

'%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G'

'%Lg'

Données nombre réel, précision double, 64 bits

'%LG'

Données nombre réel long, précision double, 64 bits

'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G'

'%s'

Données chaînes de caractères

Données chaînes de caractères (pour le nombre de caractères spécifié)

'%s' , '%5s' , '%-5s' , '%-05s'

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 résultat de la conversion est supérieur à la zone de sauvegarde.

  • Si une largeur de données ASCII spécifiée est inférieure au nombre de caractères requis par la valeur.

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 résultat de la conversion est supérieur à la zone de sauvegarde.

  • Si une largeur de données ASCII spécifiée est inférieure au nombre de caractères requis par la valeur.

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
		bFormat: BOOL:=FALSE;
		sFormatString: STRING[50]:='Current Value: %6d [Min: %6d, Max: %6d]';
		sFormattedString: STRING[50]:='';
		iCurrentValue: INT:=815;
		iMin: INT:=-16756;
		iMax: INT:=23456;	END_VAR

Corps en LD

La fonction est exécutée lorsque la variable bStart passe de FALSE à TRUE.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_CONTACT,,bFormat,7,1,9,3,);
B(B_F,E_FP_FORMAT_STRING-3!,,25,0,36,7,,?DEN?dsFormat?dData1?dData2?dData3?AENO?c);
B(B_VARIN,,sFormatString,23,2,25,4,);
B(B_VAROUT,,sFormattedString,36,2,38,4,);
B(B_VARIN,,iCurrentValue,23,3,25,5,);
B(B_VARIN,,iMin,23,4,25,6,);
B(B_VARIN,,iMax,23,5,25,7,);
L(1,0,1,7);
L(1,2,7,2);
L(9,2,25,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

if (bFormat) then
    sFormattedString := FP_FORMAT_STRING(sFormatString,
                                         iCurrentValue, iMin, iMax);
end_if;

Modifié le : 2022-10-05Feedback on this pagePanasonic hotline