tesi leghissa

54
UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI INGEGNERIA Dipartimento di Elettrotecnica, Elettronica ed Informatica Tesi di Laurea Triennale in Ingegneria Informatica Sviluppo del front end della piattaforma per la previsione di sostenibilità di processi industriali Laureando: Relatore: Simon Leghissa Prof. Maurizio Fermeglia

Upload: leghissasimon9321

Post on 07-Jun-2015

300 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tesi Leghissa

UNIVERSITÀ DEGLI STUDI DI TRIESTE

FACOLTÀ DI INGEGNERIA

Dipartimento di Elettrotecnica, Elettronica ed Informatica

Tesi di Laurea Triennale in Ingegneria Informatica

Sviluppo del front end della piattaforma

per la previsione di sostenibilità di processi industriali

Laureando: Relatore:

Simon Leghissa Prof. Maurizio Fermeglia

Page 2: Tesi Leghissa

Indice 1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . .

2 Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 PSP Framework . . . . . . . . . . . . . . . . . . . . . 2.2 Sostenibilità . . . . . . . . . . . . . . . . . . . . . .

2.2.1 Indicatori di sostenibilità . . . . . . . . . . . . . . . . 2.2.1.1 Indicatori tridimensionali (3D) . . . . . . . . . . 2.2.1.2 Indicatori monodimensionali (1D) . . . . . . . . .

2.3 Cape Open . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Moduli CO per gli indici 3D . . . . . . . . . . . . . . . 2.3.2 Moduli CO per gli indici 1D . . . . . . . . . . . . . . .

2.4 Implementazione . . . . . . . . . . . . . . . . . . . . 2.4.1 Implementazione PSP-3D . . . . . . . . . . . . . . . 2.4.2 Implementazione PSP-1D . . . . . . . . . . . . . . .

2.5 Requisiti del sistema . . . . . . . . . . . . . . . . . . . . 2.6 Specifiche . . . . . . . . . . . . . . . . . . . . . . . 2.7 Casi d’uso . . . . . . . . . . . . . . . . . . . . . . .

2.7.1 Calcolo indici 1D . . . . . . . . . . . . . . . . . . . 2.7.2 Calcolo indici 3D . . . . . . . . . . . . . . . . . . . 2.7.3 Confronto indici 1D . . . . . . . . . . . . . . . . . 2.7.4 Confronto indici 3D . . . . . . . . . . . . . . . . . 2.7.5 Impostazione dei valori delle categorie di impatto ambientale . . . 2.7.6 Modifica risultati simulazione 1D . . . . . . . . . . . . .

2.8 Diagrammi delle classi . . . . . . . . . . . . . . . . . . . 2.8.1 LibreriaPerXML . . . . . . . . . . . . . . . . . . .

2.8.1.1 PSP-3D . . . . . . . . . . . . . . . . . . 2.8.1.2 PSP-1D . . . . . . . . . . . . . . . . . .

2.8.2 Front end . . . . . . . . . . . . . . . . . . . . .

3 Realizzazione . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Sviluppo LibreriaPerXML . . . . . . . . . . . . . . . . . .

3.1.1 PSP-3D . . . . . . . . . . . . . . . . . . . . . . 3.1.2 PSP-1D . . . . . . . . . . . . . . . . . . . . . .

3.2 Modifica moduli Cape Open . . . . . . . . . . . . . . . . 3.3 Sviluppo interfaccia grafica . . . . . . . . . . . . . . . . .

4 Interfaccia grafica . . . . . . . . . . . . . . . . . . . . . . 4.1 Preferenze . . . . . . . . . . . . . . . . . . . . . . . 4.2 Input dati 1D . . . . . . . . . . . . . . . . . . . . . .

1

3 3

4 5 6 7 9 9 9

10 10 10 11 12 15 16 17 18 18 19 19 20 20 20 22 23

25 25 27 30 31 32

40 41 41

Page 3: Tesi Leghissa

4.3 Input dati 3D . . . . . . . . . . . . . . . . . . . . . . 4.4 Confronto indicatori 3D . . . . . . . . . . . . . . . . . . 4.5 Confronto indicatori 1D . . . . . . . . . . . . . . . . . . 4.6 Categorie di impatto ambientale . . . . . . . . . . . . . . . 4.7 Inserimento dei nomi delle sostanze del processo (PSP-1D) . . . . . .

5 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . .

43 46 47 48 49

50

Page 4: Tesi Leghissa

1

Capitolo 1

Introduzione

Il problema considerato in questa tesi riguarda lo sviluppo di un’ interfaccia grafica (GUI) per la piattaforma software PSP Framework (Process Sustainability Prediction Framework) per la previsione di sostenibilità di processi industriali mediante l’utilizzo di indicatori di sostenibilità monodimensionali (1D) e tridimensionali (3D).

L’obbiettivo è quello di progettare e sviluppare un’applicazione di front end per il sistema PSP. L’applicazione dovrà gestire l’interazione con l’utente da interfaccia grafica.

La piattaforma PSP è stata precedentemente sviluppata dal dott. ing. chimico Letitia Toma. Questo sistema è stato progettato ad hoc per la previsione di sostenibilità di processi industriali mediante il calcolo di indicatori di sostenibilità. L’intero software è composto da più moduli con compiti diversi. La componente di interesse in questa tesi è l’interfaccia utente. Precedentemente sono stati sviluppati due prototipi di interfaccia utente: Final_interface.exe e 3DMetrics.exe, rispettivamente per il calcolo di indicatori di sostenibilità 1D e 3D. Entrambi sono completi dal punto di vista funzionale, ma hanno mancanze dal punto di vista grafico. Quindi si è voluto sviluppare un'altra applicazione, la quale doveva comprendere tutte le funzionalità presenti nei due prototipi, più alcune funzioni aggiuntive.

Gli obbiettivi principali di questo lavoro sono stati:

1. Studio delle tecnologie .Net e XML 2. Raccolta dei requisiti, mediante interviste e analisi dei due prototipi

Final_interface.exe e 3DMetrics.exe 3. Progettazione 4. Codifica 5. Test

La piattaforma PSP è stata sviluppata in compatibilità con l’ambiente Microsoft Windows XP, utilizzando come ambiente di sviluppo per i vari moduli software Microsoft Visual Studio 6.0 e come linguaggio di programmazione Visual Basic 6.0. Si è deciso di sviluppare la nuova interfaccia in ambiente Microsoft .NET, utilizzando come ambiente di sviluppo Microsoft Visual Studio 2008 e come linguaggio di programmazione C#. In questo modo l’applicazione è compatibile con i sistemi operativi Microsoft Windows (2k, XP, Vista). L’unico requisito in più rispetto al sistema iniziale è la presenza del pacchetto Microsoft .Net Framework 2.0.

Page 5: Tesi Leghissa

2

2 Analisi: in questo capitolo viene effettuata l’analisi del sistema esistente e l’analisi dell’applicazione da sviluppare:

Riassunto dei capitoli seguenti

2.1 PSP Framework: viene descritta la struttura della piattaforma e viene esposto il flusso logico dei dati e delle operazioni per l’analisi di sostenibilità di un processo;

2.2 Sostenibilità: cenni sulla sostenibilità di processi industriali e sugli indicatori di sostenibilità monodimensionali e tridimensionali;

2.3 Cape Open: elenco e breve descrizione dei moduli CO utilizzati nel PSP-1D e PSP-3D per l’estrazione dei dati dalle simulazioni di processo;

2.4 Implementazione: vengono esposti due diagrammi rappresentanti la sequenza delle operazioni ed il flusso dei dati per il calcolo degli indicatori di sostenibilità 3D e 1D;

2.5 Requisiti: in questa sezione vengono definiti i requisiti funzionali ed i requisiti non funzionali del sistema;

2.6 Specifiche: vengono riformulati i requisiti del sistema definendo dettagliatamente ogni funzionalità dell’applicazione sviluppata;

2.7 Casi d’uso: in questa sezione vengono analizzati i principali casi d’uso dell’applicazione, esponendoli sia in forma testuale che mediante modelli UML;

2.8 Diagrammi delle classi: vengono esposti i diagrammi delle classi del sistema, descrivendo brevemente le caratteristiche di ogni classe ed il loro utilizzo;

3 Realizzazione: viene descritta la parte di codifica dei vari moduli, descrivendo singolarmente le varie classi ed i lori metodi principali. Viene inoltre esposta parte del codice sorgente in linguaggio C#:

3.1 LibreriaPerXML.dll: lo scopo della libreria LibreriaPerXML.dll è la gestione dei file XML da parte dei moduli Cape Open e dall’interfaccia grafica;

3.2 Modifica moduli Cape Open Proall.dll, ProPointRisk.dll e Promatrics.dll: i moduli CO sono stati modificati per adattarli all’utilizzo di file XML al posto del formato testo utilizzato nella versione iniziale;

3.3 Sviluppo interfaccia grafica: viene esposta tutta la parte relativa alla realizzazione del front end per la piattaforma PSP;

4 Interfaccia grafica: viene esposto il risultato dell’interfaccia grafica Interfaccia.exe tramite varie screenshots e brevi descrizioni sulle modalità di utilizzo.

Page 6: Tesi Leghissa

3

Capitolo 2

Analisi

2.1 PSP Framework

Figura: schema PSP framework

Il PSP framework rappresenta uno strumento di supporto per l’ing. chimico di processo che permette di valutare l’impatto ambientale di un processo chimico già nella fase di progettazione e di scegliere la soluzione migliore dal punto di vista ambientale. È composto da moduli Cape Open interfacciati al simulatore di processo, da un database relazionale contenente dati tossicologici e frasi di rischio e da una serie di moduli software.

Page 7: Tesi Leghissa

4

Figura: sequenza operazioni nel PSP framework

