1 ITT Blaise PASCAL – CESENA Lab. Informatica CLASSE 5G TITOLO: Creazione dati di prova significativi per DATABASE “Garden” PANORAMICA 1. Descrizione e contesto del progetto Contesto del progetto: Il prodotto si inserisce all’interno del progetto Pascal che a sua volta fa parte del progetto Garden. Scopo: realizzazione programma che produca valori di prova significativi di temperatura atmosferica per il DATABASE “Garden”. Persone coinvolte: la classe 5G divisa in coppie. 2. Ambito del progetto Il programma sarà eseguito su un PC e potrà produrre, oltre ai valori di temperatura, anche valori di umidità o pressione. Questi dati si potranno aggiungere successivamente alla creazione del programma, in base alle richieste del cliente (classe 5E). Il cliente successivamente potrà consultare i dati significativi creati dall’applicazione. ANALISI DEL PROBLEMA 3. Definizione dei requisiti I requisiti attesi per la realizzazione del sistema sono: Postazioni di lavoro; Rete LAN e WAN per lo sviluppo; Visual Studio come framework di sviluppo; Creazione DATABASE per il salvataggio dei valori (Garden). DATABASE da cui prelevare i valori di temperatura giornalieri (Meteo). 4. Specifica dei requisiti Il sistema dovrà svolgere 2 operazioni di base: 1. Connessione alla base di dati che contiene i valori significativi di temperatura, umidità, pressione, previsioni atmosferiche giornalieri dell’anno 2014. E successivamente consultazione dei dati di temperatura. 2. Elaborazione e modifica dei valori prelevati. Caricamento dei valori sul database Garden che userà la classe 5E per la consultazione. Sul DATABASE dovranno essere salvati: Valori di temperatura relativi ad ogni 10 minuti delle 24 ore presenti in un giorno, più l’ora corrispondente al valore di temperatura. (Es. alle ore 00:10 gradi 1°; alle ore 00:20 gradi 2°; alle ore 00:30 gradi 2,2°; fino alle 23:50). 2 Punto misura che indica il tipo di sensore e scheda programmabile (es. Arduino, Rasberry, PLC) che invia i dati. Ogni coppia della classe 5G provvederà ad elaborare e salvare i dati di ogni mese. (es. gruppo1 salvataggio dati dei giorni di Gennaio; gruppo2 salvataggio dati dei giorni di Febbraio; ecc…). Il progetto deve simulare quindi dati di prova significativi di valori di temperatura atmosferici che serviranno alla classe 5E per la consultazione da pagine Web appositamente create. PROGETTO 5. Architettura di progetto Il nostro programma sarà sviluppato utilizzando la libreria specifica ADO.NET che offre il framework .NET di Microsoft per garantire la convivenza dei linguaggi SQL e C#. L’applicazione dovrà procurarsi dei dati significativi che successivamente saranno elaborati per essere salvati sul database garden. I valori significativi saranno scaricati dal sito http://www.ilmeteo.it/portale/archivio-meteo/Cesena e salvati sul database Meteo. Il programma sarà costituito da 2 metodi: 1. PrelevaDati: il quale non farà altro che prelevare la data, temperatura minima e massima di un determinato giorno e mese tramite il comando di SQL Query: ”SELECT DATA,[TMIN ーC],[TMAX ーC] FROM Foglio1$ where datepart( year, data) = 2014 and datepart ( month, data) = 10 and datepart (day, data) =1". (Preleva data, Tmin e max del giorno 1 ottobre). Questi 3 valori verranno salvati negli attributi dell’oggetto Rilevamento, tramite le proprietà GET; SET. 2. InviaTemperatura: il quale invierà al DATABASE Garden l’ora, il valore ed il punto misura tramite il comando SQL Query:"insert into Rilevazione values (@tempo, @valore,@puntoMisura)". Il valore sarà opportunatamente modificato, adattato, tramite un algoritmo, prima di essere inviato. @tempo, @valore, @puntoMisura sono aggiunti alla Query come parametro. I parametri saranno eguagliati agli attributi dell’oggetto rilevamento (es. parTempo.Value = ril.Tempo;). Solo il punto di misura è fisso, e gli verrà assegnato il n°21. ALGORITMO DEI DATI Calcolare l’escursione termica ogni ora: double delta = (ril.Tmax - ril.Tmin) / 12.0;//escursione ogni ora dove: ril.Tmax è la temperatura massima e ril.Tmin è la temperatura minima di un determinato giorno. Dividiamo il risultato della differenza tra max e min per 12 che sono il numero di ore. Dal risultato chiamato double delta otterremo quindi il valore di quanto sale la temperatura ogni ora. Dividiamo il delta per 6 ottenendo il valore di quanto aumenta la temperatura ogni 10 minuti (10minuti*6=60minuti=1ora). double minuti = delta / 6;//temperatura ogni 10 minuti N.B. La temperatura dalle 00:01 alle 12:00 aumenta; la temperatura dalle 12:01 alle 00:00 diminuisce. Quindi alle 00:00 è associata la temperatura minima, mentre alle 12:00 la temperatura massima. 3 Schema della rappresentazione delle temperature in relazione all’ora di un giorno. Successivamente riempiamo un vettore di dimensione 24, contenente come primo valore la Tmin e 11 valori con incremento graduale del delta calcolato in precedenza. Gli altri 12 valori verranno aggiunti al vettore con decremento graduale del delta. I primi 12 valori conterranno le temperature dalle ore 00:01 alle 12:00, mentre gli ultimi 12 conterranno le temperature dalle 12:01 alle 00:00. Tramite un ciclo for scorriamo il vettore di dimensione 24 riempito in precedenza e andiamo a inserire sul database Garden come primo elemento la Tmin, con l’ora corrispondente ed il punto misura. Subito dopo aver aggiunto il valore aumentiamo di 10 minuti l’ora tramite il metodo “AddMinutes(10)”: ril.tempo=ril.tempo.AddMinutes(10) Successivamente andiamo ad assegnare gli altri 5 valori rimanenti nell’arco di 1 ora. Il 1° lo abbiamo aggiunto prima, ne mancano 5. Lo facciamo facendo un ciclo for. Inseriremo quindi nel DB il punto misura, l’ora, ed il valore. Il valore (memorizzato nel vettore) viene aggiunto o diminuito (tramite un random) un numero che va da -1 a 1 per rendere più realistico il valore di temperatura. Dopo l’incremento non scordiamoci di incrementare anche di 10 minuti l’ora. double temp=tOre[i]+r.Next(-1,2); //aggiunge al valore dei 10 minuti uno scostamento tra -1 e 1 Dopo il completamento dei 2 cicli saranno aggiunti al database i valori di temperatura relativi ad 1 giorno specifico. 6 valori di temperatura per 1 ora di giornata, per 24 è uguale a 144 temperature presenti nella raccolta di dati Garden per 1 giorno. 4 Struttura ciclo for (int i = 0; i < 24;i++ )//scorriamo le 24 ore { //aggiungiamo primo valore al DB e aumentiamo di 10 minuti l’ora for (int f = 0; f < 5;f++ )//scorriamo i 10 minuti in 1 ora { //scostamento valore temperatura da -1 a 1 //inserimento valore nel DB //incremento 10 minuti ora } } 6. Disegno di dettaglio: Casi d’uso