Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente |
esame2019 [2024/03/01 08:17] – [Ingressi, uscite e altro] admin | esame2019 [2024/03/04 16:10] (versione attuale) – [Punto 3] admin |
---|
| |
^ nome ^ descrizione ^ parametri ^ | ^ nome ^ descrizione ^ parametri ^ |
|CTUP|contatore panetti solidi|IN=FTCP, PV=5, reset con MESC o con PA| | |CTUP|contatore panetti solidi|IN=FTCP, PV=5, reset con fronte salita di MESC o con PA| |
|CTUMAG|contatore celle magazzino|IN=AGG, PV=4 reset con PM o con PA| | |CTUMAG|contatore celle magazzino|IN=AGG, PV=4 reset con PM o con PA| |
|TONM|timer mescolatore|PT=10' (10" nel collaudo)| | |TONM|timer mescolatore|PT=10' (10" nel collaudo)| |
Encoder degli assi X e Y del traslo-elevatore: ipotizziamo di usare due HSC per encoder incrementali (conta fino a 700) impegnando 4 ingressi (2 per encoder). Il valore del conteggio è contenuto nelle variabili ID1000 e ID1008 (double int). I conteggi vengono resettati da due finecorsa (sinistra e basso). | Encoder degli assi X e Y del traslo-elevatore: ipotizziamo di usare due HSC per encoder incrementali (conta fino a 700) impegnando 4 ingressi (2 per encoder). Il valore del conteggio è contenuto nelle variabili ID1000 e ID1008 (double int). I conteggi vengono resettati da due finecorsa (sinistra e basso). |
| |
Per riempire le quattro celle il ciclo va ripetuto incrementando un contatore che indicizza i dati delle cordinate X e Y in due array. Gli array non possono essere dichiarati nella tabella delle variabili ma richiedono un blocco dati (DB1). Per esempio l'array con le quattro coordinate x si dichiara indicando ''Array[1..4] of Int'' come tipo di dati e inserendo come valori inziali i quattro valori indicati nella tabella con le coordinate. Per l'array con le coordinate y si procede allo stesso modo. Come indice per iterare tra i valori dell'array useremo un contatore (l'indice sarà ''CTUMAG.CV''). NB: bisogna fare molta attenzione a non usare un indice non compatibile con la dichiarazione dell'array (ad esempio ''x[5]'') o il PLC segnalerà un errore. | Per riempire le quattro celle il ciclo va ripetuto incrementando un contatore che indicizza i dati delle cordinate X e Y in due array. Gli array non possono essere dichiarati nella tabella delle variabili ma richiedono un blocco dati (DB1). Per esempio l'array con le quattro coordinate x si dichiara indicando ''Array[1..4] of Int'' come tipo di dati e inserendo come valori inziali i quattro valori indicati nella tabella con le coordinate moltiplicati per 100 (nella tabella ci sono i metri mentre l'encoder fornisce un impulso ogni 10mm cioè ogni centimetro). Per l'array con le coordinate y si procede allo stesso modo. Come indice per iterare tra i valori dell'array useremo un contatore (l'indice sarà ''CTUMAG.CV''). NB: bisogna fare molta attenzione a non usare un indice non compatibile con la dichiarazione dell'array (ad esempio ''x[5]'') o il PLC segnalerà un errore. |
| |
==== SFC ==== | ==== SFC ==== |
FIXME | |
| |
/* | |
| |
Tralasciamo lo schema a blocchi, che è banale, e passiamo all'algoritmo che descriviamo con un diagramma SFC. Nel diagramma non ci sono i contatori perché incrementano il loro valore con sei segnali e non con il passo attivo. | Tralasciamo lo schema a blocchi, che è banale, e passiamo all'algoritmo che descriviamo con un diagramma SFC. Nel diagramma non ci sono i contatori perché incrementano il loro valore con dei segnali e non con il passo attivo. L'algoritmo ipotizza che il composto vada preparato dopo ogni deposito in una cella del magazzino ma si poteva supporre che il preparato fosse sufficiente a riempire tutte e quattro le celle; il testo non è chiaro al riguardo. |
| |
{{::sfc_esame_2019.png?400|}} | {{::sfc_esame_2019.png?400|}} |
| |
{{ ::sfc_esame_2019.zip |sorgente SFC per draw.io}} | {{ ::sfc_esame_2019.zip |sorgente SFC per draw.io}} |
| |
| |
| |
===== Punto 2 ===== | ===== Punto 2 ===== |
| |
{{ ::esame2019plc30.zip |soluzione completa per PLC S7-1200 (serie 30)}} | {{ ::esame2019plc30.zip |soluzione completa per PLC S7-1200 (serie 30)}}((nel programma c'è un errore: le coordinate negli array sono in metri invece che in centimetri)) |
===== Punto 3 ===== | ===== Punto 3 ===== |
| |
Tenendo conto del rendimento del riduttore la potenza minima del motore è: | Tenendo conto del rendimento del riduttore la potenza minima del motore è: |
| |
`P = 337/0,75 =450W` | |
| |
Si sceglie allora un motore da mezzo chilowatt. | Si sceglie allora un motore da mezzo chilowatt. |
La soluzione non è per niente banale e viene da [[https://electronics.stackexchange.com/questions/500234/three-points-two-slopes-op-amp-conditioning-circuit/500259#500259|qui]]. | La soluzione non è per niente banale e viene da [[https://electronics.stackexchange.com/questions/500234/three-points-two-slopes-op-amp-conditioning-circuit/500259#500259|qui]]. |
| |
*/ | Il circuito richiede guadagno 16 fino a 250mV. Questo si può imporre con opportuni valori di R<sub>1</sub> e R<sub>2</sub>. Fino a questa soglia U<sub>2</sub> satura (la tensione sull'ingresso invertente è maggiore di quella sull'ingresso non invertente), il diodo risulta interdetto e il ramo con R<sub>3</sub> è interrotto. |
| |
| Quando V<sub>1</sub> supera i 250mV il guadagno richiesto è 24 (ΔV<sub>o</sub>/ΔV<sub>in</sub>) con un offeset di -2V (0.5*24=12V ma si vogliono 10V in uscita). In questo range di valori l'operazionale U<sub>2</sub> e il diodo si comportano come un buffer e ci sono 250mV costanti applicati a R<sub>3</sub>. La tensione in uscita si calcola con la sovrapposizione degli effetti considerando separatamente la sola V<sub>1</sub>, in configurazione non invertente con guadagno R<sub>1</sub>/(R<sub>2</sub> || R<sub>3</sub>), e la tensione costante di 250mV, in configurazione invertente con guadagno -R<sub>1</sub>/R<sub>3</sub>). Imponendo guadagno 24 si ottiene: |
| |
| |
| `24=1+(R1)/(R2 ∥ R3)` |
| |
| dove, sostituendo i valori di R<sub>1</sub> e R<sub>2</sub> si ottiene R<sub>3</sub> = 1,875Ω |
| |