Vai al contenuto
PLC Forum


Awl - Timer in una fb


Messaggi consigliati

Inserito:

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.


Inserita:

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)

Inserita:

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

Inserita:

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

VAR
  TimerON : SFB4;    
  TimerOFF : SFB4;    
END_VAR

  • 1 month later...
Inserita:

devi usare l'sfb4 all'interno dell'fb, poi con il tasto destro lo trasformi in multiistanza

ciao

Inserita:
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?

Inserita:
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

Inserita:

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

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