beppo Inserito: 5 ottobre 2020 Segnala Share Inserito: 5 ottobre 2020 (modificato) Buonasera a tutti. Vi descrivo brevemente il mio problema. S7300 e Step 7 5.5. Devo convertire una variabile Int in una stringa da passare ad una stampante, la variabile Int contiene un valore numerico da 0 a 999. Per la conversione ho usato l'FC16 I_STRING IEC. Finchè la variabile Int contiene 3 cifre, nessun problema, quando invece ne contiene 2, sulla variabile covertita mi trovo le 2 cifre sul primo e sul secondo byte, mentre sul terzo byte rimane l'ultima cifra della coversione precedente con una variabile Int a 3 cifre, un piccolo esempio: valore Int 124 sulla stringa trovo "1"-"2"-"4" valore Int 38 sulla stringa trovo "3"-"8"-"4". Cioe il 3 sulle centinaia l'8 sulle decine ed il 4 rimane dalla conversione precedente. Stessa cosa se su Int ho una sola cifra. Provvisoriamente ho tampanotato con un accrocchio, cioè divido per cento la variabile Int e se il risultato è 0 sposto i due byre a destra di 1 e scrivo 0 sulle centinaia, stessa cosa per le decine. Qualcuno mi sa suggerire un metodo più elegante di fare questa conversione. Grazie a chi mi può aiutare. Modificato: 5 ottobre 2020 da beppo Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 6 ottobre 2020 Segnala Share Inserita: 6 ottobre 2020 (modificato) Ciao prima soluzione la più veloce, azzeri la stringa prima della conversione tipo: L L#0 T #FILL_DATA CALL "FILL" (SFC21) BVAL :=#FILL_DATA RET_VAL:=#FILL_ERROR BLK :=#Variabile_Stringa oppure: CALL "BLKMOV" (SFC20) SRCBLK :=#Var_stringa_vuota RET_VAL:=#_BLKMove_Error DSTBLK :=#Variabile_Stringa Soluzione due, un po più laboriosa, leggi il secondo byte della stringa convertita che ti indica di quanti caratteri è composta la tua stringa (es: 2 se sono due le cifre, ecc, ecc) e crei una funzione che azzera i byte dal 5 in poi sino alla fine delle stringa. Soluzione tre, fai una funzione che ti converte il numero in una sequenza di byte (array), ovvero senza il primo byte che dice quanto è lunga l'intera stringa ed il secondo byte che indica quanti caratteri sono stati scritti e validi nella stringa. Saluti Modificato: 6 ottobre 2020 da TravelMen Link al commento Condividi su altri siti More sharing options...
Cialtrone Inserita: 6 ottobre 2020 Segnala Share Inserita: 6 ottobre 2020 Soluzione quacchio: prima di trasferire la stringa on FC16, la pulisci, ovvero ci trasferisci dentro una stringa vuota. Link al commento Condividi su altri siti More sharing options...
Cialtrone Inserita: 6 ottobre 2020 Segnala Share Inserita: 6 ottobre 2020 Ops.. non avevo letto bene la soluzione 1, scusate Link al commento Condividi su altri siti More sharing options...
beppo Inserita: 6 ottobre 2020 Autore Segnala Share Inserita: 6 ottobre 2020 Caspita........ L'inizializiazione della stringa prima della conversione proprio non l'avevo pensata...... A volte la soluzione è cosi semplice che neanche la prendiamo in considerazione..... Grazie ad entrambi per rapida per la risposta. Alla prossima. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 7 ottobre 2020 Segnala Share Inserita: 7 ottobre 2020 Ciao Attento ad usare la SFC21 "Fill" è vero che ti pulisce la stringa ma è anche vero che azzera il primo ed il secondo byte, rendendo di fatto la stringa non interpretabile come stringa ma ben si come una sorta di array di char con i primi due caratteri "null", per andare sul sicuro usa SFC20 "BLKMOV". Saluti Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora