Accueil > Forum > Programmation IEC 61131 (LogicLab) > Conversion d'une variable INT en String
marqués: CONVERSION INT EN CHAÎNE
- Ce sujet a 1 réponses, 2 participants et a été mis à jour pour la dernière fois 1 année, 5 mois da Sergio Bertana.
-
auteurPost
-
Novembre 9, 2022 à 6: pm 06 #68561Giuseppe RomanoPartecipante
J'aurais besoin de créer un message texte composé d'une partie fixe au format String et d'une variable numérique au format INT. Venant de la programmation embarquée en C, j'avais pensé à la solution simple consistant à convertir la variable INT en une chaîne puis à la concaténer avec la première partie du message ou la chaîne déjà disponible. Illustrant :
String1 : = 'votre numéro est :' (Variable de chaîne)
compteur : = 1 (variable INT)
MessageFinale = String1 & INT_TO_STR (compteur) - variable de résultat de type chaîne
Dans l'exemple, la fonction INT_TO_STR () serait la fonction dont j'aurais besoin. Je ne trouve rien de tel dans le manuel et sur le forum, à l'exception de la fonction SysVsnprintf dont je n'ai pas encore compris si elle peut être utilisée à cette fin.
Pourriez-vous s'il vous plaît me donner des informations à ce sujet? Merci
Novembre 10, 2022 à 9: 30 am #68564Sergio BertanaAdministrateur du forumOui c'est la fonction SysVsnprintf est ce que vous devez utiliser, puisque vous avez l'expérience de la programmation en langage C la fonction se comporte comme le snprintf() del C. La seule différence est que les arguments ne peuvent pas être des variables mais doivent toujours être un seul argument dont le type doit être défini.
En ce qui concerne votre besoin, si vous regardez dans le manuel, vous trouverez de nombreux exemples d'utilisation de cette fonction, mais voici un exemple pour votre besoin.
PROGRAM MyProgram VAR i : UDINT; (* Auxiliary variable *) Counter : ARRAY[0..1] OF UINT := [10, 20]; (* Counter value *) Message : STRING[ 32 ]; (* Final message *) END_VAR // Esempio di concatenazione stringhe con funzioni. i:=SysVsnprintf(ADR(Message), SIZEOF(Message), ADR('Counter[0]: %d'), UINT_TYPE, ADR(Counter[0])); //'Counter[0]: 10' i:=SysCVsnprintf(ADR(Message), SIZEOF(Message), ADR(', Counter[1]: %d'), UINT_TYPE, ADR(Counter[1])); //'Counter[0]: 10, Counter[1]: 20' // Esempio di concatenazione stringhe con operatori di conversione. Message:=CONCAT('Counter[0]: ', TO_STRING(Counter[0])); //'Counter[0]: 10' Message:=CONCAT(Message, ', Counter[1]: '); //'Counter[0]: 10, Counter[1]: ' Message:=CONCAT(Message, TO_STRING(Counter[1])); //'Counter[0]: 10, Counter[1]: 20' // [End of file]
Comme vous pouvez le voir, j'ai obtenu le même résultat en utilisant les fonctions ou les opérateurs de conversion de chaîne. Dans l'exemple j'ai aussi visualisé comment faire une concaténation de valeurs, la fonction snprintf() de C aurait permis de tout faire en une seule ligne de code :
i=snprintf(Message, SIZEOF(Message), "Counter[0]: %d, Counter[1]: %d", Counter[0], Counter[1]);
-
auteurPost
- Vous devez être connecté pour répondre à ce sujet.