crc-error-79

Timer e tempo ciclo

24 messaggi in questa discussione

Buongiorno a tutti, sono nuovo del forum e del mondo PLC in generale (vengo dal mondo pc e mobile).

 

Mi sto buttando su manuali ed esempi trovati qua e la per cercare di capire come funzionano i PLC nel particolare il 300 (per ora solo cose base con il PLCSIM).

 

Ho una domanda sui timer e il tempo ciclo, in pratica vorrei sapere se i timer sono legati al tempo ciclo o no.

 

Mi spiego meglio: ho un timer che tiene acceso un motore per 10 secondi. 

In questi 10 secondi se succede qualche cosa, per esempio salta la termica del motore (o cade qualche altro l'ingresso) il PLC se ne accorge? dopo quanto? tempo di ciclo + timer o solo tempo di ciclo?

 

So che può sembrare una cosa da FAQ ma per ora non ho trovato nessuna risposta sicura...

 

Grazie in anticipo

Condividi questa discussione


Link discussione
Condividi su altri siti

Gli ingressi del PLC e le uscite non sono ingressi ed uscite fisiche ma locazioni di memoria in cui è rappresentato lo stato di queste periferiche.

Al termine di ogni ciclo, il sistema operativo del PLC copia la tabella immagine delle uscite sulle uscite fisiche, poi copia gli ingressi fisici nella tabella immagine corrispondente. Pertanto se lo stato della termica è letto da un ingresso del PLC, sarà aggiornato al termine di ogni ciclo del PLC stesso.

Se vuoi sapere lo stato di un ingresso in tempo reale devi usare un'istruzione di accesso diretto alla periferia; esistono per leggere ingressi digitali e analogici e per scrivere le uscite digitali ed analogiche.

 

I timers, se usi quelli previsti dalle istruzioni, non influenzano il tempo di ciclo.

Condividi questa discussione


Link discussione
Condividi su altri siti

Grazie era come pensavo ...quindi se ho un tempo ciclo di 10 ms e un timer a 10 secondi, avrò 1000 tempi ciclo prima che finisca il timer?

 

EDIT: domandina: il programma invece viene bloccato fino al completamento del timer?

Condividi questa discussione


Link discussione
Condividi su altri siti

Se con programma ti riferisci al solo comando vincolato dal timer stesso, si.

Finchè il timer non finisce (presuppongo si tratti di un everz), il comando non è attivo.

 

Se con programma ti riferisci a TUTTO il programma, no.

Il timer influenza solo il comando a cui è vincolato e altre routine implicanti il timer stesso, le altre operazioni verranno comunque interpretate dal controllore e gestite di conseguenza.

Condividi questa discussione


Link discussione
Condividi su altri siti

si, intendo il programma step7.

 

Per esempio, se nell' OB1 chiamo l'FC1 dove ho il blocco con il timer, il programma resterà fermo fino allo scadere, o una volta avviato, viene completato il resto del codice nella FC per poi tornare all'OB1 concluderla e ripartire da capo? (saltando il timer già avviato fino allo scadere del tempo fissato?)

 

Scusa è un esempio un po' confuso perché lo sono anche io.. forse così è un po' più chiaro quello che voglio dire...

 


ciclo 1

- OB1

  - chiamo FC 1 

   - codice 

   - timer, avvio (10 secondi) <- il programma resta bloccato qui o prosegue?

   - altro codice

   - fine e uscita da FC1

 

se prosegue:

ciclo 2

- OB1

  - chiamo FC 1 

   - codice 

   - timer, già avviato, salto ad "altro codice"

   - altro codice

   - fine e uscita da FC1

 

cicli ...

 

ciclo 1000

- OB1

  - FC 1 

   - codice 

   - timer, finito eseguo codice su stop timer e preparo per riavvio come ciclo 1

   - altro codice

   - fine e uscita da FC1

 

 

Grazie

Condividi questa discussione


Link discussione
Condividi su altri siti

Il programma, al primo ciclo che hai scritto, avvierà il timer, poi prosegue a fare tutte le altre operazioni scritte in fc1.

Il plc eseguirà sempre tutte le istruzioni per come sono programmate, tranne nei casi di salti o blocchi di programma.

 

Ad esempio.

Tu richiami quel timer di 10 secondi.

L'istruzione dopo la scrivi:

UN timer <- se non ho il timer

BEB <- termino il blocco ed esco

 

In questo caso, tutte le istruzioni successive a beb non verranno considerate fintanto che quel timer non sarà true.

 

Usando i salti, invece, escludi il processing delle istruzioni fino all'etichetta di salto.

 

un timer <- se non ho il timer

spb A000 <- salto all'etichetta A000

 

// ->

istruzioni

// <-

 

A000: proseguimento programma

 

Questo dice che se non hai il timer, salti all'etichetta A000, tralasciando il processing di tutte le istruzioni riprendendo a processare dall'etichetta A000:

Condividi questa discussione


Link discussione
Condividi su altri siti

grazie :)

 