I due punti di partenza per il calcolo degli indicatori di sostenibilità sono il simulatore di processo e la base di dati contenente informazioni sulla tossicità e sulle frasi di rischio. I moduli CO sono stati sviluppati secondo gli standard Cape Open e sono capaci di interfacciarsi con i simulatori di processo, come ad esempio PROII e Aspen Plus. Il compito di questi moduli è quello di estrarre dalla simulazione di processo dati sui flussi e sulle sostanze chimiche. Questi dati vengono poi processati dal software PSP e danno come risultato gli indicatori di sostenibilità. Durante questo lavoro di tesi è stato sviluppato un frontend per la piattaforma PSP per la previsione di sostenibilità di processi industriali tramite indici monodimensionali e tridimensionali.

2.2 Sostenibilità

La sostenibilità rappresenta un importante problema sociale, politico e scientifico di questo secolo. Lo sviluppo sostenibile è stato definito come la creazione di beni e servizi usando processi e sistemi non inquinanti, conservando energia e risorse naturali; economicamente sostenibile; sano e sicuro per i lavoratori, le comunità ed i consumatori. L ‘industria chimica produce materiali per diversi mercati di consumo, che devono essere prodotti, utilizzati e riciclati in modo pulito, sicuro ed economico. Al fine di eliminare o ridurre i problemi ambientali, devono essere identificate e quantificate le conseguenze ambientali dei processi chimici in una fase iniziale del processo di progettazione.

Page 8: Tesi Leghissa

5

System Definition

3D Indicators Calculation

Cost Estimation

2D and 1D Indicators Calculation

Decision Making

2.2.1 Indicatori di sostenibilità

È generalmente riconosciuto che la sostenibilità è data da un bilanciamento tra tre aspetti dello sviluppo sostenibile: economico, ambientale e sociale. La scelta degli indicatori è molto importante per il confronto di versioni diverse di un processo.

Proprietà fondamentali: (i) un insieme di variabili quantificabili consistenti con i principi di sostenibilità; (ii) devono essere chiari, semplici e non ambigui; (iii) devono rappresentare il sistema fisico sotto studio

Viene fatto uso di una piccola serie di indicatori quantificabili, tra loro indipendenti. Con

l'obiettivo di fornire un metodo semplice per l’analisi della sostenibilità di sistemi industriali, Sikdar propose una tipologia di indicatori considerando le tre dimensioni di sostenibilità in tre gruppi gerarchici distinti: (1) monodimensionale (1D), indicatori che offrono informazioni solamente su una dimensione di sostenibilità: economica, ecologica, o sociale; (2) bidimensionale (2D), indicatori che offrono simultaneamente informazioni su due dimensioni di sostenibilità: socio-ecologica, socio-economica, o economico-ecologica; (3) tridimensionale (3D), indicatori che offrono informazioni su tutte e tre le dimensioni di sostenibilità.

Ambiente

Società

3D

2D

1D

2D

2D1D 1D

Economia

Secondo quest’idea vanno considerati per primi gli indicatori 3D e se il processo decisionale richiede ulteriori elaborazioni, dovrebbero venire usati gli indicatori 2D e 1D per risolvere problemi specifici.

Page 9: Tesi Leghissa

6

2.2.1.1 Indicatori tridimensionali (3D) Per i processi chimici, nella maggior parte dei casi, vengono definiti quattro indicatori 3D:

1.

L’ indicatore MI rappresenta la quantità di risorse non rinnovabili necessaria per ottenere una unità di massa di prodotto. Comprende le materie prime, i solventi e altri ingredienti. MI è espresso in libbre di materiale sprecato (non “convertito” nel prodotto desiderato) per un’ unità di prodotto.

Intensità in termini di materie prime (MI - Material Intensity)

2.

L’ indicatore EI misura le richieste di energia del processo. È calcolato per unità di massa dei prodotti e si concentra principalmente sull'uso di energia non-rinnovabile.

Intensità in termini di energie (EI - Energy Intensity)

3.

L’ indice PCR collega la sicurezza ed il potenziale rischio di un processo chimico alla salvaguardia della salute umana, associata a manipolazione, stoccaggio ed uso di sostanze chimiche. Viene calcolato per massa di prodotto secondo il seguente schema:

Rischio chimico potenziale (PCR - Potential Chemical Risk)

Quantity Class

Frequency Class

Potential Exposure Class

Hazard Class

Potential Chemical Risk

Page 10: Tesi Leghissa

7

WAR

Molecular weights

Streams Composition

Impact categories values

Weighting factors for the impact categories

Process Simulation

Toxicological DB

Set by the user

Environmental Impact Indexes

4.

L’ indice PEI misura il potenziale impatto ambientale provocato dalle emissioni e dagli scarichi di sostanze inquinanti nell’ambiente. Viene calcolato per massa di prodotto seguendo il seguente schema:

Potenziale Impatto Ambientale (PEI - Potential Environmental Impact)

Quantity Class

Hazard Class

Total Potential Environmental Impact

Transfer Coefficient

Potential Environmental Impact(air, water, soil)

Quantity Class

Receiving Medium (air, water, soil)

2.2.1.2 Indicatori monodimensionali (1D - Waste Reduction Algorithm(WAR))

L’algoritmo WAR viene utilizzato per valutare l’impatto ambientale di un processo chimico tramite indicatori di sostenibilità monodimensionali.

La valutazione viene fatta tramite gli indici d’impatto ambientale. Si basa su equazioni di bilancio d’ impatto ambientale. In Figura viene illustrato il bilancio complessivo di un processo chimico generico

Energy Generation

Process

Chemical Process

Mass

Mass Mass

Mass

Waste Energy Waste Energy

