Acasă > forum > Programare IEC 61131 (LogicLab) > Convertirea unei variabile INT într-un șir
tagged: CONVERSIE INT ÎN ȘIR
- Acest subiect are 1 răspunsuri, 2 participanți și a fost actualizat ultima dată 1 an, acum 5 luni da Sergio Bertana.
-
AutorPost
-
Noiembrie 9, 2022 la 6: 06 pm #68561Joseph Romanoparticipant
Trebuie să creez un mesaj text format dintr-o parte fixă în format String și o variabilă numerică în format INT. Venind din programarea încorporată în C, m-am gândit la soluția simplă de a converti variabila INT în șir și apoi de a o concatenează cu prima parte a mesajului sau cu șirul deja disponibil. De exemplu:
String1 := 'numărul tău este: ' (variabilă șir)
contor := 1 (variabilă INT)
FinalMessage= String1 & INT_TO_STR(counter) – variabilă rezultat de tip șir
În exemplu, funcția INT_TO_STR () ar fi funcția de care aș avea nevoie. Nu găsesc așa ceva în manual și pe forum, cu excepția funcției SysVsnprintf despre care încă nu mi-am dat seama dacă poate fi folosită în acest scop.
Vă rog să-mi dați câteva indicații despre asta? Mulțumesc
Noiembrie 10, 2022 la 9: 30 am #68564Sergio BertanaAdministrator al forumuluiDa, exact funcția SysVsnprintf este cel pe care trebuie să îl utilizați, deoarece aveți experiență de programare în limbajul C, funcția se comportă ca snprintf() del C. Singura diferență este că argumentele nu pot fi variabile, ci trebuie să fie întotdeauna un singur argument al cărui tip trebuie definit.
Revenind la nevoia dvs., dacă vă uitați în manual veți găsi multe exemple de utilizare a acestei funcții, dar iată un exemplu pentru nevoia dvs.
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]
După cum puteți vedea, am obținut același rezultat folosind funcțiile sau operatorii de conversie a șirurilor. În exemplu, am vizualizat și cum să faci o concatenare de valori, funcția snprintf () a lui C ți-ar fi permis să faci totul într-o singură linie de cod:
i=snprintf(Message, SIZEOF(Message), "Counter[0]: %d, Counter[1]: %d", Counter[0], Counter[1]);
-
AutorPost
- Trebuie să fiți autentificat pentru a răspunde la acest subiect.