Informazioni su warning del compilatore

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Informazioni ambiente di sviluppo LogicLab Informazioni su warning del compilatore

Questo argomento contiene 1 risposta, ha 2 partecipanti, ed è stato aggiornato da  Sergio Bertana 4 mesi, 3 settimane fa.

Stai vedendo 2 articoli - dal 1 a 2 (di 2 totali)
  • Autore
    Articoli
  • #46685

    Stefano
    Partecipante

    Vorrei capire alcune cose sui messaggi di warning emessi dal compilatore. Nello specifico trovo i seguenti messaggi:

    UI/SYNOPTICTEST(2$F:14) – warning G0015: POW => Estensione accumulatore
    UI/SYNOPTICTEST(2$F:14) – warning G0059: POW => Estensione del tipo dell’operando

    E’ generato da rete in FBD dove una costante (valere: 2) viene elevata alla X (variabile USINT che può assumere valori da zero a 12), l’uscita del blocco POW entra in un “TO_WORD” che poi entra in blocco “WordToByte”.

    Mi piacerebbe adottare un costrutto che non generasse il warning ma non ho le idee molto chiare.

    #46698

    Sergio Bertana
    Amministratore del forum

    La funzione POW opera su variabili REAL, quindi se tu passi alla funzioni variabili o valori diversi da REAL il compilatore ti genera le warning riportate.

    Ti faccio un esempio in ST Result:=POW(2, 3); genera le warning perchè i valori 2 e 3 sono considerati interi. Se invece scrivi Result:=POW(2.0, 3.0); le warning spariscono (Naturalmente Result deve essere di tipo REAL).

    In pratica quando scrivi una costante in una variabile di tipo REAL devi sempre mettere il decimale (2.0). Nel tuo caso poi che copi una variabile intera di tipo USINT in una variabile REAL devi mettere l’operatore TO_REAL.

    Result:=POW(2.0, TO_REAL(Exponent));

    La stessa cosa se vuoi trasferire il risultato di POW in una variabile intera di tipo UINT devi scrivere

    Result:=TO_UINT(POW(TO_REAL(Base), TO_REAL(Exponent)));

Stai vedendo 2 articoli - dal 1 a 2 (di 2 totali)

Devi essere loggato per rispondere a questa discussione.