Energy

)(epinI

)(epoutI

)(cpinI

)(cpoutI

)(epweI )(cp

weI

.

Figura: bilancio complessivo di un processo

Page 11: Tesi Leghissa

8

Categorie di impatto ambientale

Nella valutazione del potenziale impatto ambientale con l’algoritmo WAR vengono considerate otto categorie di impatto : Potenziale di Riscaldamento Globale (GWP- Global Warming Potential), Potenziale di Acidificazione (AP- Acidification Potential), Potenziale di degrado dell’ozono (ODP- Ozone Depletion Potential), Potenziale di ossidazione fotochimica o Potenziale di creazione dello smog (PCOP- Photochemical Oxidation), Potenziale di tossicità umano per ingestione (HTPI- Human Toxicity Potential by Ingestion ), Potenziale di tossicità umano per inalazione (HTPE - Human Toxicity Potential by Inhalation), Potenziale di tossicità acquatica (ATP- Aquatic Toxicity Potential), Potenziale di tossicità terrestre (TTP - Terrestrial Toxicity Potential). Le categorie s

opra elencate sono suddivise in due classi: Atmosferica globale e Tossicologica locale.

Gli indici di impatto ambientale vengono utilizzati per caratterizzare l’ efficienza ambientale del processo.

Indici di impatto ambientale

Page 12: Tesi Leghissa

9

2.3 Cape Open(CO)

La metodologia Cape Open (Computer Aided Process Engineering) consente l’interfacciamento di diversi componenti software. Il PSP Framework contiene moduli CO capaci di interagire con qualsiasi simulatore di processo. In questo modo si ottengono in modo automatico dal simulatore di processo i dati necessari al calcolo degli indici 3D o 1D.

2.3.1 Moduli CO per gli indici 3D

Nell’ambito del PSP-3D vengono utilizzati due moduli Cape Open: ProMatrics.dll e ProPointRisk.dll.

2.3.2 Moduli CO per gli indici 1D

Nel PSP-1D invece si fa uso di un solo modulo: Pro_all.dll.

Page 13: Tesi Leghissa

10

2.4 Implementazione

2.4.1 Implementazione PSP-3D

Simulazione di processo

Risultati

Dati estratti con i moduli CO

Moduli CO

CAS_data.txt Quantity_class_data_risk.txt material_intensity_data.txt risk_phrases.txt

Calcolo indicatori 3D

MI EI PCR PEI

Classe di frequenza Stato fisico Materiale ricevente

Dati inseriti dall’utente da interfaccia

Tossicologica DB

La simulazione di processo con l’utilizzo dei moduli Cape Open da come risultato una serie di file: “CAS_data.txt”, “Quantity_class_data_risk.txt”, “material_intensity.txt”, “risk_phrases.txt”. I dati di questi file ed i dati inseriti dall’utente da interfaccia fanno poi da input al calcolo degli indici 3D.

2.4.2 Implementazione PSP-1D

Weighting Factors.txt

Tossicologico DB

Simulazione di processo

Modulo CO

Risultati

Results.txt Stream_name_and_composition.txt

Calcolo indicatori 1D

Dati inseriti dall’utente da interfaccia

Iout Iout_mp0 Iout_mp1 Iout_mp2 Igen Igen_mp0 Igen_mp1 Igen_mp2

In questo caso, per prima cosa vengono impostati i valori delle categorie di impatto ambientale (“Weighting factors”), che vengono poi utilizzati nella fase successiva di simulazione di processo. I risultati di questa fase sono i file “results_new.txt” e “stream_name_and_composition.txt”, i quali fanno poi da input al calcolo degli indicatori ambientali 1D.

Page 14: Tesi Leghissa

11

2.5 Requisiti del sistema

In questa sezione vengono definiti i requisiti del sistema.

Calcolo indicatori ambientali 1D: il sistema calcola gli indicatori 1D dai risultati della simulazione di processo (file “results_new.xml” e “stream_name_and_composition.xml”) e mediante la lettura di alcuni dati inseriti dall’utente da interfaccia, come i composti ed i flussi presenti nel processo.

Calcolo indicatori ambientali 3D: il sistema calcola gli indicatori 3D (MI, EI, PCR, PEI) dai risultati della simulazione di processo (file “cas_data.xml”, “material_intensity_data.xml”, “quantity_class_data_risk.xml” e “risk_phrases.xml”), e mediante la lettura di alcuni dati da interfaccia come lo stato fisico dei prodotti e le loro classi di frequenza.

Interfacciamento con i risultati delle simulazioni di processo: durante le simulazioni di processo vengono scritti dai moduli CO più file contenenti i risultati della simulazione. Questi risultati vengono successivamente utilizzati per il calcolo degli indici 1D e 3D dal front end. Tutti questi dati devono essere memorizzati in formato xml.

Salvataggio indicatori 1D: il sistema salva gli indicatori 1D calcolati su file con formato xml, per consentire un successivo confronto con risultati di processi diversi.

Salvataggio indicatori 3D: il sistema salva gli indicatori 3D calcolati su file con formato xml, per consentire un successivo confronto con risultati di processi diversi.

Confronto indicatori 1D: il sistema consente il confronto di più insiemi di indicatori 1D salvati su file xml mediante la rappresentazione degli stessi in forma numerica in tabella e su grafici.

Confronto indicatori 3D: il sistema consente il confronto di più insiemi di indicatori 3D salvati su file xml mediante la rappresentazione degli stessi in forma numerica in tabella e su grafici.

Impostazione dei valori delle categorie di impatto ambientale: durante la simulazione di processo 1D il modulo CO fa uso del file “factors.xml”, che deve contenere i valori di otto categorie di impatto ambientale: GWP, ODP, PCOP, AP, HTPE, HTPI, TTP, ATP. Questa funzione consente all’ utente di creare o modificare questo file.

Aggiunta nomi sostanze ai risultati della simulazione 1D: durante la simulazione di processo 1D viene creato il file “results_new.xml”, contenente dati su alcune sostanze chimiche. Tra queste informazioni mancano i nomi delle sostanze, che vengono identificate con un identificatore. Questa funzione consente di impostare ad ogni sostanza presente nel file il proprio nome, per consentire una più semplice lettura dei dati da parte dell’utente durante la fase di calcolo degli indici 1D.

Page 15: Tesi Leghissa

12

2.6 Specifiche

In questa sezione i requisiti del sistema vengono approfonditi e tradotti in specifiche.

Calcolo indicatori ambientali 1D:

Il file “results_new.xml” contiene dati sui flussi presenti nel processo chimico. Questi flussi vengono divisi nelle seguenti categorie, a seconda del loro indice e tipo: input del processo chimico (ind.=0, tipo=0), output del processo chimico (ind.=0, tipo=1), materiale sprecato dal processo chimico (ind.=0, tipo=2), input del processo di generazione di energia (ind.=0, tipo=0) e spreco del processo di generazione di energia (ind.=0, tipo=1). L’utente può selezionare sul form uno o più di questi flussi. Il file “stream_name_and_composition.xml” contiene invece l’elenco di alcuni composti chimici. L’utente deve selezionare almeno uno di questi composti come prodotto principale del processo. Dopodiché il sistema calcola gli indici ambientali con l’algoritmo utilizzato nel prototipo sviluppato precedentemente e in caso di esito positivo i risultati vengono esposti in forma numerica decimale e grafica su istogrammi.

con questa operazione vengono calcolati otto indici ambientali 1D: iout, iout_mp0, iout_mp1, iout_mp2, igen, igen_mp0, igen_mp1, igen_mp2. L’utente apre il form di immissione dati, dove vengono elencati i contenuti dei file “results_new.xml” e “stream_name_and_composition.xml”.

Calcolo indicatori ambientali 3D:

in questo caso vengono calcolati gli indicatori 3D con la seguente sequenza: MI, EI, PCR, PEI. Viene aperto per primo un form per l’immissione dati per il calcolo dell’indice MI (Material Intensity). Vengono caricate le sostanze presenti nel processo chimico con le relative caratteristiche dal file “material_intensity_data.xml” ed i numeri di CAS di ogni sostanza dal file “cas_number.xml”. L’utente deve inserire le quantità di acqua, ossigeno e azoto formati nella reazione chimica, il prodotto principale del processo ed eventualmente altri prodotti tra quelli letti dal file “material_intensity_data.xml”. Dopodiché viene calcolato l’indice MI. Se l’operazione è andata a buon fine si procede al calcolo dell’indice EI. Viene aperto un nuovo form dove l’utente deve selezionare nuovamente il prodotto principale del processo chimico ed eventuali altri prodotti (tra quelli presenti in “material_intensity_data.xml”) ed inserire la quantità di energia generata durante il processo [Btu/hr]. Si procede al calcolo dell’indice. Il passo successivo è il calcolo dell’indice PCR. Vengono caricate le frasi di rischio per i vari numeri di CAS dal file “risk_phrases.xml” e vengono elencate sul form le sostanze presenti nel file “quantity_class_data_risk.xml”. L’utente deve associare ad ogni sostanza chimica la frequenza di utilizzo tra le seguenti, dopodiché viene calcolato l’indice:

Occasionale Intermittente Frequente Permanente Giorno < 30 min 30 - 120 min 2-6 ore > 6 ore Settimana < 2 ore 2 - 8 ore 1 - 3 giorni > 3 giorni Mese < 1 giorno 1 - 6 giorni 6 - 15 giorni > 15 giorni Anno < 5 giorni 15 g - 2 mesi 2 - 5 mesi > 5 mesi

Page 16: Tesi Leghissa

13

Per ultimo viene aperto un form dove l’utente deve associare ad ogni sostanza chimica presente in “quantity_class_data_risk.xml” lo stato fisico (gassoso, liquido, solido, polvere solida). Infine viene calcolato l’indice PEI. Per il calcolo degli indici vengono utilizzati gli algoritmi del prototipo esistente, adattati alle nuove strutture dati.

<name>SULFURIC</name>

Interfacciamento con i risultati delle simulazioni di processo

È stata sviluppata una libreria compatibile con i moduli CO ed il frontend per la memorizzazione e l’utilizzo dei risultati delle simulazioni di processo tramite file con formato xml. Nel PSP-1D vengono utilizzati due file: “results_new.xml” e “stream_name_and_composition.xml”. Il primo file contiene un elenco di flussi. Per ogni flusso vengono memorizzati tipo (type), identificatore (name), indice (ind), valore (value), portata (massFlowRate) ed il nome della sostanza (stream). Es. “results_new.xml” con due sostanze:

<?xml version="1.0"?> <Results> <Result> <type>0</type> <name>CO1</name> <ind>0</ind> <value>0</value> <stream>WATER</stream> <massFlowRate>62.41</massFlowRate> </Result> <Result> <type>0</type> <name>CO2</name> <ind>0</ind> <value>0.00065875</value> <stream>DEGREASING</stream> <massFlowRate>0.125</massFlowRate> </Result> </Results>

La tipica struttura del file “stream_name_and_composition.xml” è invece: <?xml version="1.0"?> <StreamsAndComposition> <Stream> <name>CO1</name> <type>0</type> <ind>0</ind> <Compositions> <Composition> <name>HYCHLORD</name> <massFlowRate>0</massFlowRate>

</Composition> <Composition>

Page 17: Tesi Leghissa

14

<massFlowRate>0</massFlowRate> </Composition> <Composition> <name>H2O</name> <massFlowRate>62.4104</massFlowRate> </Composition> </Stream> </StreamsAndComposition>

Nel PSP-3D invece vengono utilizzati i seguenti file: “cas_data.xml”, “material_intensity_data.xml”, “risk_phrases.xml” e “quantity_class_data_risk.xml”. Il file “cas_data.xml” memorizza uno o più insiemi di numeri di CAS (es. 1333-74-0). Il file “material_intensity_data.xml” contiene dati su uno o più composti chimici. Ogni composto ha le seguenti proprietà: name, connection, waterUsage, airUsage, massFlowRate e Components, dove quest’ ultimo rappresenta l’elenco delle componenti della sostanza chimica (name e massFlowRate per ogni componente). Il file “risk_phrases.xml” contiene uno o più CAS number e per ogni CAS number la propria frase di rischio (es. 22 44 32 56). Il file “quantity_class_data_risk.xml” memorizza invece le seguenti proprietà di alcune sostanze: nome, portata globale e l’elenco delle componenti della sostanza (nome e portata per ogni componente). Tutti questi file vengono creati e modificati più volte in modo automatico dai moduli CO durante le simulazioni di processo. Salvataggio indicatori 1D: Questa operazione salva gli otto indicatori 1D su un file con struttura xml. Es.:

<?xml version="1.0"?> <Final_Results> <Iout>0.785966558</Iout> <Iout_mp0>0.002926624096003313</Iout_mp0> <Iout_mp1>0.002547901807596053</Iout_mp1> <Iout_mp2>0.002547901807596053</Iout_mp2> <Igen>-13.5807851</Igen> <Igen_mp0>-0.05056939447581784</Igen_mp0> <Igen_mp1>-0.044025418833231758</Igen_mp1> <Igen_mp2>-0.044025418833231758</Igen_mp2> </Final_Results>

Salvataggio indicatori 3D: Questa operazione salva gli indici 3D calcolati su un file con struttura xml. Es.:

<?xml version="1.0"?> <FinalResults3D> <MaterialIntensity>678.6841520946355</MaterialIntensity> <EnergyIntensity>1.5</EnergyIntensity> <ChemicalRisk>41</ChemicalRisk> <PotentialEnvironmentalImpact>270.201</PotentialEnvironmentalImpact> </FinalResults3D>

Page 18: Tesi Leghissa

15

Confronto indicatori 1D: con questa operazione vengono confrontati indici 1D di diverse simulazioni. Vengono rilevati tutti i file rappresentanti risultati 1D in una cartella selezionata dall’utente, dopodiché l’utente può scegliere quali processi confrontare tra quelli presenti. Infine vengono esposti i valori degli indici iout, iout_mp0, igen e igen_mp0 in una tabella e su quattro istogrammi.

Confronto indicatori 3D: il confronto di indici 3D viene fatto allo stesso modo del confronto 1D. Vengono esposti i valori dei quattro indici MI, EI, PCR e PEI sia in forma numerica che grafica.

Impostazione dei valori delle categorie di impatto ambientale: viene aperto un form per l’inserimento o la modifica dei valori delle otto categorie ambientali. Vengono caricati i valori presenti nel file “factors.xml”, se esistente. Altrimenti viene attribuito il valore di default 1 ad ogni categoria. Dopodiché l’utente può modificare i valori e salvare le modifiche apportate su file.

Aggiunta nomi sostanze ai risultati della simulazione 1D:

Interfaccia

Calcolo indici 1D

Calcolo indici 3D

Confronto indici 1D

Confronto indici 3D

Impostazione valoricategorie di impatto

ambientale

Ing. chimico

Modifica risultatisimulazione 1D

il sistema consente di inserire il nome per ogni sostanza presente nel file “results_new.xml”. Vengono lette le varie sostanze e le relative proprietà dal file ed elencate in una tabella, dove l’utente può inserire un nome per ogni sostanza. Infine le modifiche vengono salvate sul stesso file.

2.7 Casi d’uso

In questa sezione vengono analizzati i principali casi d’uso dell’applicazione, esponendoli sia in forma testuale che mediante modelli UML.

I casi d’uso dell’applicazione sono:

• calcolo degli indici 1D

• calcolo degli indici 3D

• confronto di indici 3D di simulazioni diverse

Page 19: Tesi Leghissa

16

• confronto di indici 1D di simulazioni diverse

• impostazione dei valori delle categorie di impatto ambientale per il PSP-1D

• modifica dei risultati della simulazione 1D

2.7.1 Calcolo indici 1D

leggi risultatisimulazione

Calcola Indici 1D

«uses»

«uses»

leggi results.xml

leggistream_name_and_composition.xml

inserisci dati dainterfaccia

inserisci prodottiprincipali del processo

inserisci i flussi inentrata al processo

chimico

inserisci i flussi inuscita al processo chimico

«extends»

«extends»

inserisci i flussi dellospreco del processo

chimico

inserisci i flussi inentrata al proc. di gen. di

energia

inserisci i flussisprecati dal proc. di gen. di

energia

«extends»

«extends»

«extends»

«extends»

«extends»

«extends»

calcola indici

«uses»

salva risultati sufile

«uses»

Flusso degli eventi:

i. Lettura risultati simulazione ii. Inserimento dati da interfaccia iii. Calcolo indici 1D iv. Salvataggio risultati su file xml

Page 20: Tesi Leghissa

17

2.7.2 Calcolo indici 3D

Flusso globale degli eventi:

i. Calcolo Material Intensity j. Caclolo Energy Intensity k. Calcolo Potential Chemical Risk l. Calcolo Potential Environmental Impact m. Salvataggio risultati su file

Ogni fase di calcolo di un indice è divisa in tre fasi principali:

i. Lettura risultati della simulazione di processo j. Inserimento dati da interfaccia k. Calcolo indicatore

Page 21: Tesi Leghissa

18

2.7.3 Confronto indici 1D

Confronta indici 1D

Seleziona filerisultati da confrontare

Visualizzaconfronto

Visualizza confrontoin forma numerica

Visualizzaconfronto su grafici

«uses»

«uses»

«extends»

«extends»

Flusso degli eventi:

i. Selezione processi da confrontare j. Visualizzazione confronto numerico (tutti gli indici) k. Visualizzazione confronto grafico (iout, iout_mp0, igen, igen_mp0)

2.7.4 Confronto indici 3D

Confronta indici 3D

Seleziona fileindici 3D da confrontare

Visualizzaconfronto

Visualizza confrontoin forma numerica

Visualizzaconfronto su grafici

«uses»

«uses»

«extends»

«extends»

Flusso degli eventi:

i. Selezione processi da confrontare j. Visualizzazione confronto numerico k. Visualizzazione confronto grafico

Page 22: Tesi Leghissa

19

2.7.5 Impostazione dei valori delle categorie di impatto ambientale

Modifica Weightingfactors

Apri file

Modifica valori

Salva file

«uses»

«uses»

«uses»

Modifica GWP

Modifica ODP

Modifica PCOP

Modifica HTPE

Modifica ATP

Modifica TTP

Modifica HTPI

Modifica AP

«extends»

«extends»

«extends»

«extends»

«extends»

«extends»

«extends»«extends»

Flusso degli eventi:

i. Caricamento valori da file, se esistente j. Modifica valori k. Salvataggio valori su file

2.7.6 Modifica risultati simulazione 1D

Modifica results 1D

Apri file

Inserisci nomisostanze

Salva file

«uses»

«uses»

«uses»

Flusso degli eventi:

i. Apertura file “results.xml” j. Inserimento nomi sostanze k. Salvataggio modifiche su file

Page 23: Tesi Leghissa

20

2.8 Diagrammi delle classi

Di seguito vengono esposti i diagrammi delle classi del sistema, elencando le loro proprietà principali.

2.8.1 LibreriaPerXML

I prototipi sviluppati precedentemente prevedevano l’utilizzo dei file risultato delle simulazioni di processo (“cas_data.xml”, “material_intensity_data.xml”, “risk_phrases.xml”, “class_data_risk.xml” per il 3D e “results.xml”, “stream_name_and_composition.xml” per l’1D) in formato txt. Per il nuovo front end si è deciso di utilizzare file in formato xml. Per fare ciò è stato necessario modificare le funzioni di lettura e scrittura di questi file nei moduli Cape Open esistenti (ProMatrics.dll e ProPointRisk.dll per il 3D e Proall.dll per l’1D).

È stato sviluppata una libreria, LibreriaPerXml.dll, che consente la lettura, modifica e salvataggio di tutti questi file, oltre alla gestione semplificata dei contenuti. Questa libreria è compatibile sia con i moduli CO che con il nuovo front end.

Page 24: Tesi Leghissa

21

2.8.1.1 PSP-3D

La classe CasData gestisce il file “cas_data.xml”. Contiene uno o più insiemi di cas number.

La classe RiskPhrases (gestione file “risk_phrases.xml”) è composta da uno o più oggetti di tipo ComponentsRisk, ognuno dei quali contiene le frasi di rischio per uno o più numeri di CAS.

La classe MaterialIntensityData ( gestione file “material_intensity_data.xml”) invece contiene alcuni dati caratteristici ( nome, utilizzo di acqua, utilizzo di aria, connessione, portata) delle sostanze utilizzate nel processo chimico e la portata di ogni singolo componente (Component) per ogni sostanza (MaterialIntensityStream).

Page 25: Tesi Leghissa

22

La classe QuantityClassDataRisk consente la gestione del file “quantity_class_data_risk.xml”, che ha una struttura molto simile al file “material_intensity_data.xml”, con la differenza che per ogni sostanza vengono memorizzati soltanto il nome, la portata complessiva e la portata per ogni componente.

2.8.1.2 PSP-1D

La classe Results (file “results.xml”) contiene i seguenti dati per alcune sostanze presenti nel processo chimico: indice, portata, nome, flusso, tipo e valore.

La classe StreamNameAndComposition (file “stream_name_and_composition.xml”) memorizza alcune proprietà di uno o più composti chimici: indice, nome, tipo e nome e portata di tutte le sostanze (Components) che la compongono.

La classe Factors (file “factors.xml”) contiene i valori delle otto classi di impatto ambientale (AP, ATP, GWP,HTPE, HTPI, ODP, PCOP, TTP).

Page 26: Tesi Leghissa

23

2.8.2 Front end

La classe principale è la classe Form1. Rappresenta gran parte dell’interfaccia utente ed è la prima della quale viene creata un istanza all’avvio dell’applicazione. Si è deciso di strutturare l’interfaccia in “tab”, quindi una o più sottofinestre, ognuna con la sua funzione specifica (es. calcolo indici 3D, calcolo indici 1D, confronto 1D,…). Per questo è stata creata la classe TabControlMod, figlia della classe TabControl del framework .Net, con l’aggiunta di alcuni elementi grafici per la chiusura dei tab. Per quanto riguarda le operazioni di calcolo e confronto degli indici vengono create istanze delle seguenti classi:

Per il calcolo degli indici 1D si fa uso della classe Indici1D, che consente di:

Page 27: Tesi Leghissa

24

• Leggere i due file risultato della simulazione di processo (di default “stream_name_and_composition.xml” e “results.xml”) tramite i metodi loadCompounds() e loadResults();

• Calcolare gli indici monodimensionali: calcola Indicatori();

• Salvare gli indici su file: saveResults1D().

• Leggere i risultati da codice tramite delle variabili pubbliche contenenti i valori degli otto indici calcolati: igen, igen_mp0, igen_mp1, igen_mp2, iout, iout_mp0, iout_mp1, iout_mp2.

La classe Indici3D viene invece usata per il calcolo degli indici 3D. Consente di:

• Leggere i risultati della simulazione di processo , tramite i metodi loadCasData(), loadDataRisk(), loadRiskPhrases() e loadSubstances3D();

• Calcolare gli indici 3D tramite i metodi calculateEI(), calculateMI(), calculatePCR() e calculatePEI();

• Leggere i risultati da codice tramite variabili pubbliche;

• Salvare i risultati su file tramite la funzione saveResults3D().

La classe Grafico rappresenta un istogramma e viene usata per il confronto di indici 1D e 3D. Su ogni grafico vengono rappresentati i valori di più simulazioni per lo stesso indice.

La classe Confronto viene usata per la selezione dei progetti da confrontare sia nei confronti di indici ambientali 3D che in quelli 1D. Consente la selezione di una cartella, nella quale individua tutti i file rappresentanti risultati 3D o 1D e consente all’utente di scegliere tra questi quali mettere a confronto.

La classe Preferences rappresenta un form per l’immissione dei nomi di default dei vari file utilizzati dal programma. Per il salvataggio e la lettura delle impostazioni da file viene usata la classe PreferencesStruct.

Page 28: Tesi Leghissa

25

Capitolo 3

Realizzazione

Di seguito viene descritta la parte di codifica, esponendo anche parte del codice sorgente.

Il sistema è stato codificato in linguaggio C# utilizzando il sistema di sviluppo “Microsoft Visual Studio 2008 (.Net 3.5)”. Passi principali:

1. Sviluppo della libreria LibreriaPerXML.dll 2. Modifica moduli Cape Open Proall.dll, ProPoint_Risk.dll e Promatrics.dll 3. Sviluppo interfaccia grafica

3.1 Sviluppo LibreriaPerXML.dll

Lo scopo di questa libreria è quello di fornire le funzionalità necessarie alla creazione, modifica e lettura dei file xml utilizzati durante le simulazioni di processo dai moduli Cape Open e successivamente dall’ applicativo per il calcolo degli indicatori di sostenibilità 1D e 3D. Per questo deve essere compatibile sia con l’ambiente .NET, nel quale è stata sviluppata l’interfaccia grafica, che con l’ambiente COM (Visual Basic 6.0), nel quale sono stati sviluppati i moduli Cape Open. LibreriaPerXML è stata sviluppata in ambiente .Net (codifica in C#). Per rendere i contenuti della libreria visibili in ambiente COM è stato necessario creare per ogni classe la propria interfaccia contenente i metodi che saranno visibili in COM.

Esempio: interfaccia CompositionInterface e classe Composition //definizione interfaccia visibile al COM [ComVisible(true)] [Guid("42DA4582-B134-418e-9E2A-C7228D109CD7")] //guid univoco public interface CompositionInterface{ //dichiarazione metodi e ordine di visualizzazione [DispId(1)] String getName(); [DispId(2)] double getMassFlowRate(); [DispId(3)] void setName(String name); [DispId(4)] void setMassFlowRate(double m); }

Page 29: Tesi Leghissa

26

/* dichiarazione classe Composition visibile al COM implementando l’interfaccia CompositionInterface */ [ComVisible(true)] [Guid("F603B2E9-2FC0-4e36-9849-9E708F5EA308"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(CompositionInterface))] public class Composition:CompositionInterface {

//variabili pubbliche visibili in ambiente .NET public String name = ""; public double massFlowRate = 0; //definizione metodi public Composition() { } public Composition(String name,double mass) { this.name = name; this.massFlowRate = mass; } public String getName() { return name; } public double getMassFlowRate() { return massFlowRate; } public void setName(String name) { this.name = name; } public void setMassFlowRate(double m) { massFlowRate = m; } }

• CasDataInterface

Contenuti libreria Interfaccie:

• CasDataSegmentInterface

• ComponentRiskInterface

• ComponentsRiskInterface

• FactorsInterface

• MaterialIntensityDataInterface

• QuantityClassDataRiskInterface

• QuantityClassDataRiskStreamInterface

• ResultInterface

• ResultsInterface

• RiskPhrasesInterface

• StreamInterface

• StreamNameAndComposition_Interface

Classi:

• CasData

• CasDataSegment

• ComponentRisk

• ComponentsRisk

Page 30: Tesi Leghissa

27

• Factors

• MaterialIntensityStream

• MaterialIntensityData

• QuantityClassDataRisk

• QuantityClassDataRiskStream

• Result

• Results

• RiskPhrases

• Stream

• StreamNameAndComposition

Nei prossimi paragrafi vengono descritte le classi principali della libreria:

3. 1.1 PSP-3D

CasData: la classe CasData rappresenta un array dinamico di CasDataSegment. Ogni CasDataSegment contiene un elenco di numeri di CAS. Viene utilizzata nel modulo CO “ProMatrics.dll” per la scrittura del file “cas_data.xml” e nel frontend per la lettura dello stesso file.

Metodi principali:

• append(String file, CasDataSegment c): aggiunge un oggetto di tipo CasDataSegment alla coda dell’array nel file “file”;

• Add(CasDataSegment c): agguinge l’oggetto c alla coda dell’array; • insert(int index, CasDataSegment r): inserisce l’oggetto r all’indice index; • removeAt(int index): rimuove l’elemnto all’indice index dall’array; • getAt(int i): ritorna l’elemento all’indice i; • deserialize(String file): inizializza l’array con il contenuto del file file; • serialize(String file): salva il contenuto dell’array nel file “file” in formato xml; • count(): ritorna la lunghezza dell’array. public class CasData : CasDataInterface, ICollection { //variabile contenente la lista di CasDataSegment private ArrayList streams; //aggiunge un CasDataSegment alla coda della lista nel file “file” public void append(String file, CasDataSegment c) { XmlDocument d = new XmlDocument(); XmlTextReader r = null; try { r = new XmlTextReader(file); d.Load(r); r.Close(); } catch (Exception e)

Page 31: Tesi Leghissa

28

{ //il file non esiste d.AppendChild(d.CreateXmlDeclaration("1.0", null, null)); d.AppendChild(d.CreateNode(XmlNodeType.Element, "CasData", null)); } XmlNode n = d.SelectSingleNode("CasData"); XmlNode n1 = d.CreateNode(XmlNodeType.Element, "this1", null); foreach(String s in c){ XmlElement n2 = d.CreateElement("value"); n2.AppendChild(d.CreateTextNode(s)); n1.AppendChild(n2); } n.AppendChild(n1); d.Save(file); } ….. //legge il file “file” e copia il contenuto nell’array public void deserialize(String file) { streams = new ArrayList(); //oggetto rapprentante l’intero file XmlNode n = null; …….. //aggiungo ogni nodo (CasDataSegment) foreach (XmlNode components in n.ChildNodes) { CasDataSegment seg = new CasDataSegment(); //aggiungo ogni cas number del segmento foreach (XmlNode component in components) { seg.add(((XmlText)component.FirstChild).Value); } streams.Add(seg); } } //salvo l’array nel file con path “file” public void serialize(String file){……} //restituisce ilCasDataSegment all’indice i public CasDataSegment this[int i] { get { return (CasDataSegment)streams[i]; } } ……. }

CasDataSegment: array dinamico di stringhe, dove ogni stringa rappresenta un numero di CAS (es. 1333-74-0).

Metodi principali:

• add(String s) : agguinge il numero di CAS s alla coda dell’array; • removeAt(int i): rimuove l’elemnto all’indice index dall’array; • count(): ritorna la lunghezza dell’array.

Page 32: Tesi Leghissa

29

RiskPhrases: array dinamico contenente oggetti di tipo ComponentsRisk, i quali a sua volta contengono uno o più ComponentRisk. Un ComponentRisk contiene la frase di rischio per un numero di CAS.

Metodi principali:

• appendToFile(String file, ComponentsRisk c): inserisce un elemnto alla fine del file file;

• load(String file): carica il contenuto del file file nell’array; • insert(int index, ComponentsRisk r): inserisce un elemento all’indice index; • removeAt int index): rimuove l’elemento all’indice index; • getAt(int i): ritorna l’elemento all’indice i; • count(): ritorna la lunghezza dell’array; • Add(ComponentsRisk c): aggiunge un elemento in coda;

• save(String file): salva l’array sul file file in formato xml.

ComponentRisk: contiene il nome di una sostanza (name) e la propria frase di rischio (risk, es. 11-56-35). La frase di rischio è scomposta in parti (es. 11, 56, 35) memorizzate in un array.

Metodi principali:

• ComponentRisk(String name, ArrayList risk): inizializza l'oggetto con valori da parametri;

• addPhrasesArray(String s): aggiunge la frase di rischio ricevuta da parametro(es. "15 32 13 45" o "None");

• addPhrase(String s): aggiunge un solo valore alla frase di rischio es. "22". MaterialIntensityData: array dinamico per la gestione del file “material_intensity_data.xml” contenente oggetti di tipo MaterialIntesityStream.

MetodiPrincipali:

• append(String file, String name,int connection,double waterUsage,double airUsage,double massFlowRate, Compositions comp): aggiunge un flusso con tutte le proprie caratteristiche alla coda dell’array del file file;

• insert(int index, MaterialIntensityStream r): inserisce il flusso rappresentato dall’oggetto r in coda all’array;

• serialize(String fileName): salva l’array su file xml

//salva l'array su file xml public bool serialize(String fileName) { try { System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(MaterialIntensityData), new Type[] { typeof(MaterialIntensityStream), typeof(Composition), typeof(Compositions) }); XmlTextWriter objXmlTextWriter = new XmlTextWriter(fileName, null); objXmlTextWriter.Formatting = Formatting.Indented; x.Serialize(objXmlTextWriter, this);

Page 33: Tesi Leghissa

30

objXmlTextWriter.Close(); } catch (Exception ex) { return false; } return true; }

• deserialize(String fileName): carica l’array dal file fileName;

• getAt(int i): restituisce l’oggetto all’indice i.

MaterialIntesityStream: contiene dati caratteristici ( nome, utilizzo di acqua, utilizzo di aria, connessione, portata globale) su un flusso presente nel processo chimico e la portata di ogni singolo componente (Component) di quel flusso.

Proprietà principali:

• MaterialIntensityStream(String name,int connection,double waterUsage,double airUsage,double massFlowRate, Compositions comp): inizializza l’oggetto con valori passati da parametri;

• Attributi pubblici: name, connection, waterUsage, airUsage, massFlowRate, composition.

Composition: oggetto contenente il nome (name) e la portata (massFlowRate) di una sostanza chimica.

QuantityClassDataRisk: consente la gestione del file “quantity_class_data_risk.xml”, che ha una struttura molto simile al file “material_intensity_data.xml”, con la differenza che per ogni sostanza vengono memorizzati soltanto il nome, la portata globale e la portata per ogni componente.

3.1.2 PSP-1D

Results: array dinamico di oggetti di tipo Result per la gestione del file “results.xml”.

Result: oggetto contenente dati (indice, portata, nome, flusso, tipo, valore) su una sostanza.

Metodi principali:

• Result(short type,String name,short ind,double value,String stream, double mass): inizializza l’oggetto con valori passati da parametri

• set”[type, name, ind, value, stream, mass]”(…): imposta il valore di una variabile con quello passato da parametro

• get”[type, name, ind, value, stream, mass]”(): ritorna il valore della variabile

StreamNameAndComposition: array dinamico per la gestione del file “stream_name_and_composition.xml” contenente oggetti di tipo Stream.

Stream: memorizza i seguenti dati su un flusso: indice, nome, tipo e la portata di tutte le sostanze (Components) che lo compongono.

Page 34: Tesi Leghissa

31

Metodi principali:

• Stream(short type, String name, short index, Compositions c): inizializza l’oggetto con valori passati da parametro;

• set”[type, name, ind, compositions]”(…): imposta il valore di una variabile con quello passato da parametro;

• get”[type, name, ind, compositions]”(): ritorna il valore della variabile.

Factors: rappresenta le otto categorie di impatto ambientale (AP, ATP, GWP,HTPE, HTPI, ODP, PCOP, TTP) e ne consente il salvataggio e la lettura da file xml.

3.2 Modifica moduli Cape Open Proall.dll, ProPointRisk.dll e Promatrics.dll

Il modulo Proall.dll utilizzato nel PSP-1D ed i moduli PropointRisk.dll e Promatrics.dll utilizzati nel PSP-3D sono stati sviluppati precedentemente in Visual Basic 6.0. Per un corretto interfacciamento con il front end sviluppato durante questo lavoro di tesi è stato necessario modificare le funzioni dei moduli che memorizzano su file i dati estratti dalla simulazione di processo. In tutti i moduli la funzione che esegue questo lavoro è la funzione ICapeUnit_Calculate().

Es.: scrittura file “risk_phrases.xml” nel modulo Promatrics.dll

'dichiarazione oggetti Dim riskPhr As RiskPhrases riskPhr = New RiskPhrases Dim compTotRisk As ComponentsRisk compTotRisk = New ComponentsRisk Dim compRisk As ComponentRisk For i = 1 To NumeroComponenti ReDim components_array(i) As String components_array(i) = propval(i - 1) If components_array(i) <> "" Then compRisk = New ComponentRisk

'aggiungo il nome e la frase di rischio If (get_risk(components_array(i))) <> "" Then compRisk.setName(components_array(i)) compRisk.addPhrasesArray(get_risk(components_array(i))) Else compRisk.setName(components_array(i)) compRisk.addPhrase("None") End If 'aggiungo l’oggetto all’array comTotRisk compTotRisk.Add(compRisk) End If If components_array(i) = "" Then

MsgBox("The substance " & Ids(i - 1) & " dosen't exist in the database.")

End If Next i

Page 35: Tesi Leghissa

32

'aggiungo gli elementi contenuti in compTotRisk in coda al file "risk_phrases.xml" riskPhr.appendToFile("risk_phrases.xml", compTotRisk)

Nel modulo Proall.dll è stata modificata anche la funzione getcomponent_fromEPADB(…) per la lettura del file “factors.xml”:

…… Dim factor As Factors Dim f As Factors f = New Factors On Error GoTo FactorsReadError factor = f.Read("factors.xml") f = Nothing GWP_factor = factor.getGwp PCOP_factor = factor.getPcop AP_factor = factor.getAp HTPE_factor = factor.getHtpe HTPI_factor = factor.getHtpi TTP_factor = factor.getTtp ATP_factor = factor.getAtp ……

3.3 Sviluppo interfaccia grafica

Classi:

• Form1

• Preferences

• PreferencesStruct

• TabControlMod

• Indici1D

• Indici3D

• Grafico

• Confronto

• FinalResults3D

Form1: la classe Form1 rappresenta il form principale dell’applicazione ed è quella che gestisce l’intera applicazione, appogiandosi ad istanze di altre classi per alcune funzioni specifiche, come ad esempio il calcolo degli indicatori di sostenibilità (classi Indici1D, Indici3D). Consente l’utilizzo di tutte le funzionalità in modalità grafica. Per lo sviluppo grafico vengono utilizzate le classi presenti nel framework Microsoft .Net 2.0.

Preferences: form per l’immissione degli indirizzi di default per il caricamento automatico dei vari file utilizzati dall’applicazione.

Page 36: Tesi Leghissa

33

Metodi principali:

• checkDirectory(TextBox t): controlla se la path, il nome del file e la sua estensione sono validi. I dati vengono letti dalla casella di testo passata da parametro.

private bool checkDirectory(TextBox t){ String path = t.Text; System.IO.Directory.SetCurrentDirectory(Application.StartupPath);

if (path.Length == 0){ MessageBox.Show("Error! Insert all default file names!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false; } //controllo il nome

if (System.IO.Path.GetFileNameWithoutExtension(path).Length == 0) {

MessageBox.Show("Error! "+System.IO.Path.GetFileName(path)+" is not a regular file name.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false; }

//controllo l’estensione if (!System.IO.Path.GetExtension(path).Equals(".xml")){

MessageBox.Show("Error! The only accepted file extension is .xml", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false; }

//controllo la directory if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path))){

if (System.IO.Path.GetDirectoryName(path) != null){ if (!System.IO.Path.GetDirectoryName(path).Equals("")){

MessageBox.Show("The specified path " + System.IO.Path.GetDirectoryName(path) + " does not exist!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false; }else{

t.Text = System.IO.Path.Combine(Application.StartupPath,path);

return true; } }else{

MessageBox.Show("The specified path does not exist!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false; }

} //tutto OK

t.Text = System.IO.Path.GetFullPath(path); return true; }

Page 37: Tesi Leghissa

34

PreferencesStruct: contiene gli indirizzi predefeniti dei file utlizzati nell’applicazione.

Metodi principali:

• load(): carica le preferenze dal file “preferences.xml” e le memorizza in variabili pubbliche dell’oggetto;

• save(): salva i contenuti dell’oggetto sul file “preferences.xml”;

TabControlMod: estende la classe TabControl del framework .Net con l’aggiunta di un bottone per la chiusura dei tab come da figura:

Metodi principali:

• OnDrawItem(DrawItemEventArgs e): questo metodo viene chiamato automaticamente ogni qual volta venga aggiornato il contenuto grafico della finestra e contiene il codice per il disegno della “x”, che può essere blu se il cursore non si trova su di essa, oppure rossa nel caso il cursore sia sulla “x”. Se la tab in questione non è quella attiva in quel momento, il colore della “x” è blu in tutti i casi. Sulla tab con il titolo "Start Page " non viene disegnata la “x”, perché non deve essere possibile chiudere questa tab, in quanto rappresenta la pagina iniziale dell’applicazione.

protected override void OnDrawItem(DrawItemEventArgs e){ Rectangle r = e.Bounds;

r = GetTabRect(e.Index); r.Offset(2, 2); string titel = this.TabPages[e.Index].Text; Font f = new Font(new FontFamily("Comic Sans MS"), 8,FontStyle.Italic); Brush b = new SolidBrush(Color.Blue); e.Graphics.DrawString(titel, f, b, new PointF(r.X, r.Y));

if (!titel.Equals("Start Page ")) //verifico se la tab è attiva if (attivo == e.Index){

//se il cursore è all’interno della x colore rosso, altrimenti blu

if (preInside){ b = new SolidBrush(Color.Red);

e.Graphics.DrawString("X", f1, b, new PointF(r.X + r.Width - 17, r.Y - 2));

}else{ e.Graphics.DrawString("X", f1, b, new PointF(r.X + r.Width - 15, r.Y));

}

Page 38: Tesi Leghissa

35

}else{ b = new SolidBrush(Color.Blue);

e.Graphics.DrawString("X", new Font(new FontFamily("Arial Black"), (float)7.5), b, new PointF(r.X + r.Width - 15, r.Y));

} }

• OnMouseClick(MouseEventArgs e): se il cursore si trova sulla “x” chiude la tab; • OnMouseMove(MouseEventArgs e): imposta la variabile preInside a seconda se il

cursore si trova sulla “x” o all’esterno.

Indici1D: classe che implementa l’algoritmo per il calcolo degli indicatori di sostenibilità 1D e ne consente il salvataggio su file xml.

Metodi principali:

• loadCompounds(): legge il file fileName1(di default “stream_name_and_composition.xml”) e ne memorizza i contenuti nella variabile streams. Se vengono individuati più flussi con gli stessi nome, tipo e indice viene memorizzato soltanto l’ultimo letto partendo da inizio file:

streams = new StreamNameAndComposition(); streams.deserialize(fileName1);

//devo cancellare gli stream doppi (tipo,nome e indice uguali) //considero solo l'ultimo letto for (int i = 0; i < streams.Count - 1; i++) { for (int j = i + 1; j < streams.Count; j++)

if (streams[i].name == streams[j].name && streams[i].type == streams[j].type && streams[i].ind == streams[j].ind)

{ streams.removeAt(i); --i; break; } }

• loadResults(): carica il file fileName2 (default “results_new.xml”) e lo memorizza nella varibile res. In questo caso se vengono individuati flussi con nome e tipo uguali viene considerato soltanto l’ultimo letto partendo da inizio file. Succesivamente i vari flussi vengono ordinati rispetto al loro tipo ed indice. Infine vengono calcolati alcuni valori per il calcolo finale degli indici 1D.

• calcolaIndicatori(DataGridView mainProduct,DataGridView SelStreams, DataGridView streamsList): calcola gli indicatori ambientali 1D utilizzando l’algoritmo presente nel prototipo sviluppato precedentemente. I dati di input sono quelli letti e calcolati dalle funzioni loadCompunds() e loadResults() ed i dati inseriti dall’utente da interfaccia, che vengono passati come parametri. Deve essere presente almeno un prodotto principale (mainProduct), mentre la varibile selStreams può contentere uno o più flussi presenti in streamList (tutti i flussi

Page 39: Tesi Leghissa

36

presenti nel processo). Gli otto indicatori calcolati vengono salvati nelle variabili pubbliche iout, iout_mp0, iou_mp1, iout_mp2, igen, igen_mp0, igen_mp1, igen_mp2.

• saveResults1D(String file): salva gli otto indici ambientali 1D in formato xml sul file file

public void saveResults1D(String file) { //salvo su file XmlTextWriter txt = new XmlTextWriter(file, null); txt.Formatting = Formatting.Indented; txt.WriteStartDocument(); txt.WriteStartElement("Final_Results"); txt.WriteStartElement("Iout"); txt.WriteValue(iout); txt.WriteEndElement(); txt.WriteStartElement("Iout_mp0"); txt.WriteValue(iout_mp0); txt.WriteEndElement(); txt.WriteStartElement("Iout_mp1"); txt.WriteValue(iout_mp1); txt.WriteEndElement(); txt.WriteStartElement("Iout_mp2"); txt.WriteValue(iout_mp2); txt.WriteEndElement(); txt.WriteStartElement("Igen"); txt.WriteValue(igen); txt.WriteEndElement(); txt.WriteStartElement("Igen_mp0"); txt.WriteValue(igen_mp0); txt.WriteEndElement(); txt.WriteStartElement("Igen_mp1"); txt.WriteValue(igen_mp1); txt.WriteEndElement(); txt.WriteStartElement("Igen_mp2"); txt.WriteValue(igen_mp2); txt.WriteEndElement(); txt.WriteEndElement(); txt.WriteEndDocument(); txt.Flush(); txt.Close();

}

Indici3D: classe utilizzata per il calcolo degli indicatori di sostenibilità 3D e per il loro salvataggio su file xml. L’algoritmo utilizzato per il calcolo dei quattro indici MI, EI, PCR e PEI è quello presente nel prototipo sviluppato precedentemente.

Metodi principali:

• loadCasData(): legge il file all’indirizzo fileNameCasData (di default “cas_data.xml”) e lo memorizza nella variabile casDataa.

• loadDataRisk(): legge il file all’indirizzo fileNameQuantityClassData (di default “quantity_class_data_risk.xml”) e lo memorizza nella varibile quantityClassData. Nel caso ci siano più elementi con lo stesso nome viene considerato soltanto l’ultimo letto. Inoltre vengono calcolati alcuni valori utili per il calcolo degli indicatori 3D.

Page 40: Tesi Leghissa

37

• loadRiskPhrases(): legge il file all’indirizzo fileNameRiskPhrases e lo memorizza nella variabile riskPhr.

public void loadRiskPhrases(){ riskPhrasesLoaded = false; try{ riskPhr = new RiskPhrases(); riskPhr.load(fileNameRiskPhrases); if (riskPhr.Count == 0) throw new Exception(); }catch(Exception e){

throw new Exception("Error loading Risk Phrases from" + fileNameRiskPhrases+". Invalid file.");

}

…………

riskPhrasesLoaded = true; }

• loadSubstances3D(): legge il file fileNameMaterialIntensityData e ne memorizza i contentuti nella variabile materialIntensity. Nel caso siano presenti record con connecition, name, waterUsage e airUsage uguali viene considerato soltanto l’ultimo record letto.

• loadPei(): esegue parte dell’algoritmo per il calcolo degli indicatori di sostenibilità 3D utilizzando i dati letti con le funzioni precedentemente elencate.

• calculateEI(String product,DataGridViewRowCollection coproducts,String energy): calcola l’indicatore EI (Energy Intensity). I parametri rappresentano dati inseriti dall’utente da interfaccia. Le varibili product ed energy devono contenere un solo valore (rispettivamente nome del prodotto principale del processo e valore dell’energia generata durante il processo), mentre la varibile coproducts può contenere i nomi di uno o più prodotti aggiuntivi del processo. L’incice EI viene memorizzato nella varibile pubblica energyIntensityResult.

• calculateMI(String product,DataGridViewRowCollection coproducts,String waterForm,String oxyForm,String nitrForm): calcola l’indicaore MI (Material Intesity). I parametri waterForm, oxyForm e nitrForm rappresentano rispettivamente le quantità di acqua, ossigeno e azoto formate durante il proccesso. Il valore dell’indice MI viene memorizzato nella varibile pubblica materialIntensityResult.

• calculatePCR(DataGridViewRowCollection substances,DataGridViewRowCollection selSubstances): calcola l’indicatore PCR (Potential Chemical Risk) e lo memorizza nella varibile pubblica pcreResult. Il parametro substances deve contenere l’elenco delle sostanze presenti nell’ oggetto materialIntensity, mentre la variabile selSubstances contiene l’elenco delle stesse sostanze con l’aggiunta della classe di frequenza per ogni sostanza.

• calculatePEI(DataGridViewRowCollection substances, DataGridViewRowCollection selSubstances): calcola l’indicatore PEI (Potential Environmental Indicator) e ne

Page 41: Tesi Leghissa

38

memorizza il valore nella varibile globale peiResult. Il parametro substances contiene l’elenco degli flussi presenti nell’oggetto materialIntensity, mentre il parametro selSubstances contiene lo stesso elenco di flussi con il relativo stato fisico (gassoso, liquido, solido, polvere solida).

• saveResults3D(): salva gli indicatori di sostenibilità 3D sul file all’indirizzo fileNameResults3D in formato xml.

Grafico: estende la classe Panel del Framework .Net e consente il disegno di un istogramma sull’ interfaccia grafica. Viene utilizzato per rappresentare più valori dello stesso indice di simulazioni diverse. In questo modo è possibile confrontare in modo grafico soluzioni diverse.

Esempio:

Variabili globali:

• double[] val1: array contenente i valori da rappresentare sul grafico;

• String[] legenda: array contenente l’elenco dei nomi dei processi confrontati;

• String[] titolo: titolo del grafico. Ogni elemento dell’array rappresenta una riga;

• SolidBrush[] brushes: colori per il riempimento dei singoli istogrammi;

• SolidBrush[] brushes1: colori per i bordi dei singoli istogrammi;

Questi attibuti devono venire impostati dall’oggetto che crea un istanza della classe Grafico.

Metodi principali:

• OnPaint(…): sovrascrivendo questo metodo è possibile aggiungere degli oggetti da disegnare sull’oggetto. Se sono state definite tutte le varibili per il disegno del grafico viene chiamata la funzione Draw(…), la quale ritorna la rappresentazione grafica dell’istogramma sotto forma di un immagine bitmap. Questa immagine viene poi disegnata sul pannello servendosi di un oggetto di tipo RectangleF.

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e){

System.Drawing.Drawing2D.GraphicsPath a = new GraphicsPath();

Page 42: Tesi Leghissa

39

RectangleF rec = new RectangleF(0, 0, this.Width, this.Height);

Graphics g = e.Graphics; if (val1 != null && legenda != null && titolo != null) { a.AddRectangle(rec); this.Region = new Region(a);

g.DrawImage(Draw(Color.White, this.Width, this.Height, titolo, val1, legenda), new Point(0, 0));

} }

• Draw(Color bgColor, int width, int height,String []titolo,double []valori,String []legenda): il metodo Draw(…)ritorna un oggetto di tipo Bitmap, rappresentante l’istogramma da disegnare. Il metodo riceve come parametri il colore dello sfondo(bgColor), le dimensioni dell’immagine(width, height), il titolo del grafico, i valori da rappresentare ed i nomi identificativi dei vari valori (legenda).

Confronto: interfaccia grafica usata per il confronto di risultati di processi diversi. Consente la selezione di uno o più gruppi di indici 1D o 3D, salvati su file xml in una directory a scelta.

Proprietà principali:

• caricaProggetti(int tipo): identifica tutti i file rappresentanti indicatori di sostenibilità monodimensionali o tridimensionali nella cartella definita dalla varibile globale folder. Il parametro tipo indica se si sta caricando indicatori 3D (tipo=0) o 1D (tipo=1). I proggetti rilevati vengono elencati sul form ed è poi possibile scegliere quali confrontare.

• SelectedFiles: varibile pubblica di tipo DataGridViewRowCollection contenente l’elenco dei file da confrontare.

FinalResults3D: classe utlizzata per la memorizzazione e la lettura di indicatori di sostenibilità 3D da file xml.

Attributi principali:

• materialIntensity, energyIntensity, chemicalRisk, PEI: varibili contenenti i valori dei rispettivi indicatori 3D.

Metodi principali:

• serialize(String file): memorizza i valori delle variabili materialIntensity, energyIntensity, chemicalRisk, PEI in formato xml sul file file.

• static FinalResults3D deserialize(String fileName): ritorna un oggetto di tipo FinalResults3D il quale contiene i valori degli indicatori 3D memorizzati nel file fileName.

Page 43: Tesi Leghissa

40

Capitolo 4

Interfaccia grafica

Si espone il risultato dell’interfaccaia grafica Intrefaccia.exe.

All’epertura l’applicazione si presenta come in Figura. Viene aperta la “Start page”, dalla quale è possibile scegliere fra le seguenti funzionalità:

• 1D Data Input: inserimento dei dati per il calcolo degli indici monodimensionali;

• 3D Data Input: inserimento dati e calcolo degli indici tridimensionali;

• Weighting Factors: impostazione dei valori delle categorie di imapatto ambientale;

• Results names: immissione dei nomi per le sostanze chimiche presenti nel file risultato delle simulazioni di processo 1D (default “results_new.xml”).

Dal menu Tools è possibile avviare il confronto di indicatori di sostenbilità 1D (1D Comparison) e 3D (3D Comparison). Dal menu file è invece possibile accedere alle preferenze (Preferences) dell’applicazione.

Figura: Start Page

Page 44: Tesi Leghissa

41

4.1 Preferenze

Figura: Impostazioni di default

Nella finestra Preferences è possibile impostare i nomi e gli indirizzi di default di tutti i file utilizzati nell’ applicazione. In questo modo i file possono venire caricati automaticamente quando se ne ha bisogno, senza l’intervento dell’utente. In caso di errore (es. indirizzo errato) viene richiesta la selezione di un altro file valido all’utente.

4.2 Input dati 1D

Per prima cosa vengono caricati i due file risultato della simulazione di processo (dafault “results_new.xml” e “stream_name_and_composition.xml”). In caso di errore nella lettura di uno dei file viene aperta in automatico una finestra, come da Figura, per la selezione di un altro file valido. La procedura si ripete nel caso venga selezionato un altro file non valido. Se invece l’operazione viene annullata (Cancel), sarà poi possibile tentare una nuova lettura del file dal menu File.

Figura: selezione file

Page 45: Tesi Leghissa

42

Dopo aver caricato con successo i contenuti dei due file e possibile procedere all’immissione vera e propria dei dati. È necessario scegliere almeno un prodotto principale dalla lista Available Compunds. Dalla lista Available streams for the process under study è invece possibile scegliere:

Processo chimico: flussi in entrata, in uscita ed i flussi di materiale sprecato Processo di generazione di energia: flussi in entrata e flussi di materiale sprecato

Nel menu a scomparsa Details sono visibili tutti i dati sulle sostanze presenti nei due file letti precedentemente.

Figura: calcolo indici 1D

Cliccando sul pulsante Calculate results 1D dal menu Run si procede al calcolo degli indici di sostenibilità monodimensionali. In caso di errori sui dati selezionati questi vengono segnalati all’utente che ha poi la possibilità di modificare i dati immessi e ritentare il calcolo.

Figura: Esempio di errore nella selezione dei dati

Page 46: Tesi Leghissa

43

Se il calcolo ha successo viene aperta una nuova sottofinestra (tab) 1D Results, dove sono visibili i risultati sia in forma numerica (arrotondati alla 6 cifra decimale) che grafica.

Dal menu File è possibile salvare i risultati su file tramite il bottone Save to file.

4.3 Input dati 3D

Gli indici 3D vanno calcolati nella seguente sequenza: MI,EI,PCR,PEI. Quindi all’apertura viene visualizzata la pagina per il calcolo dell’indice MI. Dopo aver immesso i dati richiesti e calcolato con successo l’indicatore è possibile procedere al calcolo del prossimo indice cliccando sul bottone apposito nella sottofinestra Data Input Steps. Durante le varie fasi vengono letti automaticamente i file risulatato della simulazione di processo. In caso di errori viene richiesto l’intervento dell’utente che ha la possibilità di selezionare altri file, altrimenti non è possibile procedere con i calcoli. È anche possibile leggere file diversi da quelli predefiniti dal menu File. Per calcolare l’intesità in termini di materiali (MI) è neccessario:

1) Selezionare il prodotto principale (uno solo), tra quelli presenti nella lista delle sostanze, con il bottone Select Product;

2) Inserire gli eventuali sottoprodotti di valore, tra quelli presenti nella lista delle sostanze, con il bottone Add salable co-product. Il prodotto principale non può essere anche un coprodotto;

3) Inserire le quantità di acqua, ossigeno e azoto formate nella reazione del processo chimico.

Page 47: Tesi Leghissa

44

Figura: Inserimento dati e calcolo indice MI

Dopo aver immesso tutti i dati si procede al calcolo con il bottone Calculate. Nel caso non ci siano errori è poi possibile procedere all’inserimento dei dati per il calcolo dell’indice EI.

Per calcolare l’intensità in termini di energie (EI) è neccessario:

1) Selezionare il prodotto principale (uno solo), tra quelli presenti nella lista delle sostanze, con il bottone Select Product;

2) Inserire gli eventuali coprodotti vendibili, tra quelli presenti nella lista delle sostanze, con il bottone Add salable co-product. Il prodotto principale non può essere anche un coprodotto;

