Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
tecniche
AeronauticaAgricoltura agrariaArchitetturaAutomobileCostruzione
Demografia urbanisticaElettronica elettricitaForensicsIngegneria tecnicoVela


AppuntiMania.com » Tecniche » Appunti di Ingegneria tecnico » Tesina Realizzazione di un dispositivo per il controllo di un impianto

Tesina Realizzazione di un dispositivo per il controllo di un impianto




Visite: 1657Gradito:apreciate stela [ Medio appunti ]
Leggi anche appunti:

Prove con il carburatore elettronico comandato in retroazione


Prove con il carburatore elettronico comandato in retroazione 1

1855 Henry Bessemer brevetta il metodo per fabbricare l'acciaio


1855 Henry Bessemer brevetta il metodo per fabbricare l'acciaio      

Dalla manifattura alla fabbrica


DALLA MANIFATTURA ALLA FABBRICA L'affermazione del lavoro in fabbrica ha
immagine di categoria

Scarica gratis Tesina Realizzazione di un dispositivo per il controllo di un impianto

Realizzazione di un dispositivo per il controllo di un impianto

1. Specifiche di progetto


Il progetto che si intende realizzare è descritto dalle seguenti specifiche.

Si consideri lo scenario costituito da due sistemi . Un primo sistema P collegato a una cisterna contenente del liquido e che ne controlla il livello. Il sistema P mantiene in un'area privata le seguenti informazioni sullo stato della cisterna: temperatura, pressione e livello del liquido. Un secondo sistema C può controllare il sistema P inviando ad esso comandi, e richiedendo tutte le informazioni di stato della cisterna di cui P ha piena visibilità. C e P sono connessi per tramite di un porto parallelo PIA e uno seriale UART. C può inviare comandi a P interfacciandosi attraverso La PIA (i due porti della pia di C sono configurati in uscita, mente i due corrispondenti porti della pia di P sono in ingresso). C può leggere le informazioni sullo stato della cisterna interfacciandosi a P attraverso la seriale UART su cui è trasferito l'intero blocco di stato di 256 byte. Al sistema C è collegato un TERMINALE con funzione di console di monitoraggio e controllo, dal quale si può:


- Inviare comandi al sistema P

- Visualizzare lo stato della cisterna fornito da P


Figura - Schema sistema di controllo


Il record contenente le informazioni sullo stato della cisterna, di dimensione di 256 byte, è contenuto in un buffer così strutturato:

Figura - Record di stato della cisterna


Il sistema P ciclicamente trasferisce l'intero record dal buffer alla memoria utilizzando un dispositivo DMA. Il DMA deve essere programmato in modo da trasferire il buffer M1 nella memoria M2 ogni secondo. Il sistema C richiede l'intero record di stato (memorizzato nella memoria M2 di P) a P attraverso la UART, utilizzando un protocollo di handshaking. Lo scambio dati tra i sistemi P e C deve essere sincronizzato per tramite di un protocollo di handshacking realizzato mediante i segnali RTS e CTS della UART. Si deve verificare che il trasferimento tramite DMA da M1 e M2 non operi in condizione di sovrapposizione con l'operazione di trasmissione, tramite la UART, da P verso C; tali trasmissioni devono avvenire infatti in sequenza temporale. A tal fine si deve utilizzare un semaforo di sincronizzazione (impiego codice test and set). La tempificazione di tutte le operazioni da svolgere va effettuata mediante un dispositivo timer opportunamente configurato.


I comandi che possono essere inviati da C a P sono i seguenti:



Codifica

Comandi


Inserisci Liquido


Preleva liquido


Riempi la cisterna a metà


Svuota la cisterna


Riempi la cisterna

S (s Maiuscola)

Visualizza lo stato della cisterna


Figura - Codifica dei comandi


Tali comandi operano sull'informazione contenuta nello stato della cisterna "livello del liquido" che è codificata su 4 byte. L'intero record contenente lo stato della cisterna ha dimensione di 256 byte. Le operazioni base, "inserisci liquido" e "preleva liquido" agiscono per valori discreti, se s è il valore del livello del liquido, si ha:



Figura - Modifica del livello del liquido



Tali operazioni prevedono controlli sullo stato della cisterna, non si può inserire liquido se la cisterna è piena e non si può prelevare liquido se la cisterna è vuota.

2. Configurazione ASIM del sistema


In ASIM è stato prodotto un file di configurazione il cui schema è riportato di seguito:



Figura - Configurazione ASIM del sistema



Il file di configurazione contiene le seguenti informazioni:


CHIP Name: MEM-A

Type: MMU/BUS. Identif: 01. BUS: 0000.

Addres 1: 00008000.  Address 2: 00000000.

Com1: 0000. Com2: 0010. Com3: 0008. Com4: 0000.


Figura - Configurazione della memoria


MEM-A rappresenta la memoria del sistema C ed è connessa al BUS che presenta l'id 01 (pari all'identificativo della memoria stessa). Ponendo Com2 a 0010, equivale ad allocare 10Kbyte di RAM, mentre porre Com3 a 0008 equivale ad allocare 8 Kbyte di ROM.

Il primo byte di RAM è allocato all'indirizzo 8000, mentre il primo byte di ROM è allocato all'indirizzo 0000.


CHIP Name: M68000

Type: CPU.    Identif: 02. BUS: 0001.

Addres 1: 00009000.  Address 2: 00009200.

Com1: 0000. Com2: 0000. Com3: 0000. Com4: 0000.


Figura - Configurazione del processore



M68000 rappresenta la CPU ed in Address1 è stato inserito l'indirizzo da cui ha inizio lo stack utente, mentre in Address 2 è stato inserito l'indirizzo a partire dal quale ha inizio lo stack supervisore.


CHIP Name: I8251USART

Type: Device.             Identif: 03. BUS: 0001.

Addres 1: 00002004.  Address 2: 00002005.

Com1: 0002. Com2: 0000. Com3: 0000. Com4: 0006.



Figura - Schema della USART



Il dispositivo USART (Universal Synchronous-asynchronous Receiver Transmitter) consente di realizzare una connessione seriale fra dispositivi (ad es. il collegamento seriale di un sistema verso un dispositivo periferico quale un terminale, un modem, una stampante, etc., per effettuare un trasferimento di dati) secondo un protocollo sincrono o asincrono.

È necessario notare che in questo caso è stato inserito come dispositivo per la gestione delle interruzioni il processore 0002. Ponendo invece Com4 pari a 0006 si sta connettendo questa USART con identificativo pari a 03 con la USART avente identificativo pari a 06.



CHIP Name: I8251USART

Type: Device.             Identif: 06. BUS: 0004.

Addres 1: 00002004.  Address 2: 00002005.

Com1: 0005. Com2: 0003. Com3: 0000. Com4: 0003.


Le considerazioni introdotte per l'USART precedente sono del tutto analoghe anche per questo dispositivo: è necessario solo notare che in questo caso è stato inserito come dispositivo per la gestione delle interruzioni il processore 0005. Inserendo un valore pari a 0003 alla porta Com2 si fa in modo che la USART notifichi tramite un'interruzione sulla linea 3 del processore l'avvenuta ricezione di un carattere. Ponendo infine Com4 pari a 0003 si sta connettendo questa USART con identificativo pari a 06 con la USART avente identificativo pari a 03.


CHIP Name: M2

Type: MMU/BUS. Identif: 04. BUS: 0000.

Addres 1: 00008000.  Address 2: 00000000.

Com1: 000D. Com2: 0010. Com3: 0008. Com4: 0000.


M2 rappresenta la memoria del sistema P ed è connessa al BUS che presenta l'id 04 (pari all'identificativo della memoria stessa). Ponendo Com2 a 0010, equivale ad allocare 10Kbyte di RAM, mentre porre Com3 a 0008 equivale ad allocare 8 Kbyte di ROM.