quindi in questo modo potrei mettere p.e. 10 timer sfasati di un secondo (t1 = 10s, t2 = 9s, e così via) e farli partire contemporaneamente e finire in tempi diversi...

 

ultima domanda: prima dell'avvio del timer meglio usare un bool per controllarne lo stato e saltare (per evitare riavvi al ciclo successivo)?

Oppure viene già fatto in automatico? (p.e. dal ciclo 2 in poi, controlla lo stato e se ancora attivo passa alla istruzione successiva)

 

grazie ancora a tutti

Condividi questa discussione


Link discussione
Condividi su altri siti

Un PLC passa SEMPRE alla istruzione successiva.

Un PLC parte dalla prima istruzione e le esegue tutte fino all'ultima, per poi ripartire dalla prima.

Se c'è un timer, il PLC controlla se il tempo è scaduto o meno, ma non si ferma sull'istruzione del timer.

L'unico modo per non far completare l'elaborazione di tutte le istruzioni è con dei salti all'indietro, o con dei cicli (LOOP, FOR-NEXT) che non terminano mai.

Una situazione del genere nel controllo di un impianto sarebbe disastrosa. Proprio per questo nei PLC esiste un controllo interno, chiamato watchdog, che causa l'arresto della CPU (con conseguente azzeramento di tutte le uscite) se il tempo di ciclo è troppo lungo.

Condividi questa discussione


Link discussione
Condividi su altri siti

Grazie mille, sei stato chiarissimo ;)

Condividi questa discussione


Link discussione
Condividi su altri siti

Dalla tua domanda mi sorge il dubbio che tu abbia avuto a che fare con la programmazione dei microprocessori :huh:, dove l'istruzione Delay "Pausa" blocca (inchioda) l'esecuzione del programma in quel punto fino al termine del tempo  preimpostato. 

Nel PLC non è così come ti è stato già spiegato.

Il timer continua a "correre" fino allo scadere del tempo preimpostato, in modo del tutto indipendente (o quasi) dal resto del programma o dagli altri eventuali timer presenti all'interno del programma.

Il tempo di ciclo influenza però l'esecuzione delle istruzioni associate al timer.

Mi spiego meglio.

Se il timer finisce di "contare" immediatamente dopo che è avvenuto la lettura della libreria timer, e l'operazione di confronto è ancora "false",  prima che vengano eseguite le istruzioni ad esse associate, bisognerà attendere la successiva scansione, tranne se non si associa ad esso un evento di interrupt.

Condividi questa discussione


Link discussione
Condividi su altri siti

Ciao grazie e scusa per il ritardo ma ero via :)

 

No in realtà vengo proprio da un altro mondo di programmazione (android, pc e web) quindi devo ancora chiarirmi concetti come tempo ciclo, contatori veloci, ecc 

 

Come dicevo sono moolto alle prime armi, mi sto leggendo le guide siemens ma a volte non sono chiarissime.

Spesso trattano banalità per pagine e pagine e dedicano paragrafino di 2 righe per funzioni secondo me più importanti. Che lo facciano per spingere i corsi? :whistling:

(o forse google con il suo sito developer per android mi ha abituato troppo bene :))

 

Quote

Se il timer finisce di "contare" immediatamente dopo che è avvenuto la lettura della libreria timer, e l'operazione di confronto è ancora "false",  prima che vengano eseguite le istruzioni ad esse associate, bisognerà attendere la successiva scansione, tranne se non si associa ad esso un evento di interrupt.

 

In pratica se non ho capito male, il PLC e il programma che ho caricato si accorge che il timer ha finito solo al ciclo successivo. Giusto?

 

Grazie ancora

 

Ciao

Condividi questa discussione


Link discussione
Condividi su altri siti

Si certamente, ma questo lo avresti anche con altri sistemi operativi o anche in assenza di sistema operativo. Le istruzioni son sempre eseguite in sequenza, l'unico modo di cambiare la sequenza è il servizio di un evento legato ad interrupt.

Condividi questa discussione


Link discussione
Condividi su altri siti

Scusate ho visto adesso questa discussione e vorrei sapere gentilmente anche io,

Se con Plc S7-300 con un OB1 creo una chiamata ad un Fc con all'interno un timer con ritardo di 80 secondi, il Plc attende che il timer sia a True per uscire dal blocco Fc o ritorna direttamente nell OB1 per proseguire la fine del ciclo?

Spero di essermi spiegato!!!!?!!

Condividi questa discussione


Link discussione
Condividi su altri siti

Grazie mille

Condividi questa discussione


Link discussione
Condividi su altri siti

Se aspettasse 80 secondi fermo li nella FC ad aspettare il timer, sarebbe un guaio molto grosso.