3) Inserire la quantità di energia generata dal processo.

Figura: Inserimento dati e calcolo indice EI

Page 48: Tesi Leghissa

45

Dopo aver immesso tutti i dati si procede al calcolo con il bottone Calculate. Nel caso non ci siano errori è poi possibile procedere all’inserimento dei dati per il calcolo dell’indice PCR. In questo caso è neccessario attribuire ad ogni sostanza una classe di frequenza tra quelle presenti nella tabella Available Frequency Classes. Infine è possibile procedere al calcolo tramite il bottone Calculate.

Figura: Inserimento dati e calcolo indice PCR

L’ultima fase prevede il calcolo dell’indice PEI. In questo caso è neccessario associare ad ogni sostanza il proprio stato fisico, tra quelli presenti nella lista Physical states. Dopodichè si procede al calcolo finale dell’indice.

Figura: inserimento dati e calcolo indice PEI

In tutte le quattro fasi dopo aver premuto il bottone Calculate vengono per prima cosa effettuati controlli sulla correttezza dei dati immessi. Nel caso sia tutto regolare viene calcolato l’indice scelto ed il risultato viene esposto in forma numerica con precisione a sei cifre decimali. Se sono invece presenti errori, il calcolo viene annullato e viene chiesto all’utente di correggere i