Il primo byte di RAM è allocato all'indirizzo 8000, mentre il primo byte di ROM è allocato all'indirizzo 0000.

Le considerazioni, ovviamente, sono del tutto analoghe a quelle della memoria MEM-A


CHIP Name: M68000

Type: CPU.    Identif: 05. BUS: 0004.

Addres 1: 00009000.  Address 2: 00009200.

Com1: 0000. Com2: 0000. Com3: 0000. Com4: 0000.


M68000 rappresenta la CPU ed in Address1 è stato inserito l'indirizzo da cui ha inizio lo stack utente, mentre in Address 2 è stato inserito l'indirizzo a partire dal quale ha inizio lo stack supervisore.


CHIP Name: TERMINAL

Type: Device.             Identif: 07. BUS: 0001.

Addres 1: 00002000.  Address 2: 00002001.

Com1: 0002. Com2: 0001. Com3: 0002. Com4: 0000.



Figura - Schema del terminale



ASIM mette a disposizione, come dispositivo base per realizzare l'I/O da e per un sistema, un dispositivo da utilizzare, appunto, come terminale video- tastiera denominato TERMINAL.

Nel nostro caso tale dispositivo è configurato come segue: Alla porta Com1 abbiamo connesso la CPU che si occupa della gestione delle interruzioni, alla porta Com2 abbiamo identificato con 0001 la linea 1 del processore per gestire l'interruzione relativa alla pressione del tasto enter, mentre per l'interruzione relativa al buffer full abbiamo utilizzato la linea 2, servendoci della porta Com3.


CHIP Name: M6821PIA

Type: Device.             Identif: 09. BUS: 0004.

Addres 1: 00002010.  Address 2: 00002013.

Com1: 0005. Com2: 0005. Com3: 0000. Com4: 0208.



Figura - Configurazione della PIA



Il dispositivo PIA (Periferal Interface Adapter) è un dispositivo parallelo, a parallelismo 8 bit, facente parte della famiglia dei processori Motorola 68xx. Il dispositivo contiene due sezioni quasi identiche, ciascuna dotata di 8 bit dati configurabili, anche singolarmente, come linee di ingresso o di uscita. Ciascun porto può, quindi, funzionare in ingresso, uscita o in configurazione mista (in-out). L'utilizzo tipico previsto è quello di controllore di una periferica con comunicazione full duplex e con possibilità di controllare le operazioni di I/O mediante interruzioni e schemi di handshaking preconfigurati. Due coppie di linee di controllo sono utilizzate per gestire l'handshaking per la sincronizzazione della periferica connessa al dispositivo. Di queste, CA1 e CB1, in ingresso al dispositivo, acquisiscono eventi dalle periferiche e controllano la linea di interruzione IRQA e IRQB verso il processore; le altre due linee, CA2 e CB2, possono essere programmate per operare come segnali in ingresso (in tal caso si comportano in modo analogo alla CA1 e CB1) sia in uscita per implementare forme di handshaking. Il controllo delle operazioni realizzabili con le due linee è programmato, come di seguito mostrato, mediante i campi del registro di controllo.

Nel nostro caso è stata posta a 0005 la Com1 per identificare il processore come dispositivo per la gestione delle interruzioni. La Com2, che si occupa della gestione dell'interrupt IRQA è stata posta a 0005 per indicare che in questo caso il dispositivo fa uso della linea 5 di interruzione. La porta Com4 è stata posta a 0208 per indicare con 08 l'identificativo della PIA con cui deve comunicare e 02 per indicare che si intende connettere la CB2 del dispotivo con la CA1 del dispositivo periferico e la CA2 del dispositivo con la CB1 del dispositivo periferico: uno schema delle possibili connessioni è riportato in

Figura 11



Figura - Possibili connessioni della PIA



CHIP Name: M6821PIA

Type: Device.             Identif: 08. BUS: 0001.

Addres 1: 00002010.  Address 2: 00002013.

Com1: 0002. Com2: 0000. Com3: 0000. Com4: 0209.


Le considerazioni appena introdotte sono del tutto analoghe per questa PIA che presenta l'identificativo pari a 08: in questo caso non risulta più necessario specificare la linea di interruzione relativa a IRQA in quanto i comandi sono catturati tramite il terminale e le sue apposite interruzioni: l'unica PIA che quindi deve notificare al processore che intende eseguire un comando è proprio l'altra PIA ovvero quella che presenta l'identificativo pari a 09. Questo tipo di PIA non ha bisogno di inviare interruzioni al processore.


CHIP Name: I8237DMA

Type: Device.             Identif: 0A. BUS: 0004.

Addres 1: 00002020.  Address 2: 0000202F.

Com1: 0005. Com2: 0004. Com3: 0005. Com4: 0000.



Figura - Schema del DMA



Il dispositivo Direct Memory Access (DMA) è un dispositivo in grado di operare da master di bus, in grado di gestire cicli bus di trasferimento dati ( in sostituzione del processore). Esso viene utilizzato per aumentare le prestazioni di un sistema di calcolo gestendo, in sostituzione del processore ma in modo più efficiente, le operazioni di trasferimento, consentendo, nel contempo, al processore di operare in parallelo. La maggiore efficienza è dovuta al fatto che mentre un processore per eseguire un trasferimento deve eseguire un'istruzione (ad es. un codice di move) attraverso una fase di fetch ed execute, un DMA gestisce il trasferimento utilizzando Hw specializzato appositamente progettato per realizzare tale unica funzione.

Nel nostro caso è stato scelto come CPU master per il trasferimento e come dispositivo per la gestione delle interruzioni il processore con identificativo 0005. La linea di interruzione è stata posta a 0004 e quindi rappresenta la linea 4 di interruzione.


CHIP Name: 1TO4INTGEN

Type: Device.             Identif: 0B. BUS: 0004.

Addres 1: 00002040.  Address 2: 00002053.

Com1: 0005. Com2: 0000. Com3: 0000. Com4: 0000.


Figura - Configurazione 1TO4Intgen


Il dispositivo 1to4INTGEN è un generatore di interruzioni verso i dispositivi in grado di gestirli (in ASIM processori e PIC). Esso è composto da 5 generatori: un generatore di interruzioni programmabile e quattro timer ed è visto come 20 ($13+1) locazioni consecutive di memoria. Tale dispositivo è impiegato per generare interruzioni ad intervalli di tempo prefissati (mediante la programmazione dei parametri dei timer) o per generare, a programma, i segnali di interruzione verso lo specifico oggetto gestore di interruzioni.

Nel nostro caso è sufficiente un solo timer che ogni secondo generi un'interruzione che attiva il trasferimento del blocco di 256 Byte dal buffer M1 alla memoria M2: tale trasferimento è effettuato tramite l'ausilio del DMA.


CHIP Name: M1

Type: MMU/BUS. Identif: 0D. BUS: 0000.

Addres 1: 00003000.  Address 2: 00000000.

Com1: 0004. Com2: 0001. Com3: 0000. Com4: 0000.


M1 rappresenta il buffer di 256 Byte che viene usato dalla cisterna per inserire le informazioni relative al proprio stato. Nel nostro caso abbiamo allocato un solo Kbyte per inserire tutte le informazioni necessarie alla gestione dello stato della cisterna.


Al fine di avere maggiori dettagli circa la disposizione dei vari componenti all'interno del file di configurazione ed esaminare la struttura delle interruzioni, si propone il seguente schema in cui sono indicati anche i vari vettori di interruzione.



Figura - Schema di dettaglio della configurazione


3. Il sistema C in dettaglio


Si analizzano di seguito le varie porzioni di codice motivando di volta in volta le varie scelte che sono state effettuate.




Le istruzioni sono inserite all'interno della memoria a partire dall'indirizzo $8200 della RAM tramite l'istruzione ORG; vengono successivamente definite una serie di valori che verranno successivamente utilizzati.





Innanzitutto si è deciso di configurare il dispositivo PIA come segue: quello che si intendeva realizzare era un sistema che facesse uso della PIA per poter inviare i comandi.

Il dispositivo PIA (Periferal Interface Adapter) è un dispositivo parallelo, a parallelismo 8 bit, facente parte della famiglia dei processori Motorola 68xx. Il dispositivo contiene due sezioni quasi identiche, ciascuna dotata di 8 bit dati configurabili, anche singolarmente, come linee di ingresso o di uscita. Ciascun porto può, quindi, funzionare in ingresso, uscita o in configurazione mista (in-out). L'utilizzo tipico previsto è quello di controllore di una periferica con comunicazione full duplex e con possibilità di controllare le operazioni di I/O mediante interruzioni e schemi di handshaking preconfigurati.

Due coppie di linee di controllo sono utilizzate per gestire l'handshaking per la sincronizzazione della periferica connessa al dispositivo. Di queste, CA1 e CB1, in ingresso al dispositivo, acquisiscono eventi dalle periferiche e controllano la linea di interruzione IRQA e IRQB verso il processore; le altre due linee, CA2 e CB2, possono essere programmate per operare come segnali in ingresso (in tal caso si comportano in modo analogo alla CA1 e CB1) sia in uscita per implementare forme di handshaking. Il controllo delle operazioni realizzabili con le due linee è programmato mediante i campi del registro di controllo; si ricorda che nella configurazione del sistema che si intende realizzare si è connessa la CA2 con la CB1 e la CA1 è connessa con la CB2. Sia CA1 che CB1 sono sempre di ingresso al dispositivo.



Figura - Configurazione porti PIA



Il dispositivo PIA simulato in ASIM è derivato da quello commerciale MC6821 di cui ne conserva quasi tutte le caratteristiche funzionali e architetturali. In particolare, la struttura dei sei registri interni (3 per la sezione A e 3 per quella B) ad otto bit è la seguente:

. due registri per il trasferimento dei dati da e verso la periferica (PRA e PRB)

. due registri di controllo/stato (CRA e CRB)

. due registri, DRA e DRB, per il controllo della direzione dei dati (in input o in output)


Poiché il dispositivo impiega per la selezione dei registri interni solo quattro indirizzi, per accedere a tali registri è utilizzato il meccanismo di indirizzamento indiretto per tramite di campi del registro controllo che vanno opportunamente settati prima dell'accesso.


Figura - Indirizzamento dei registri interni



Per quanto concerne invece la USART riportiamo il seguente codice:




Uno dei requisiti del progetto consiste nel fare in modo che le due USART funzionino utilizzando una connessione asincrona e che utilizzino il protocollo di handshaking. Il modo di funzionamento asincrono è realizzato ponendo ad 1 l'ultimo bit del registro mode, che rappresenta il registro che per primo si accede dopo che il dispositivo è stato acceso.

Per quanto concerne invece l'handshake dobbiamo intervenire sul registro CNTRL e attivare sia il DTR che lo RTS. La seguente figura mostra una connessione piena tra i due dispositivi utilizzati.



Figura - Schema delle connessioni della USART



Lo schema dei segnali in gioco, invece, è il seguente:



Figura - Segnali scambiati tra le USART



Se la connessione fosse stata parziale avremmo avuto una situazione, come quella riportata nella seguente figura.



Figura - Connessione parziale



Nel nostro caso abbiamo chiaramente utilizzato una connessione completa piuttosto che una connessione parziale, dal momento che dovevamo fare uso dell'handshaking, servendoci quindi degli appositi segnali, e interfacciare due dispositivi gemelli l'uno con l'altro.


Per quanto concerne, infine, il terminale si è deciso di configurare tale dispositivo come segue:



