Vai al contenuto
PLC Forum


Temporizzatori Finiti


simofanti

Messaggi consigliati

ciao ragazzi, ho finito i temposizzatori di una cpu s7-300, so che esiste un blocco che fa da temporizzatore ritardo all'eccitazone....qualcono sa dirmi quale è???? grazie

Link al commento
Condividi su altri siti


Ciao buongiorno,

io personalmente quando non dispongo piu di timer,un uso il blocco che dici tu ( tanto vero che non so neanche come si chiama e se esiste)

ma attraverso l'utilizzo dei merker di clock incremento una word di una db poi la comparo con: o valore fisso o valore di un'altra word della stessa db o di un'altra db,

in questo modo il tuo numero di timer (in queto caso) e illimitato..

ciao

buon lavoro

Arnaldo

Link al commento
Condividi su altri siti

L'argomento è già stato trattato parecchie volte. Perché la funzione "cerca" è così poco (o male) usata?

Avresti sicuramente trovato QUESTO, che potrebbe fare al caso tuo.

Se invece vuoi utilizzare le funzioni di sistema del Simatic, apri la biblioteca "Standard Library" --> "System Function Block" e trovi SFB4 (TON) e SFB5 (TOF).

Anche a questo ci si poteva arrivare soltanto aprendo Step7 e con un po' di buona volontà.

Io sono ben lontano dal conoscere a memoria tutti i blocchi disponibili nella varie biblioteche. Se ho bisogno di qualcosa, cerco. Le funzioni sono suddivise con un certo criterio e, di solito, la ricerca dà buoni frutti con sforzo limitato.

Link al commento
Condividi su altri siti

IL PROBLEMA E CHE NA DEVO GENERARE CIRCA 50....NON POSSO CREARE 50 DB DI ISTANZA....COME SI FA???? CIAO GRAZIE

Prima cosa: scrivere in maiuscolo nei forum equivale ad urlare. Non mi pare proprio ci sia il motivo per alzare la voce :angry:

Tu hai chiesto cosa potevi utilizzare al posto dei normali timer, e mi pare di averti dato risposta.

Se poi non vuoi creare 50DB, questo è un'altra questione.

In ogni caso, sembra che tu non ti sia nemmeno preso la briga di guardare cosa trovavi cliccando sul link al mio post con il download di "Esempio Timer.zip".

Se l'avessi fatto, ti saresti accorto che quella funzione non ha bisogno di DB. Tutto ciò di cui necessita è una variabile INT per ogni timer e di un merker di clock (o richiamo in OB a tempo) che può anche essere unico per tutti.

Altra soluzione (ma la funzione è un po' più pesante della mia), la trovi (e torniamo al discorso che spesso basterebbe cercare) sempre nelle librerie Siemens in "Standard Library" --> "TI-S7 Converting Blocks" --> FC80 (TONR).

Modificato: da batta
Link al commento
Condividi su altri siti

Ho messo quelle faccine anche perchè la discussione che hai linkato non l'ha proprio letta!

Lì si parla anche del problema delle molteplici DB !

Link al commento
Condividi su altri siti

  • 1 month later...

costruiscitelo tu .

Prendi dall OB1 la temporanea che ti da l'ultimo tempo di ciclo scansione , lo trasformi da intero a reale

Poi usi lo scan time per incrementare i tuoi accumulatori di timer , in base alle condizioni di strart o reset .

Il timer sarà sincrono e l'errore non supera il tempo di scansione stesso

Poi esiste anche una funzione tick che permette di leggere un timer di sistema , ma comunque la musica e' medesima

Link al commento
Condividi su altri siti

IL PROBLEMA E CHE NA DEVO GENERARE CIRCA 50....NON POSSO CREARE 50 DB DI ISTANZA....COME SI FA???? CIAO GRAZIE

Infatti non devi generare 50 DB... basta una DB che li contenga tutti...

Inoltre, non ci vuole molto ingegno ad utilizzare anche altri metodi: se sono timer "grossolani" che devono contare secondi (e non decimi o centesimi) puoi crearti dei clock con l'orologio di sistema e utilizzare i contatori con un impulso di 1 secondo; con lo stesso impulso puoi utilizzare anche delle semplici merker word, se non degli interi memorizzati in una DB.

ciao

Link al commento
Condividi su altri siti

  • 3 weeks later...

Prova con questo (e' un sorgente)

FUNCTION "TON" : VOID

TITLE = TIMER ON DELAY

AUTHOR :

NAME : S_EVERZ

VERSION : 1.0

VAR_INPUT

TMR_EN : BOOL ; // Enables timer to accumulate time

PresetVal : DINT ; // Preset value

ScanTime : INT ; // OB scan time for previous cycle

END_VAR

VAR_OUTPUT

Q : BOOL ; // Set to 1 if timer has timed out

END_VAR

VAR_IN_OUT

ElapsTim : DINT ; // Elapsed time

END_VAR

BEGIN

NETWORK

TITLE =

//

//

SET ;

U #TMR_EN;

SPB RESE;

L 0;

T #ElapsTim;

RESE: NOP 0;

//*

L #ElapsTim;

L #PresetVal;

<D ;

SPBN SUM;

CLR ;

O #TMR_EN;

SPBN SUM;

L #ScanTime;

L #ElapsTim;

+D ;

T #ElapsTim;

SUM: NOP 0;

//*

U( ;

L #ElapsTim;

L #PresetVal;

>=D ;

) ;

U #TMR_EN;

= #Q;

SAVE ;

END_FUNCTION

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