Vai al contenuto
PLC Forum


lettura di un plc


Alessio Casoli

Messaggi consigliati

Alessio Casoli

Ciao a tutti sono un utente nuovo in questo forum mi chiamo AlePre (Nickname)  e sono poco esperto di plc, volevo chiedervi un mio enorme dubbio che mi frulla nella testa, ho iniziato da poco la mia avventura col plc (causa lavoro) e mi chiedevo come un plc esegue una lettura del suo programma. Fa una scansione degli ingressi, li legge, elabora e poi legge le uscite giusto? Ma mi chiedevo ma se nel frattempo che lui legge un ingresso cambia di stato cosa succede?? Un altro mio enorme dubbio è il blocchetto FILL nell'S7 300 questo blocchetto è in grado di riempire un blocco dati e forse anche questo l'ho capito, ma nell'ambito dove sto lavorando il blocchetto FILL è stato utilizzato per azzerare una db di comandi, che poi gli stessi comandi tirano su delle uscite digitali (valvole) , mi chiedevo ma se io azzero una db di comandi e un ingresso di questa stessa db viene messo a 1, tira su l'uscita? Se si rientra nella FC dove viene gestito il FILL lo dovrebbe rimettere a 0 perché azzera la db di comandi e quindi come fa a funzionare questo "ciclo" se con il fill continuo ad azzerare la db dei comandi?

Spero sia riuscito a spiegarmi scusate per la mia terribile ignoranza.

Vi ringrazio in anticipo

p.s. il ciclo funziona alla perfezione quindi sono io che interpretando male le cose

Link al commento
Condividi su altri siti


domanda 1: il plc lavora ciclicamente. Tralasciando i controlli di sistema, gli ob a tempo ed altre particolarità si può riassumere così

1 leggo gli ingressi e faccio una specie di fotocopia che si chiama IPI (immagine di processo degli ingressi)

2 elabora OB1 dall'alto verso il basso, quando viene interrogato un ingresso in realtà viene controllato che cosa c'è scritto nell'IPI. Quando viene scritta un'uscita il suo stato viene scritto nell'IPU (immagine di processo delle uscite).

3 a fine elaborazione l'IPU viene inviata alle uscite fisiche le quali si accendono / spengono in funzione di quanto scritto nell'IPU stessa.

4 ricomincia da 1

 

Da questo si evince che: i cambi di stato di un ingresso che intercorrono tra una lettura dell'IPI e la successiva non hanno effetto; i cambi di stato delle uscite che avvengono durante l'elaborazione del programma non hanno effetto immediato, le uscite si accenderanno/spegneranno in base a quello che c'è scritto nell'IPU alla fine dell'elaborazione del programma.

Essendo che tutte queste operazioni vengono eseguite in pochi millisecondi, per la normale automazione è abbastanza. Se invece c'è bisogno di monitorare qualcosa con cambi più veloci ci sono speciali istruzioni PLC oppure sistemi molto veloci chiamati REALTIME.

 

Non mi sbilancio oltre, per le altre questioni lascio spazio a chi ne sa più di me.

Link al commento
Condividi su altri siti

Penso che la stessa logica sia applicabile al discorso DB.

1 azzero la db

2 scrivo nei dati della db quello che m'interessa

3 leggo i dati che ho scritto nella db e li uso per comandare memorie e/o uscite.

4 ricomincio da 1

 

Probabilmente se ti studi bene l'esecuzione del tuo programma vedrai che la sequenza è quella appena descritta. L'azzeramento si rende necessario perché i dati che scrivo nelle DB sono ritentivi (dato ritentivo= dato che resta memorizzato anche se tolgo tensione al PLC).

Te la sto spiegando grossolanamente, ma questo dovrebbe aiutarti ad entrare nell'ottica e successivamente capirai meglio i dettagli.

Link al commento
Condividi su altri siti

per sapere le variazioni degli ingressi tra una scansione di programma e un'altra esistono le istruzioni in Interrupt che controllano lo stato degli ingressi fuori dalla scansione di programma e perciò lanciano in base alla variazione dell'ingresso considerato le istruzioni desiderate quando il segnale dell'ingresso esegue il proprio fronte di variazione

Link al commento
Condividi su altri siti

Alessio Casoli

 

21 ore fa, Cialtrone scrisse:

Penso che la stessa logica sia applicabile al discorso DB.

1 azzero la db

2 scrivo nei dati della db quello che m'interessa

3 leggo i dati che ho scritto nella db e li uso per comandare memorie e/o uscite.

4 ricomincio da 1

 

Probabilmente se ti studi bene l'esecuzione del tuo programma vedrai che la sequenza è quella appena descritta. L'azzeramento si rende necessario perché i dati che scrivo nelle DB sono ritentivi (dato ritentivo= dato che resta memorizzato anche se tolgo tensione al PLC).

Te la sto spiegando grossolanamente, ma questo dovrebbe aiutarti ad entrare nell'ottica e successivamente capirai meglio i dettagli.