Page 49: Tesi Leghissa

46

dati errati o di inserire i dati mancanti. Dopo aver calcolato con successo tutti e quattro gli indici è possibile salvarli su file dal menu FileSave to file.

Figura: Esempio errore dati immessi

4.4 Confronto indicatori 3D

Nel confronto di indicatori 3D viene per prima cosa aperta una finestra per la selezione della cartella nella quale si trovano i risultati 3D che si vuole mettere a confronto. Dopodiché comprare un'altra finestra, come in Figura, nella quale sono elencati tutti i file xml contenenti indicatori 3D presenti nella cartella selezionata. L’utente può così selezionare i processi da confrontare con i tasti Select per aggiungere un processo o Select all per aggiungere tutti i processi.

Figura: selezione processi da confrontare

Con il bottone Show Comparison si procede al confronto dei risultati in forma numerica. Tutti i valori dei quattro indici vengono rappresentati in una tabella. Nella colonna Graph è possibile selezionare quali processi rappresentare sui grafici.

Page 50: Tesi Leghissa

47

Figura: confronto numerico di indicatori 3D

Con il bottone Show Graphs si procede al confronto grafico dei risultati selezionati. Viene aperta una nuova sottofinestra intitolata 3D Comparison: Graphs nella quale sono presenti quattro grafici, uno per ogni indice.

