Vai al contenuto
PLC Forum


Problema conversione da Int a String


Messaggi consigliati

Inserito: (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: da beppo

Inserita: (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: da TravelMen
Inserita:

Soluzione quacchio: prima di trasferire la stringa on FC16, la pulisci, ovvero ci trasferisci dentro una stringa vuota.

Inserita:

Ops.. non avevo letto bene la soluzione 1, scusate

Inserita:

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.

Inserita:

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

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...