Vai al contenuto
PLC Forum


TOTALIZZATORE


Frank681

Messaggi consigliati

Salve

Sul Sito support SIEMENS ho trovato un totalizzatore che volevo usare per avere i totali dei consumi del mio impioanto , tutto funziona bene per un po poi arrivati al valore 1.35...+05 si blocca e non conteggia piu' vi sono anche i sorgenti in awl , ho notato che i numeri sono definiti come real per cui dovrei avere un campo maggiore di totalizzazione se volessi un totalizzatore continuo come posso fare ? I consumi dopo un anno saranno elevati.

 

Link al commento
Condividi su altri siti


Ciao acquaman

ecco il listato awl che mi genera il blocco , da sito siemens

 

FUNCTION_BLOCK FB 100

VAR_INPUT
  VALUE : REAL ;     // Measured value per time interval
  INTERVAL : TIME ;  // Time interval unit of measurement
  CYCLE : TIME ;     // Sampling time
  COM_RST : BOOL ;   // Clear accumulated total
END_VAR

VAR_OUTPUT
  TOTAL : REAL ;     // Accumulated total value
END_VAR

VAR
  ACCUM : REAL ;     // Accumulated total value (static storage)
END_VAR

VAR_TEMP
  tINTERVAL : REAL ; // Temp. time INTERVAL in REAL format
  tCYCLE : REAL ;    // Temp. CYCLE time in REAL format
END_VAR

BEGIN

NETWORK
TITLE =check for a complete reset

      u     #COM_RST;
      spbn   nw2;

      L     0.000000e+000;
      T     #ACCUM;
      T     #TOTAL;

      SET   ;
      SAVE  ;
      BEa   ;
 

NETWORK
TITLE =convert INTERVAL and CYCLE to REAL numbers

nw2:  NOP   0;

      L     #INTERVAL;
      DTR   ;
      T     #tINTERVAL;

      L     #CYCLE;
      DTR   ;
      T     #tCYCLE;

NETWORK
TITLE =add incremental value to accumulated and total values

      L     #VALUE;
      L     #tCYCLE;
      *R    ;
      L     #tINTERVAL;
      /R    ;

// now that incremental value is calculated,
// add this to the accumulated value
// and send it to the output TOTAL

      L     #ACCUM;
      +R    ;
      T     #ACCUM;
      T     #TOTAL;

NETWORK
TITLE =exit

      SET   ;
      SAVE  ;
      Bea   ;

END_FUNCTION_BLOCK

grazie dell apazienza

Link al commento
Condividi su altri siti

Ciao,

A me è già successo una cosa simile, i numeri real a singola precisione (32 bit) hanno una limitazione, cioè, se tenti di sommare 1 ad un numero real troppo grande non lo somma più perchè c'è una grande differenza tra le mantisse.

In realta il real non può rappresentare propio tutti i numeri.

Il mio totalizzatore erà una portata e come te la somma si fermava fino ad un certo punto, ho risolto facendo incrementare il real fino ad un milione di m3, al raggiungimento del milione azzero il real ed incremento una variabile DINT di una unità.

questa è la discussione se ti può interessare.

Somma tra Real

Saluti.

Link al commento
Condividi su altri siti

Il formato REAL è approssimato. Per questo motivo va bene per i calcoli, ma non per i totalizzatori. L'incremento di una unità si perde quando arrivi a valori intorno ai 16 milioni.

Per un totalizzatore, meglio usare un DINT.

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