Figura: confronto grafico di indicatori 3D

4.5 Confronto indicatori 1D

La selezione dei processi da confrontare è identica al caso del confronto di indicatori di sostenibilità 3D. Il confronto numerico è anche molto simile, ma vengono rappresentati soltanto gli indici Iout, Iout_mp0, Igen e Igen_mp0 sugli otto totali.

Figura: confronto numerico di indicatori 1D

Page 51: Tesi Leghissa

48

Il confronto grafico è composto da quattro grafici, uno per ogni indice.

Figura: confronto grafico di indicatori 1D

4.6 Categorie di impatto ambientale

Con la funzionalità Weighting factors è possibile impostare i valori delle otto categorie di impatto ambientale, utilizzati durante le simulazioni di processo per il calcolo degli indici ambientali. All’apertura vengono esposti sul form i valori presenti nel file predefinito, altrimenti se il file non esiste vengono impostati i valori di default (1). L’utente può poi inserire i nuovi valori (numeri interi o decimali) e salvare le modifiche tramite il pulsante Save o dal menu FileSave to file.

Page 52: Tesi Leghissa

49

4.7 Inserimento dei nomi delle sostanze del processo (1D)

Con questa funzionalità è possibile immettere i nomi per le sostanze chimiche presenti in uno dei due file risultato delle simulazioni di processo 1D (default “results_new.xml”). All’apertura viene tentata una lettura automatica del file dall’indirizzo predefinito. In caso di errore si ha la possibilità di scegliere un altro file. I valori presenti nel file vengono poi esposti in tabella, ordinandoli per tipo. È poi possibile immettere i nomi nella colonna Stream. Tutti gli altri valori non sono modificabili. Alla fine si può salvare le modifiche su file tramite il bottone Save o dal menu FileSave to file.

