Vai al contenuto

Calcolo quota su UDINT utilizzando il FB SysGetEncoder

Home Forum Programmazione IEC 61131 (LogicLab) Calcolo quota su UDINT utilizzando il FB SysGetEncoder

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

    All’interno di un programma uso la FB SysGetEncoder e il valore quota è espresso a 16 bit. Io però devo contare e poi comparare uno spostamento asse che ha un valore di quota superiore di 16 bit, precisamente dovrei comparare la quota con il valore 85000.

    Ho fatto diverse prove ma quando il valore della quota encoder si azzera mi sbaglia la comparazione.

    #39782
    Sergio Bertana
    Amministratore del forum

    Il tuo è un problema di calcolo quota su rapporto circolare, argomento che ho trattato in questo topic ed in questo topic. In pratica acquisendo il valore di quota encoder su loop successivi di esecuzione programma si calcola lo spostamento in tacche che ha fatto l’encoder e si somma lo spostamento ad un valore di quota espresso in UDINT. Tutto il succo è in queste semplici operazioni:

    EAcq(); (* Encoder acquisition *)
    EOfs:=TO_INT(EAcq.EQuote-QteBf); (* Encoder offset (Pulses) *)
    EQuote:=EQuote+TO_DINT(EOfs); (* Encoder quote (Pulses) *)
    QteBf:=EAcq.EQuote; (* Quote buffer *)

    E’ importante che le variabili utilizzate siano del tipo indicato sotto, in caso contrario non funziona:

    EOfs : INT; (* Encoder offset (Pulses) *)
    QteBf : UINT; (* Quote buffer *)
    EQuote : DINT; (* Encoder quote (Pulses) *)

    Nell’esempio uso una variabile DINT per la quota così può andare anche in negativo. Se la tua quota è solo positiva puoi usare una variabile UDINT modificando:

    EQuote:=EQuote+TO_UDINT(EOfs); (* Encoder quote (Pulses) *)

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