Вы находитесь на странице: 1из 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


Indice
1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1 PSP Framework . . . . . . . . . . . . . . . . . . . . . 3
2.2 Sostenibilità . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 Indicatori di sostenibilità . . . . . . . . . . . . . . . . 5
2.2.1.1 Indicatori tridimensionali (3D) . . . . . . . . . . 6
2.2.1.2 Indicatori monodimensionali (1D) . . . . . . . . . 7
2.3 Cape Open . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Moduli CO per gli indici 3D . . . . . . . . . . . . . . . 9
2.3.2 Moduli CO per gli indici 1D . . . . . . . . . . . . . . . 9
2.4 Implementazione . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Implementazione PSP-3D . . . . . . . . . . . . . . . 10
2.4.2 Implementazione PSP-1D . . . . . . . . . . . . . . . 10
2.5 Requisiti del sistema . . . . . . . . . . . . . . . . . . . . 11
2.6 Specifiche . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Casi d’uso . . . . . . . . . . . . . . . . . . . . . . . 15
2.7.1 Calcolo indici 1D . . . . . . . . . . . . . . . . . . . 16
2.7.2 Calcolo indici 3D . . . . . . . . . . . . . . . . . . . 17
2.7.3 Confronto indici 1D . . . . . . . . . . . . . . . . . 18
2.7.4 Confronto indici 3D . . . . . . . . . . . . . . . . . 18
2.7.5 Impostazione dei valori delle categorie di impatto ambientale . .. 19
2.7.6 Modifica risultati simulazione 1D . . . . . . . . . . . . . 19
2.8 Diagrammi delle classi . . . . . . . . . . . . . . . . . . . 20
2.8.1 LibreriaPerXML . . . . . . . . . . . . . . . . . . . 20
2.8.1.1 PSP-3D . . . . . . . . . . . . . . . . . . 20
2.8.1.2 PSP-1D . . . . . . . . . . . . . . . . . . 22
2.8.2 Front end . . . . . . . . . . . . . . . . . . . . . 23
3 Realizzazione . . . . . . . . . . . . . .
.. . . . . . . . . 25
3.1 Sviluppo LibreriaPerXML . . . . . . . ... . . . . . . . . 25
3.1.1 PSP-3D . . . . . . . . . . . .
.. . . . . . . . . 27
3.1.2 PSP-1D . . . . . . . . . . . .
.. . . . . . . . . 30
3.2 Modifica moduli Cape Open . . . . . . . . . . . . . . . . 31
3.3 Sviluppo interfaccia grafica . . . . . . . . . . . . . . . . . 32
4 Interfaccia grafica . . . . . . . . . . . . . . . . . . . . . . 40
4.1 Preferenze . . . . . . . . . . . . . . . . . . . . . .. 41
4.2 Input dati 1D . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Input dati 3D . . . . . . . . . . . . . . . . . . . . . . 43
4.4 Confronto indicatori 3D . . . . . . . . . . . . . . . . . . 46
4.5 Confronto indicatori 1D . . . . . . . . . . . . . . . . . . 47
4.6 Categorie di impatto ambientale . . . . . . . . . . . . . . . 48
4.7 Inserimento dei nomi delle sostanze del processo (PSP-1D) . . . . . . 49
5 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . 50
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.

1
Riassunto dei capitoli seguenti

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

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.

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

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

4
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à.
System Definition

Ambiente
1D
3D Indicators
Calculation
2D 2D
3D

Economia Società Cost Estimation


2D
1D 1D

2D and 1D Indicators
Calculation

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

5
2.2.1.1 Indicatori tridimensionali (3D)

Per i processi chimici, nella maggior parte dei casi, vengono definiti quattro indicatori 3D:

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


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.

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


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.

3. Rischio chimico potenziale (PCR - Potential Chemical Risk)


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:

Hazard Class

Potential Chemical Risk


Quantity Class

Potential Exposure Class

Frequency Class

6
4. Potenziale Impatto Ambientale (PEI - Potential Environmental Impact)
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:

Quantity Class

Transfer Coefficient

Receiving Medium
(air, water, soil)
Potential Environmental Impact
(air, water, soil)

Quantity Class

Total Potential
Environmental Impact

Hazard Class

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

Process Simulation

Streams Composition

Environmental Impact
Toxicological DB Impact categories values WAR Indexes

Weighting factors for the


Set by the user
impact categories

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.
Iout
(ep )
Iout
(cp )

Mass Mass

Energy
Energy
Iwe Chemical
Iwe
(ep ) (cp )
Generation
Process
Process
Waste Energy Waste Energy

Mass Mass

I in
(ep )
Iin(cp )

Figura: bilancio complessivo di un processo

