Vai al contenuto
PLC Forum


Impulsi Temporali. - Tempo "lento"


ferentarius

Messaggi consigliati

Ciao a tutti, stavo facendo un paio di prove su tempi di apertura valvole, ritardi, ecc.

Sto notando che stamattina il tempo passa piu lentamente.

Innanzitutto definisco un impulso.

UN "Pulse_100Ms"

L S5T#100MS

SE "Tx100Ms"

U "Tx100Ms"

= "Pulse_100Ms"

poi noto che se faccio un semplice test tipo (incremento una variabile ad ogni impulso)

U "Pulse_100Ms"

SPBN aa

L MW 100

L 1

+I

T MW 100

aa: NOP 0

vedo la mia word salire di pari passo col tempo... o quasi. Infatti in 60 sec di orologio di windows, la mia MW 100 arriva piu o meno a 530, cioè 53 secondi!!!

Entrambi i pezzi di codice sono all'interno di una FC chiamata dall'OB1.

è colpa del tempo ciclo? Dite che dovrei inserire il secondo pezzo di codice all'interno di OB temporizzato e legarlo al suo tempo?

secondo voi qual è il problema del codice di sopra?

Grazie a tutti e ciao.

Link al commento
Condividi su altri siti


Tu hai realizzato un clock che genera un impulso, della durata di una scansione, ogni 100msec. Il periodo è molto breve quindi risente molto del tempo di scansione. Supponedo che la scansione duri 5Msec puoi arrivare ad un ritardo di 5msec. cioè del 5%. Il refressh del registro con il tempo che scorre avviene in modo asincrono, quindi può avvenire subito dopo l'ilstruzione "= "Pulse_100Ms" che diventra quindi ON nella scansione successiva.

Secondo me, come tu hai già ipotizzato, dovresti inserire il secondo pezzo di codice all'interno di OB temporizzato e legarlo al suo tempo.

Non so dirti quanto errore può introdurre il simulatore percenualmente. Ciao

Link al commento
Condividi su altri siti

Il clock generato con un timer sbaglia inevitabilmente del tempo di una scansione ad ogni ciclo di clock.

Per temporizzazioni più precise meglio utilizzare i merker di sistema o gli OB a tempo.

Nel caso di necessità di generazione di clock con temporizzazioni personalizzate, per non incrementare continuamente l'errore si può detrarre dal tempo di preset voluto il tempo dell'ultima scansione, che si può leggere in OB1 nella variabile locale "OB1_PREV_CYCLE".

Essendo però la base tempi minima dei comuni timer S7 di 10 ms, ci si dovrà comunque accontentare di una approssimazione.

Altro metodo potrebbe essere quello di creare una specie di timer utilizzando sempre OB1_PREV_CYCLE.

Per generare un clock, per esempio ogni 1000 ms, basta incrementare ad ogni scansione una variabile col valore di OB1_PREV_CYCLE. Quando il valore supera il preset (1000 nell'esempio) si genera il clock e si sottrae 1000 dal conteggio.

Attenzione: non si deve azzerare il conteggio, ma sottrarre dal conteggio il valore di preset, in modo da non perdere eventuali millisecondi eccedenti.

Link al commento
Condividi su altri siti

bene grazie ad entrambi, ora la situazione mi è molto piu chiara.

non essendo tempi cosi critici da dover essere stra precisi credo che li possa lasciare anche cosi, magari però cercando di non usare (come invece ho fatto nel mio esemio) una base di tempo cosi piccola (100ms) perchè come dite anche voi l'errore è sicuramente maggiore rispetto a prendere una base di tempi di 1sec o di 1 min.

Quando avrò bisogno di tempi piu precisi credo che opterò per l'opzione OB temporizzati. E se non mi soddisferà neanche questo passerò a provare l'idea di Batta (che però la vedo un pò piu complessa).

Grazie di nuovo a tutti.

Bye.

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