Se questo accadesse, per 80 secondi, il PLC ignorerebbe tutto ciò che gli accade  in tutti gli ingressi, e manterrebbe congelato tutte le uscite nello stato in cui sono, insomma sarebbe gran casino.

Gli OB con tutti i relativi richiami alle FC, vengono processati dal PLC in continuazione, (chiaramente solo se è in RUN), tantissime volte al secondo.

Se ad esempio il tempo di ciclo fosse di 10 mS, che vorrebbe dire che il PLC impiega 10 mS per eseguire tutte le istruzioni del progetto, ogni 10 mS passa dalla FC a controllare se in timer ha superato il tempo impostato e quando questo accade, imposta a 1 il bit di uscita.

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti
Quote

il Plc attende che il timer sia a True per uscire dal blocco Fc

 

Queste cose succedono solo se si usano timer come i delay di arduino, che sono bloccanti.

Le apparecchiature serie hanno librerie di temporizzatori non bloccanti. La temporizzazione evolve per suo conto, ciclicamente il programma testa se il timer è scaduto e, quando il timer è scaduto, effettua le operazioni previste.

Condividi questa discussione


Link discussione
Condividi su altri siti

Anche in alcuni robot industriali (penso ai Fanuc) il programma viene arrestato durante la temporizzazione, Ogni riga di programma viene eseguita quando la precedente è stata conclusa. Infatti è possibile eseguire i programmi a step: una riga alla volta. Con i Siemens è impossibile.

Condividi questa discussione


Link discussione
Condividi su altri siti
Quote

Anche in alcuni robot industriali (penso ai Fanuc) il programma viene arrestato durante la temporizzazione, Ogni riga di programma viene eseguita quando la precedente è stata conclusa. Infatti è possibile eseguire i programmi a step: una riga alla volta. Con i Siemens è impossibile.

 

Confermo, lo stesso avviene con robot Mitsubishi. In questi casi però, credo che la programmazione a step sia voluta per semplificare la programmazione, non per una limitazione come nel caso di Arduino.

Effettivamente è una bella comodità dettare un movimento e non dover scrivere niente per sincerarsi che sia eseguito, ma se si deve eseguire un'altra operazione in parallelo(esempio stupido:far lampeggiare una spia)non è cosi facile come potrebbe sembrare

Condividi questa discussione


Link discussione
Condividi su altri siti
Quote

Infatti è possibile eseguire i programmi a step: una riga alla volta. Con i Siemens è impossibile.

E anche con tutti gli altri PLC! (ad eccezione di un vecchio SAIA che aveva mi sembra di ricordare 16 blocchi di programma paralleli, funzionava su tutto un altro concetto di programmazione, nel blocco 1 per esempio potevi inserire i passi della macchina e c'erano delle istruzioni dove il programma si fermava ad aspettare p.es. che un finecorsa si chiudesse, nel frattempo il plc continuava a elaborare gli altri 15 blocchi, la stesura dei passi del ciclo macchina era molto veloce da fare, era come scrivere il flow-chart del ciclo).

 

Anche se ti hanno già scritto tutto i colleghi, ti faccio un esempio anch'io:

Il processore elabora ciclicamente tutte le istruzioni di OB1, se in OB1 ci sono richiami di altri blocchi, entra nei blocchi, elabora tutto, e ritorna a OB1 nell'istruzione successiva, tutto è sequenziale (a meno che tu non ci metta dei salti), alla fine di OB1 ha eseguito un ciclo completo (in una manciata di ms, puoi vederli nella variabile OB1_PREV_CYCLE o in stato dell'unità), dopodichè ritorna alla prima istruzione di OB1 e ripete tutto quanto (in realtà ci sono anche altri tempi morti, p.es. va a leggere gli ingressi prima di OB1 e va a scrivere le uscite dopo il BE di OB1).

Se programmi in AWL capisci bene come viene interpretata ogni istruzione (per un timer basta una istruzione KOP ma servono 3 o più istruzioni AWL):

      U     M      0.0
      L     S5T#3M20S
      SE    T      1
      U     T      1
      R     A      0.1
      S     A      0.2

L'istruzione del timer viene elaborata come qualsiasi altra istruzione in pochi ns, p.es. l'istruzione SE T1 (con le condizioni TRUE di RLC) fa partire T1, poi il timer continua da solo (e non mangia t.ciclo perchè lavora in real-time in maniera indipendente), l'istruzione successiva U T1 interroga il timer e in base al valore di conteggio setta o resetta l'RLC che sarà usato per influenzare le istruzioni successive...

 

Oggi mi va di sparare qualche c... quindi ti scrivo un esempio bizzarro ma che dovrebbe rendere l'idea:

