Vai al contenuto
PLC Forum


Problema conversione da Int a String


beppo

Messaggi consigliati

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
Link al commento
Condividi su altri siti


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
Link al commento
Condividi su altri siti

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

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

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...