Perfetto adesso cercherò di leggermi il programma ed in effetti è proprio come hai descritto te, più che altro non capisco se azzerando la db e poi gli scrivi sopra e ripeti questa operazione più e più volte come può funzionare la valvola, perché se io gli continuo ad azzerare la db lei continuerebbe ad accendersi e spegnersi. non riesco a farmi entrare questo passaggio in testa perdonatemi. Comunque Grazie mille Cialtrone sei stato molto gentile a spiegarmelo

Link al commento
Condividi su altri siti

Alessio Casoli
11 ore fa, leleviola scrisse:

per sapere le variazioni degli ingressi tra una scansione di programma e un'altra esistono le istruzioni in Interrupt che controllano lo stato degli ingressi fuori dalla scansione di programma e perciò lanciano in base alla variazione dell'ingresso considerato le istruzioni desiderate quando il segnale dell'ingresso esegue il proprio fronte di variazione

ok ok penso di avere capito anche se qua usano le istruzioni PEB e PEV che penso di aver capito che sono due istruzioni che permettono di scrivere sopra un ingresso prima che finisca il suo ciclio di lettura, praticamente legge un ingresso direttamente. Credo di aver capito così correggetemi se sbaglio

Link al commento
Condividi su altri siti

interrogare gli ingressi con la P davanti (Es: L Pew 258) significa che il plc va a leggerli nel momento in cui legge queste istruzioni, anziché leggerli dall'IPI. Direi che hai capito il concetto, ma questo non riguarda in maniera specifica il discorso della scansione del programma.

Per quanto riguarda il discorso valvola gestita da una db provo a farti un esempio (lo so è un esempio stupido, ma voglio ridurlo all'osso):

 

1) L 0 (carico in memoria zero)

2) T DB100.DBW0 (trasferisco zero nella prima word della db 100, ovvero azzero tutti i bit da 0.0 a 1.7)

 

3) U E0.0 (interrogo E0.0)

4) S DB100.DBX0.0 (se E0.0 è =1 allora setto uno di quei bit che prima ho azzerato)

 

5) L DB100.DBX0.0 (Interrogo il bit)

6) = A0.0 (scrivo il valore del bit nell'uscita)

 

Le prime due istruzioni equivalgono all'operazione FILL di cui hai accenato

 

Tra i punti 2 e 3 il bit DBX0.0 è a zero, ovvero "spento", ma questo non ha effetto sull'uscita A0.0 per ora, perché non è ancora stata richiamata.

Tra i punti 4 e 5 io posso avere 1000 istruzioni che settano e resettano il bit DBX0.0, ma sull'uscita questo non ha nessun effetto, perché finché non arrivo al punto 6 la mia uscita non viene chiamata in causa.

Lo stato di DBX0.0 che avrò quando il programma arriverà alla riga 5 sarà quello che attiverà l'uscita, quindi l'unico che vale al fine di comandarla.

 

 

 

 

Link al commento
Condividi su altri siti

Alessio Casoli
13 minuti fa, Cialtrone scrisse:

interrogare gli ingressi con la P davanti (Es: L Pew 258) significa che il plc va a leggerli nel momento in cui legge queste istruzioni, anziché leggerli dall'IPI. Direi che hai capito il concetto, ma questo non riguarda in maniera specifica il discorso della scansione del programma.

Per quanto riguarda il discorso valvola gestita da una db provo a farti un esempio (lo so è un esempio stupido, ma voglio ridurlo all'osso):

 

1) L 0 (carico in memoria zero)

2) T DB100.DBW0 (trasferisco zero nella prima word della db 100, ovvero azzero tutti i bit da 0.0 a 1.7)

 

3) U E0.0 (interrogo E0.0)

4) S DB100.DBX0.0 (se E0.0 è =1 allora setto uno di quei bit che prima ho azzerato)

  

5) L DB100.DBX0.0 (Interrogo il bit)

6) = A0.0 (scrivo il valore del bit nell'uscita)

 

Le prime due istruzioni equivalgono all'operazione FILL di cui hai accenato

 

Tra i punti 2 e 3 il bit DBX0.0 è a zero, ovvero "spento", ma questo non ha effetto sull'uscita A0.0 per ora, perché non è ancora stata richiamata.

Tra i punti 4 e 5 io posso avere 1000 istruzioni che settano e resettano il bit DBX0.0, ma sull'uscita questo non ha nessun effetto, perché finché non arrivo al punto 6 la mia uscita non viene chiamata in causa.

Lo stato di DBX0.0 che avrò quando il programma arriverà alla riga 5 sarà quello che attiverà l'uscita, quindi l'unico che vale al fine di comandarla.

 

 

 

 

Siii adesso ho capito lui praticamente non lo metterà mai a 1 o a 0 prima di andarlo a scrivere nell'uscita. Lui azzera la db poi la setta a uno perché era memorizzata ad 1 visto che lui fa la scansione prima di azzerare e poi va ad interrogare e a scrivere l'uscita in base al valore che ha la sua db di comando. Sei un genio grazie non so come premiarti mi hai tolto un dubbio che andava avanti da 2 giorni hahaha hai reso felice un povero softwarista alle prime armi grazie mille Cialtrone e Grazie anche te a Leleviola 

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