7
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 sopra elencate sono suddivise in due classi:
Atmosferica globale e Tossicologica locale.

Indici di impatto ambientale

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

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

9
2.4 Implementazione
2.4.1 Implementazione PSP-3D
Simulazione di
Moduli CO Tossicologica DB
processo

Risultati

Dati estratti con i


moduli CO Dati inseriti dall’utente
da interfaccia

CAS_data.txt Quantity_class_data_risk.txt material_intensity_data.txt risk_phrases.txt Classe di frequenza Stato fisico Materiale ricevente

Calcolo indicatori 3D

MI EI PCR PEI

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 Simulazione
Modulo CO
DB di processo

Risultati

Results.txt Dati inseriti dall’utente


Stream_name_and_composition.txt
da interfaccia

Calcolo
indicatori 1D

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.

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

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

Calcolo indicatori ambientali 1D: 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”.
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.

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

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

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>
<name>SULFURIC</name>
13
<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>

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

Interfaccia

Calcolo indici 1D

Calcolo indici 3D

Confronto indici 1D

Ing. chimico

Confronto indici 3D

Impostazione valori
categorie di impatto
ambientale

Modifica risultati
simulazione 1D

I casi d’uso dell’applicazione sono:

• calcolo degli indici 1D


• calcolo degli indici 3D
• confronto di indici 3D di simulazioni diverse
15
• 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

«extends»
leggi
stream_name_and_composition.xml

«uses»
leggi risultati
simulazione
«extends»
leggi results.xml
Calcola Indici 1D

«extends»
inserisci prodotti
principali del processo
«uses»
«uses» «extends»
inserisci dati da
«uses» interfaccia
inserisci i flussi in
entrata al processo
inserisci i flussi in «extends» chimico
calcola indici
entrata al proc. di gen. di
energia
«extends» «extends»
inserisci i flussi in
uscita al processo chimico
salva risultati su
file inserisci i flussi
sprecati dal proc. di gen. di
energia
«extends» inserisci i flussi dello
spreco del processo
chimico

Flusso degli eventi:

i. Lettura risultati simulazione


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

16
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
17
2.7.3 Confronto indici 1D

Seleziona file
«uses» risultati da confrontare

Confronta indici 1D Visualizza confronto


«extends» in forma numerica
«uses»

Visualizza
confronto «extends»
Visualizza
confronto su grafici

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

Seleziona file
«uses» indici 3D da confrontare

Confronta indici 3D Visualizza confronto


«extends» in forma numerica
«uses»

Visualizza
confronto «extends»
Visualizza
confronto su grafici

Flusso degli eventi:

i. Selezione processi da confrontare


j. Visualizzazione confronto numerico
k. Visualizzazione confronto grafico

18
2.7.5 Impostazione dei valori delle categorie di impatto ambientale
Modifica GWP

Apri file Modifica HTPE


«extends»
«extends»
«uses»
Modifica ODP
«extends»

«uses» «extends»
Modifica Weighting Modifica valori Modifica HTPI
factors «extends»

«uses» «extends»
«extends» «extends» Modifica PCOP

Salva file
Modifica TTP

Modifica AP
Modifica ATP

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

Apri file
«uses»

«uses»
Modifica results 1D Inserisci nomi
sostanze
«uses»

Salva file

Flusso degli eventi:

i. Apertura file “results.xml”


j. Inserimento nomi sostanze
k. Salvataggio modifiche su file

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

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

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

22
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:

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

24
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);
}

25
/* 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; }
}

Contenuti libreria

Interfaccie:

• CasDataInterface
• CasDataSegmentInterface
• ComponentRiskInterface
• ComponentsRiskInterface
• FactorsInterface
• MaterialIntensityDataInterface
• QuantityClassDataRiskInterface
• QuantityClassDataRiskStreamInterface
• ResultInterface
• ResultsInterface
• RiskPhrasesInterface
• StreamInterface
• StreamNameAndComposition_Interface

Classi:

• CasData
• CasDataSegment
• ComponentRisk
• ComponentsRisk
26
• 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)
27
{
//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.

28
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);

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

30
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
31
'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.

32
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;
}

33
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));
}

34
}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
35
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.
36
• 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

37
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();
38
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.

39
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
Figura: Start Page “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.

40
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

41
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

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

43
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


44
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

45
dati errati o di inserire i dati mancanti. Dopo aver calcolato con successo tutti e quattro gli indici è
possibile salvarli su file dal menu FileSave 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.

46
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

47
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 FileSave to
file.

48
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 FileSave to file.

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

50
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/DataGrid
View%20FAQ.doc
6. Microsoft Support, Come serializzare un oggetto in XML utilizzando Visual C#.
http://support.microsoft.com/kb/815813/it

51

Вам также может понравиться