Vai al contenuto
PLC Forum


Conversione Da Reale A Dintero


mazzinga

Messaggi consigliati

Buongiorno.

Dal titolo della discussione penso che si capisca quale il mio problema, devo convertire un variabile reale in una variabile

DIntero,nella libreria di microWin non ho trovato la funzione corrispondente.

Qualcuno saprebbe indicarmi se in qualche modo si puo convertire tale variabile

Grazie

Link al commento
Condividi su altri siti


Devi usare "R_TO_DI" nel formato IEC1131.

Dall'help in linea di microwin:

L'operazione Converti numero reale in numero intero (a 32 bit) converte un numero reale (N) in numero intero a 32 bit e carica il risultato nella variabile specificata da OUT.Condizioni d'errore che impostano ENO = 0:

0006 indirizzo indiretto

SM1.1 overflow o valore non ammesso

Link al commento
Condividi su altri siti

  • 1 month later...

Livio anche io ho lo stesso problema di mazzinga,dovrei convertire un numero reale in doppio intero.

Nel mio Tool di sviluppo non trovo l'istruzione da te indicata.La versione che sto utilizzando e la 4.0.6.35,potrebbe essere un problema di versione.

Link al commento
Condividi su altri siti

La funzione citata da Livio , non c'è nel set istruzioni per S7-200.

L'unico modo per convertire un REAL in un INT a 32bit (DINT) è usare la funzione ROUND , arrotondamento.

Ciao

Ivan

Link al commento
Condividi su altri siti

Come ho scritto sopra "R_TO_DI" fa parte del set IEC1131 supportato da tutte le CPU 22x, però non lo trovi nell'editor AWL, KOP e FUP, devi usare un editor IEC1131 e poi compilare, questo è unìaltra delle firbate di Siemens.

Non ho mai fatto prove in merito con il 200, ma in altri casi con l'operazione "raund" fai solo il troncamento, ma il numero rimane espresso in real e non in intero, quindi con formati completamente differenti perchè real esprime la mantissa nela byte alto e l'esponente nei 3 byte di peso inferiore

Link al commento
Condividi su altri siti

in microwin sulla funzione ROUND, indica che la variabile d'ingresso è un REAL l'out è un DINT. Quindi è quello che fa per te.

BAsta guarda re la guida.

Link al commento
Condividi su altri siti

Non ho mai fatto prove in merito con il 200, ma in altri casi con l'operazione "raund" fai solo il troncamento, ma il numero rimane espresso in real e non in intero

Per chiarezza bisogna dire che le operazioni che convertono un numero reale con mantissa+esponente sono 2.

ROUND , interpreta il numero reale , e restituisce un valore in una DW arrotondato in genere sempre al successivo (in eccesso).

Ovviamente i numeri inferiori allo zero assumono annotazione negativa , i numeri con esponente positivo superiori al limite consentito dal formato INT nella DW +2.147.483.647 o minori di zero inferiori a -2.147.483.647 , restituiscono su ENO il valore zero (overflow).

TRUNC invece ,effettua un vero troncamento preleva solo la mantissa dal numero reale e la restituisce nella DW in formato INT , in questo modo il valore originale REAL perde il suo significato numerico.

Ciao

Ivan

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