Page 53: Tesi Leghissa

50

Capitolo 5

Conclusioni

In questa tesi si è affrontato il problema dello sviluppo di un front end per la pittaforma PSP. È stata sviluppata l’applicazione Interfaccia.exe per la previsione di sosteniblità di processi industriali mediante il calcolo ed il confronto di indicatori di sostenibilità mondodimensionali (1D) e tridimensionali (3D). L’interazione con l’utente, sia per l’immissione dati che per l’esposizione dei risultati viene gestita da interfaccia grafica. L’interfacciamento dati con gli altri moduli della pittaforma viene invece fatto con l’utilizzo di file XML, utilizzando la libreria LibreriaPerXML.dll.

Interfaccia.exe è composta da 9 classi per un totale di 5525 righe di codice. LibreriaPerXML.dll contiene invece 16 classi e 15 interfaccie per un totale di 1857 righe di codice. Entrambi i moduli sono codificati in C#. Inoltre sono state modificate porzioni di codice nei moduli Cape Open per il salvataggio dei risultati delle simulazioni di processo su file XML.

Sono stati così raggiunti gli obbiettivi posti all’inizio di questo lavoro di tesi:

1. Studio delle tecnologie .Net e XML 2. Raccolta dei requisiti, mediante interviste e analisi dei due prototipi

Final_interface.exe e 3DMetrics.exe 3. Progettazione 4. Codifica 5. Test

Per un ulteriore verifica di eventuali errori è necessaria ancora una fase di test in produzione.

Page 54: Tesi Leghissa

51

Bibliografia 1. Letitia Toma, Progettazione assistita dal computer di processi industriali sostenibili, Tesi

di dottorato in ingegneria chimica, Università di Padova, 2008. 2. The Code Project , A TabControl with tab page closing capability.

http://www.codeproject.com/KB/tabs/closabletabcontrolpage.aspx 3. The Code Project, Using XML in C# in the simplest way.

http://www.codeproject.com/KB/cpp/XMLReadWrite.aspx 4. C# Help, Building COM Objects in C#.

http://www.csharphelp.com/archives/archive281.html 5. WindowsClient.net, DataGridView FAQ.

http://www.windowsclient.net/Samples/Go%20To%20Market/DataGridView/DataGridView%20FAQ.doc

6. Microsoft Support, Come serializzare un oggetto in XML utilizzando Visual C#. http://support.microsoft.com/kb/815813/it