Una volta che tutti i dispositivo sono stati inizializzati, creiamo un ciclo infinito all'interno del quale il processore, in polling, verifica se è stato trasmesso un carattere all'interno della seriale. Questo tipo di tecnica è stato utilizzato in quanto il sistema C, a parte che inviare comandi, deve principalmente occuparsi della visualizzazione dello stato che consiste nell'output a terminale di 256 caratteri. Dal momento che l'invio di un solo carattere di comando impegna una porzione di tempo estremamente più piccola rispetto alla ricezione di 256 caratteri si è pensato di fare uso della tecnica di polling della usart piuttosto che della tecnica che prevedeva l'utilizzo delle interruzioni. Il codice è riportato di seguito.




È stata prevista la visualizzazione di un carattere speciale (#) nel caso la USART sia accorga che si è verificato qualche errore in fare di trasmissione delle informazioni.

Una volta che si riscontra la trasmissione di un carattere si provvede a visualizzare a schermo tale carattere.


Si analizzano ora le ISR relative alle uniche due interruzioni previste all'interno del sistema C: la digitazione di un tasto enter per l'invio di un carattere dal sistema C al sistema P e la gestione del riempimento totale del buffer di tastiera.




Dopo aver salvato le variabili che verranno sporcate dalla ISR si passa all'analisi del carattere che si intende trasmettere. Il carattere analizzato è solamente il primo: tutti gli altri caratteri eventualmente inseriti all'interno del buffer della tastiera verranno ignorati. Se il carattere trasmesso corrisponde ad S verrà inviato alla USART del sistema P che provvederà all'invio dello stato, altrimenti se è un carattere compreso in senso largo tra i numeri 0 e 4, si invierà tale comando alla PIA che provvederà a modificare il livello del liquido della cisterna.

Al termine della ISR, devono essere ripristinati tutti i valori dei registri utilizzati che erano stati precedentemente salvati all'interno dello stack supervisore.


Per quanto concerne, invece, l'ISR relativa al buffer full, è stata prevista semplicemente la pulizia dello schermo, in quanto si suppone un eventuale errore da parte dell'utente: quest'ultimo dovrebbe essere in grado di inviare unicamente un carattere per la visualizzazione dello stato oppure per il controllo del livello del liquido. Il codice è riportato di seguito.




Con il seguente codice si termina il listato del programma.



4. Il sistema P in dettaglio


All'interno del sistema P inseriamo la definizione delle seguenti variabili: contrariamente al caso del sistema C è necessario definire altri valori per il corretto funzionamento del sistema. L'aggiunta di questa informazioni rende maggiormente parametrico il codice scritto.





PIA e USART sono state configurate allo stesso modo del sistema C e, quindi, per brevità non verranno riportate: le considerazioni per entrambi i sistemi sono esattamente identiche.

Piuttosto è necessario analizzare il contatore che ogni secondo scatta e avvia il trasferimento tramite DMA delle informazioni.

Passiamo ora all'analisi del contatore che, come introdotto all'interno delle specifiche, dovrebbe scattare ogni secondo per consentire alla DMA di trasferire le informazioni presenti nel buffer M1 alla memoria M2.

Le frequenze che possono essere settate all'interno di un Motorola 68000 sono 6Mhz, 8MHz, 10MHz, 12.5MHz, 16,67MHz e 25MHz. Dal momento che anche utilizzando la frequenza più bassa possibile, ovvero 6 MHz, dovremmo attendere un tempo estremamente lungo prima che il contatore scatti in fase di simulazione, si è deciso di porlo per brevità a 0x2710 colpi di clock che corrispondono a 10000 colpi di clock: questo tipo di scelta ipotizza una DMA che trasmette ogni secondo avendo, in teoria, un clock con una frequenza di 10KHz. In fase di configurazione il timer scatta per la prima volta dopo 10 colpi di clock per avviare il primo trasferimento del blocco ed inizializzare la memoria M2.





Una volta che tutti i dispositivi sono stati configurati è stato inserito del codice tramite il quale il processore si pone in attesa indefinita, all'interno di un ciclo, di eventuali interruzioni.




Due interruzioni si occupano della gestione del timer. La prima scatta al termine della configurazione del timer, mentre la seconda scatta una volta che il contatore si sia azzerato.




Una volta che il contatore si è azzerato, come di consueto si salvano i registri che verranno sporcati e prima che vengono utilizzati si puliscono tramite le operazioni SUBA: si usa questa istruzione dal momento che non può essere utilizzata l'istruzione CLR.

Al termine di questa operazione si effettua una pulizia del registro D6: tale registro viene posto ad 1 se la DMA ha effettuato il trasferimento del primo blocco, mentre viene posto a zero se deve essere trasferito il primo blocco stesso.

Una volta effettuate queste operazioni si inizializza la DMA con i valori e si provvede al trasferimento del primo blocco.

È importante a questo punto analizzare il comportamento dell'interruzione che genera la DMa una volta che ha terminato l'invio di un certo blocco: il blocco può essere sia il primo che il secondo.





L'interruzione è quella relativa alla linea 4 e verifica innanzitutto se si tratta del primo blocco o del secondo ad essere stato appena trasferito: se D6 è posto a zero vuol dire che è stato trasferito il primo blocco; se invece D6 è posto ad 1 vuol dire che è stato trasferito il secondo blocco e quindi termina. Altrimenti dopo aver resettato il DMA trasla l'indirizzo di partenza del primo blocco e passa al trasferimento del secondo blocco.


È importante analizzare adesso il comportamento della USART: questo dispositivo, presente all'interno del sistema P provvede all'invio dei 256 caratteri inseriti all'interno del blocco dello stato presente nella memoria M2.




Una volta che tutti i registri siano stati opportunamente salvati e ripuliti, si verifica che il carattere ricevuto sia effettivamente uguale ad S: in realtà questo controllo potrebbe anche essere evitato, dal momento che è previsto un controllo già dal lato del sistema P, ma essendo questa solamente una simulazione è comunque opportuno prevedere dei controlli più robusti.

Una volta che sia stato accertato che il carattere corrisponde effettivamente ad S si attende che il semaforo, eventualmente impegnato dalla DMA sia libero. Questo è possibile tramite il codice operativo TAS che non appena verifica che la variabile risulta libera occupa il semaforo, impossibilitando di fatto la DMA ad aggiornare lo stato nella memoria M2 mentre la USART sta trasmettendo.

Ovviamente, una volta che sono state trasmessi tutti i 256 caratteri si provvede alla liberazione del semaforo occupato e al ripristino dei valori dei registri che sono stati sporcati dall'utilizzo della ISR.


È importante a questo punto, prima di mostrare come siano stati codificati i comandi, come siano state codificate le informazioni relative a stato pressione e temperatura all'interno del sistema.

I possibili valori dello stato vanno da 0000 (rappresentazione tramite 4 caratteri) a 1000. 1000 indica che la cisterna è piena mentre 0000 indica che la cisterna è vuota; come era intuibile.

Il terminale si occupa della visualizzazione di tutto lo stato come mostrato nella seguente Figura.


Figura - Informazioni sullo stato del sistema



Come è possibile osservare in Figura 20 tutte le informazioni rilevanti sono contenute nella memoria a partire dalla locazione $3000 impegnando 26 caratteri in totale: i restanti caratteri non sono stati utilizzati e per questo è stato posto un carattere convenzionale "*".

Dopo la visualizzazione del carattere %, sono previsti, come già accennato 4 caratteri per contenere l'informazioni circa il livello del liquido, altri 6+2(cifre prima virgola + cifre dopo virgola) caratteri per il controllo della pressione (misurata in Pascal) e altri 1+3+2(segno + cifre prima virgola + cifre dopo virgola) per il controllo della temperatura misurata in Kelvin.

Di default il valore del livello corrisponde a 0000, la pressione risulta essere pari a 0 Pascal e la temperatura è a 273,15K ovvero 0 °C.

Di seguito, invece, è riportato il codice che utilizza la PIA per la gestione dello stato.




Innanzitutto la PIA verifica il carattere che è stato inviato e, se lo riconosce invia uno specifico comando, altrimenti termina.



Il comando zero ed il comando 1 si occupano rispettivamente di aumentare di 1 il livello del liquido e di diminuire di 1 il livello dello stesso.

Partendo dalle posizioni della memoria in cui sono inseriti i 4 caratteri relativi allo stato effettuano l'operazione prescelta. Vengono in particolare effettuate delle chiamate alle subroutineADDLEVEL e REMLEVEL riportate di seguito.




Queste subroutine hanno il compito di verificare il livello del liquido e nel caso che la cisterna sia piena, impedire l'aggiunta di un nuovo livello, mentre nel caso in cui il livello sia pari a 0 impedire il prelevamento di ulteriore liquido. Chiaramente queste subroutine vanno a modificare direttamente la memoria M1: in realtà dovrebbero inviare comandi alla cisterna: attualmente, in fase di simulazione, ci si accontenta della scrittura diretta in memoria.




Il comando 2, invece, riempie la cisterna a metà: se il liquido supera 500 viene riportato a questo livello tramite la rimozione di liquido, se invece è inferiore a 500 viene inserito. Al fine di prendere quanto più velocemente possibile la decisione se inserire o aumentare il liquido, sono stati previsti una serie di controlli circa l'individuazione del livello della cisterna.

Tramite un parsing dei vari caratteri inseriti, che rappresentano appunto il livello del liquido, si cerca di capire quanto più velocemente possibile quale tipo di operazione effettuare.

Per quanto riguarda il parsing dei 4 caratteri si parte da sinistra verso destra per capire in tempi brevi se il livello sia sopra o sotto le 500 unità.



Il comando 3 ed il comando 4, infine, provvedono rispettivamente a svuotare la cisterna e a riempire la cisterna, utilizzando le stesse logiche che sono state introdotte in precedenza per gli altri comandi.




Si riportano infine, per completezza, il ripristino dei registri della ISR della PIA e il comando che chiude il codice del sistema P.

5. Screenshot applicazione


Di seguito sono riportati alcuni esempi di funzionamento dell'applicazione che è stata creata.




Figura - Caricamento della memoria M1


Questo primo screenshot, riportato in Figura 21, rappresenta una delle primissime fasi di configurazione del sistema: quella in cui deve essere inizializzato il contenuto della memoria M1.



Figura - Richiesta di visualizzazione dello stato

Lo screenshot riportato in Figura 22 rappresenta la richiesta di visualizzazione dello stato: siccome sono state caricate le informazioni provenienti dalla memoria M1 alla memoria M2 e siccome sono quelli corrispondenti ai dati inseriti in fase di inizializzazione del sistema, verrà visualizzato un livello del liquido pari a zero.



Figura - Inviato comando 'Riempi cisterna a metà (2)'


In Figura 23, invece, è riportato il caso in cui viene inviato il comando di riempire la cisterna a metà. Come è possibile osservare dalla figura, le informazioni sono modificate solamente all'interno della memoria M1, mentre quelle contenute all'interno della memoria M2 rimangono invariate, in quanto attendono che il DMA aggiorni questo tipo di dato.



Figura - Inviato comando 'Svuota cisterna (3)'

In Figura 24, infine è riportato uno screenshot che rappresenta il caso in cui venga richiesto alla cisterna di svuotare tutto il liquido. Come è possibile osservare osservando la figura, ed in particolare lo stato della memoria M2, la cisterna partiva dal caso in cui aveva raggiungo il livello "1000" che corrisponde al riempimento totale della cisterna. Dopo l'invio del comando lo stato della memoria M1 viene progressivamente aggiornato facendo scendere il livello del liquido della cisterna di un livello per volta, fino al livello 0.

Scarica gratis Tesina Realizzazione di un dispositivo per il controllo di un impianto
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...

Appunti Silvicoltura Silvicoltura
Tesine Automobile Automobile
Lezioni Aeronautica Aeronautica