Vai al contenuto

Risultato delle operazioni di conversione tipo dati

Home Forum Programmazione IEC 61131 (LogicLab) Risultato delle operazioni di conversione tipo dati

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35159
    Roberto
    Partecipante

    Desideravo conoscere il tipo di risultato che si ha eseguendo operazioni di conversione dati nel caso in cui il valore da convertire sia di entità superiore od inferiore al valore gestito dal nuovo tipo.

    Mi spiego meglio, ipotizzando di convertire un valore UINT 16#256 in un valore USINT cosa si ottiene come risultato. La stessa cosa per i vari tipi di dato compreso il REAL.

    C’è la possibilità che errori di range nella conversione provochino l’arresto della esecuzione del programma ?

    #37128
    Sergio Bertana
    Amministratore del forum

    La conversione dei dati è una pratica necessaria nella programmazione, naturalmente se il tipo dati di destinazione ha un range inferiore del tipo dati di origine viene effettuato un troncamento del valore. Iniziamo con il dire che in nessun caso errori di range nelle conversioni dato provocano l’arresto della esecuzione. Vediamo caso per caso le varie conversioni:

    Tipo BOOL: Le conversioni da qualsiasi tipo verso un BOOL, tornano FALSE se il valore del dato da convertire è 0. Tornano TRUE se il valore del dato da convertire è diverso da 0 (anche < 0).

    Tipo SINT/USINT: Le conversioni da qualsiasi tipo verso un USINT, tornano il valore del byte meno significativo del valore da convertire espresso in esadecimale. Esempio il valore 4660 (16#1234) tornerà 52 (16#34), lo stesso vale per i REAL esempio 300.0 (16#012C) tornerà 44 (16#2C). Per il tipo SINT se il valore esadecimale supera 127 il numero sarà negativo.
     
    Tipo INT/UINT: Le conversioni da qualsiasi tipo verso un UINT, tornano il valore dei due bytes meno significativi del valore da convertire espresso in esadecimale. Esempio il valore 305419896 (16#12345678) tornerà 22136 (16#5678), lo stesso vale per i REAL esempio 90000.0 (16#15F90) tornerà 24464 (16#5F90). Per il tipo INT se il valore esadecimale supera 32767 il numero sarà negativo.

    Allego la stampa di un programma di test ed il programma sorgente.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.