Fai finta che tu sei la CPU, OB1 è un corridoio con 2 porte che accedono ad altrettante stanze (i blocchi), FC1 è la prima stanza, FC2 è la seconda stanza...

Tu entri all'inizio del corridoio, esegui qualche operazione (p.es. se fa freddo alzi il termostato :P)

Poi incontri la prima porta, entri nella stanza FC1, guardi la lista delle cose da fare, le esegui ed esci dalla porta

Prosegui lungo OB1, trovi delle istruzioni appese al muro e mano a mano le esegui...

Poi incontri la seconda porta, entri nella stanza FC2, guardi la lista delle cose da fare, ed inizi ad eseguirle, ma la stanza è una cucina e una delle istruzioni ti dice "cuoci gli spaghetti per 7 minuti", tu butti gli spaghetti nell'acqua e imposti il tempo (L S5T#7M) nella rotella del timer da cucina (SE T 1), non puoi stare fermo qui, hai altre mille cose da fare, quindi esci dalla stanza!!!

Prosegui lungo OB1, ma il corridoio è finito, tu esci all'esterno e ritorni all'inizio (già che ci sei durante il ritorno fai qualcos'altro, p.es. annaffi i fiori e guardi se è arrivata posta:roflmao:)

Rientri all'inizio e riesegui le operazioni che mano a mano incontri, quando ritorni in FC2 dai una occhiata veloce al timer (U T1) ma non è ancora arrivato a 0, quindi esci dalla stanza e ripeti tutto quanto...

Dopo un pò di volte che sei rientrato in FC2 trovi il timer a 0 (U T1 = true) e quindi spegni il gas (R A0.1) e scoli la pasta (S A0.2).

 

Dopo questa spiegazione un po umoristica spero di averti chiarito le idee, o almeno averti strappato un sorriso :)

 

 

 

 

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti
Quote

Oggi mi va di sparare qualche c... quindi ti scrivo un esempio bizzarro ma che dovrebbe rendere l'idea:

Fai finta che tu sei la CPU, OB1 è un corridoio con 2 porte che accedono ad altrettante stanze (i blocchi), FC1 è la prima stanza, FC2 è la seconda stanza...

Tu entri all'inizio del corridoio, esegui qualche operazione (p.es. se fa freddo alzi il termostato :P)

Poi incontri la prima porta, entri nella stanza FC1, guardi la lista delle cose da fare, le esegui ed esci dalla porta

Prosegui lungo OB1, trovi delle istruzioni appese al muro e mano a mano le esegui...

Poi incontri la seconda porta, entri nella stanza FC2, guardi la lista delle cose da fare, ed inizi ad eseguirle, ma la stanza è una cucina e una delle istruzioni ti dice "cuoci gli spaghetti per 7 minuti", tu butti gli spaghetti nell'acqua e imposti il tempo (L S5T#7M) nella rotella del timer da cucina (SE T 1), non puoi stare fermo qui, hai altre mille cose da fare, quindi esci dalla stanza!!!

Prosegui lungo OB1, ma il corridoio è finito, tu esci all'esterno e ritorni all'inizio (già che ci sei durante il ritorno fai qualcos'altro, p.es. annaffi i fiori e guardi se è arrivata posta:roflmao:)

Rientri all'inizio e riesegui le operazioni che mano a mano incontri, quando ritorni in FC2 dai una occhiata veloce al timer (U T1) ma non è ancora arrivato a 0, quindi esci dalla stanza e ripeti tutto quanto...

Dopo un pò di volte che sei rientrato in FC2 trovi il timer a 0 (U T1 = true) e quindi spegni il gas (R A0.1) e scoli la pasta (S A0.2).

 

Dopo questa spiegazione un po umoristica spero di averti chiarito le idee, o almeno averti strappato un sorriso :)

 

Dovrebbero farti presidente del consiglio secondo me:clap:

Condividi questa discussione


Link discussione
Condividi su altri siti
Quote

Dovrebbero farti presidente del consiglio secondo me:clap:

:P:lol::smile:

Condividi questa discussione


Link discussione
Condividi su altri siti

Complimenti JumpMan

 

ma se nella prima stanza c'è la donna che ti aspetta che fai? :roflmao::roflmao:

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti

Il tempo di ciclo si allunga e rischi di essere azzannato dal watch-dog :roflmao:

 

Condividi questa discussione


Link discussione
Condividi su altri siti

 

Quote

Il tempo di ciclo si allunga e rischi di essere azzannato dal watch-dog :roflmao:

 

:thumb_yello:   :worthy:

Condividi questa discussione


Link discussione
Condividi su altri siti

Registrati o accedi per inserire messaggi

Devi essere un utente registrato per lasciare un messaggio. La registrazione è GRATUITA.

Crea un account

Iscriviti alla nostra comunità. È facile!


Registra un nuovo account

Connettiti

Hai già un account? Connettiti qui


Connettiti adesso