Vai al contenuto
PLC Forum


Awl - Timer in una fb


tonymt

Messaggi consigliati

Salve, devo creare una FB che fra le altre cose deve contenere deve contenere un timer, ritardo all'eccitazione, di 1secondo.

Se ci metto un timer s7 (esempio T1) questo sara lo stesso per tutte le varie istanze della FB, e si incasinera tutto.

come si risolve questo problema ?

Grazie.

Link al commento
Condividi su altri siti


Puoi passarlo come parametro IN : TIMER poi nel blocco chiamante dichiari ogni volta un timer diverso, oppure usi SFB4 come consigliato da Oracolo, oppure usi una double-word che incrementi col parametro OB1_PREV_CYCLE (questo lo devi passare all'FB come parametro IN)

Link al commento
Condividi su altri siti

Si, ma nel caso usi la sfb4 gli devo dare l'ob, diverso per ogni istanza...

Come si fa a passare un ob come parametro esterno? .....

Link al commento
Condividi su altri siti

Ti basta dichiarare una variabile di tipo STAT all'interno del tuo FB come SFB4, ad esempio:

VAR
  TimerON : SFB4;    
  TimerOFF : SFB4;    
END_VAR

Link al commento
Condividi su altri siti

  • 1 month later...
Puoi passarlo come parametro IN : TIMER poi nel blocco chiamante dichiari ogni volta un timer diverso

Anch'io faccio così e funziona.

MA ho un problema: con i contatori non funziona (negli FB si possono passare solo come IN ma non contano una cippa!) come devo fare?

Link al commento
Condividi su altri siti

con i contatori non funziona

ma questo funziona

FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1


VAR_INPUT
  pippo : COUNTER;    
  Reset : BOOL;    
  Imposta : BOOL;    
  Conta : BOOL;    
END_VAR
VAR_OUTPUT
  Done : BOOL;    
END_VAR
VAR
  Conteggio : WORD;    
END_VAR
BEGIN
NETWORK
TITLE =

      A     #Conta; 
      CU    #pippo; 

      A     #Imposta; 
      L     C#10; 
      S     #pippo; 

      A     #Reset; 
      R     #pippo; 

      L     #pippo; 
      T     #Conteggio; 

NETWORK
TITLE =

END_FUNCTION_BLOCK

lo richiamo in OB1 con ingresso il contatore che mi serve ed ad ogni fronte di "#Conta" il contatore conta senza fastidi, se alzo il "#Reset" anche come se alzo "#Imposta" il contatore si imposta a 10.

Caso mai posta il tuo di blocco e si vede

Link al commento
Condividi su altri siti

Se non ti serve precisissimo, ( l'imprecisione è aggiunta dal tempo di ciclo) puoi usare questa tecnica:

In OB1, nelle prime istruzioni, prima di chiamare qualunque FB od FC ti crei un merker che genera un FP mediante un timer ( oppure addirittura tramite uno dei bit del il byte di clock interno della CPU).

ogni qual volta ti serve, lo passi come parametro in ingresso alla tua FB ( in pratica hai creato un clock).

All'interno della tua FB ogni qual volta vedi il bit, incrementi un semplice intero e poi fai un confronto per vedere se hai raggiunto il valore desiderato.

In questo modo risparmi timer e tempo di esecuzione.

Ciao,

Vittorio

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