Definizione di costanti utilizzabili nel programma

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 Programmazione IEC 61131 (LogicLab) Definizione di costanti utilizzabili nel programma

Questo argomento contiene 7 risposte, ha 3 partecipanti, ed è stato aggiornato da  Sergio Bertana 5 mesi fa.

Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
  • Autore
    Articoli
  • #35835

    Giorgio
    Partecipante

    Esiste la costante pi greco già definita oppure occorre scriverne il valore ogni volta che la si utilizza ? Eventualmente è possibile definirla come costante una sola volta nel programma ?

    #39043

    Sergio Bertana
    Amministratore del forum

    Non esistono costanti predefinite, però è possibile definire variabili che sono assunte come costanti in tutto il programma. Nella tabella di definizione delle variabili globali si defiscono le nuove costanti con l’attributo CONSTANT (Screenshot).

    #39044

    Giorgio
    Partecipante

    Nel frammento di codice seguente il valore della variabile Cr calcolato non è corretto quando il valore in input AlfaR è piccolo. Addirittura il segno è diverso. Il valore intermedio alfa_rad è corretto, l’errore sembra nascere nel calcolo seno e coseno.
    Come fare?

    alfa_rad:=TO_REAL(AlfaR)*pigreco /18000.0;
    Cr:=(TO_REAL(a[0])* COS(alfa_rad))/sin(alfa_rad);

    Esempio1: AlfaR=51  –> Cr=-26217  (errato!!! deve essere positivo =39319,59)
    Esempio2: AlfaR=68  –> Cr=29489  (esatto!!!)

    #39045

    Sergio Bertana
    Amministratore del forum

    Ho scritto un programma esattamente uguale al tuo e come vedi dallo screenshot il risultato è corretto. Ti allego anche il progetto così puoi testarlo sul tuo sistema, funziona anche con il simulatore (Download progetto).

    Se da te non funziona, puoi controllare la versione del firmware del tuo sistema e la versione del programma LogicLab.

    #39046

    Giorgio
    Partecipante

    Risolto! Avevo erroneamente dichiarato Cr come INT e poi ci copiavo dentro un REAL. In effetti segnalava un warning.
    Strano che non avvisi con errore bloccante.

    #39047

    Sergio Bertana
    Amministratore del forum

    Lo scrivere un numero REAL in una variabile INT non è bloccante, è una operazione che si può fare. Ad esempio si utilizza per togliere la parte decimale ad un numero oppure nel caso di appoggio del valore in un registro che verrà poi letto da Modbus.

    A differenza di altri linguaggi come ad esempio il C dove il cast tra variabili è implicito, la normativa IEC impone di esplicitarlo con il costrutto TO_INT(). In caso contrario il compilatore segnala warning.

    #46659

    Stefano
    Partecipante

    Avrei una domanda sulle costanti:

    Se io dichiarassi una variabile come costante e la mappassi in un’area di memoria accessibile da MODBUS, un tentativo di scrittura via MODBUS su quella locazione di memoria modificherebbe la costante o rimarrebbe immutata?

    #46674

    Sergio Bertana
    Amministratore del forum

    Anche se è possibile dichiarare una variabile mappata in memoria accessibile da Modbus come costante, non sarebbe  comunque impedita la scrittura della stessa da Modbus.

    Siccome il protocollo Modbus viene gestito in Back prima di iniziare l’esecuzione dei programmi utente, se non vuoi che l’eventuale modifica da modbus sia vista dal programma (Ma questo vale solo per i programmi eseguiti in Back) puoi eseguire come prima operazione la valorizzazione della variabile con il valore costante che deve avere.

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

Devi essere loggato per rispondere a questa discussione.