Capitolo 5: Realizzazione del modello termodinamico
5.2 Costruzione del ciclo in ambiente Matlab/Simulink
5.2.3 Modello Simulink
In questa sezione si descrive come è stato ricostruito il ciclo ORC in ambiente Simulink,
specificando i blocchi che si sono utilizzati e tra parentesi in che categoria della libreria (Library Browser) è possibile trovarli.
Il modello Simulink è costruito in modo da leggere i dati fissati dall'editor Matlab descritto nel paragrafo precedente ed eseguire i calcoli necessari per risolvere il ciclo termodinamico.
La Figura 5.2 offre una visione d'insieme del modello, specificando la funzione dei calcoli effettuati nelle varie zone del piano di lavoro di Simulink.
%approach point T1=DTa+Tp_i; %condensatore T3=Ts_i-DTa; %evaporatore %pinch point Tpr=T1-DTpp; %condensatore Tf=refpropm('T','P',p_ev, 'Q', 0,fluid); hf=refpropm('H','P',p_ev, 'Q', 0,fluid); Tsr=Tf+DTpp; %evaporatore sim('orc'); %controllo X4 if (X4<1 ) disp('X4<1') ; end
I dati in ingresso fissati nel file “ingressi” (vedi File Matlab “ingressi”) vengono letti nel modello Simulink tramite blocchi Constant (in Library Browser, Sources) in cui nel campo “Constant value” viene inserito il nome della variabile salvata nel Workspace di Matlab anziché un valore numerico specifico.
Figura 5.3: Lettura dei dati in ingresso Figura 5.2: Modello Simulink, Legenda.
In questo modo il modello Simulink può essere utilizzato per effettuare i calcoli per qualsiasi set di dati in ingresso andando a variarli agevolmente dal file “ingressi” e senza dovere agire sui blocchi. I blocchi “Constant” sono stati collegati ognuno ad un blocco “Goto” (in Library Broswer, Sinks), che a sua volta invia il segnale ai corrispondenti blocchi “From” (Library Broswer, Sources) all'interno del modello.
Ogni blocco “From” infatti richiama un determinato blocco “Goto” tramite un sistema di etichette (tag) che il programmatore assegna, in questo modo il modello risulta meno fitto, senza troppe connessioni tra blocchi che si intersecano tra loro.
Per il calcolo dei punti si è seguito l'ordine introdotto nel paragrafo Equazioni del modello termodinamico dove è descritto il modello termodinamico adottato.
Si utilizzano i blocchi “Matlab function” (in Library Browser, User-Defined functions) per il calcolo di ogni entalpia, entropia e temperatura tramite il comando “refpropm”.
Figura 5.4: Impostazione di un blocco Constant con il nome della variabile generica
Figura 5.5: Esempio di blocco Goto richiamato da più blocchi From nel modello
All'ingresso del blocco si hanno i dati noti (“u”) e l'informazione sul fluido di lavoro in formato ASCII (“g”) per il calcolo della proprietà “y” (h1 nell'esempio).
In Figura 5.6 , “u” è un segnale ad un solo componente (la temperatura), poiché per il punto 1 l'altra informazione nota è il titolo nullo (condizione di liquido saturo); per altri punti “u” è un segnale a due componenti e quindi il blocco “Matlab Function” sarà preceduto da un blocco “Mux” (in Library Browser, Signal Routing). Si ha un esempio di ciò in Figura 5.7, dove i dati necessari per il calcolo dell'entalpia del punto 3 sono temperatura e pressione.
All'interno di ogni blocco “Matlab Function” si assegna alla function “y” il nome del parametro da calcolare (h1 nell'esempio), si specifica da che variabili dipende (“u” e “g”) e la si inizializza assegnandole un valore nullo.
Tramite il comando “char”, si converte di nuovo la stringa relativa al fluido da formato ASCII (“g”) a caratteri alfa-numerici (“f”). Il nome del fluido è contenuto all'interno di questo vettore in
colonna, ma per poterlo utilizzare all'interno del comando “refpropm” è necessario che il nome sia scritto in riga.
Si è fatta quindi una trasposizione di “f” mediante il comando “reshape”: il vettore b contiene le componenti di f, ma scritte in un'unica riga e con un numero di colonne pari al numero di righe del vettore “x” (dimensione di “f”).
Figura 5.6: Esempio “Blocco Matlab” Function, calcolo dell'entalpia del punto 1
Figura 5.7: Esempio Blocco "Matlab Function", calcolo entalpia punto 3
function y = h1(u,g) %#codegen
Infine si calcola la proprietà voluta richiamando il comando “refpropm”. Ad esempio nel caso di segnale “u” ad una componente si avrà:
Mentre, nel caso di vettore a due componenti, si specifica a che componente di “u” ci si riferisce: y = refpropm('H', 'T', u(1), 'P', u(2), b);
Per il calcolo del punto 2 all'uscita dalla pompa si è utilizzato un blocco “Function” (in Library Browser, User-Defined functions) preceduto da un “Mux” che permette di creare un segnale “u” in ingresso alla function composto da tre componenti (nell'ordine h1, ηpump, h2is).
Si è poi inserita la formula all'interno del blocco “Function” per il calcolo dell'entalpia del punto 2 riferendosi all'equazione (5.4):
f
(
u)
=(
u(
3)
−u(
1))
u
(
2)
+u(
1)
(5.19)Analogamente, all'uscita dell'espansore si sono utilizzati un blocco “Mux” e un blocco “Function” per il calcolo dell'entalpia del punto 4 secondo la (5.11).
Figura 5.8: Pompa, Blocco “Function” per il calcolo dell'entalpia in 2
f=char(g);
%leggo la dimensione del vettore colonna f x=size(f);
%creo il vettore riga b b=reshape(f,1,x(1));
La formula inserita è:
f (u)=u(1)−u(3)(u (1)−u (2)) (5.20)
Per il calcolo del parametro X4, si sono richiamate le informazioni necessarie in ingresso (h4, hg, h1) tramite dei blocchi “From” (Figura 5.10).
Il blocco “Function” viene impostato seguendo l'equazione (5.18) inserendo la formula:
f (u)=(u(1)−u(3))
(u(2)−u(3))
(5.21) e tramite il blocco “ToWorkspace” (in Library Browser, Sinks) si fa in modo che il valore numerico sia inviato al Workspace di Matlab in modo che possa essere letto dal controllo al termine del file “ingressi” (vedi paragrafo 5.2.2).Si imposta ora la sezione per il calcolo della portata di fluido di lavoro circolante nel ciclo e della temperatura d'uscita dei fumi dopo lo scambio di calore all'evaporatore.
Figura 5.9: Espansore, blocco "Function" per il calcolo dell'entalpia
nel punto 4
Per il calcolo della portata di fluido di lavoro secondo la (5.7), si imposta un blocco “Function” inserendo la formula:
f (u)=u(1)(u(2)−u(3))
(u(4)−u(5))
(5.22) e per la temperatura d'uscita fumi (5.8):f (u)=u(2)−u(3)(u(4)−u(5))
u (1) (5.23)
Si inserisce inoltre il calcolo per l'efficienza di recupero secondo (2.9) richiamando tramite un blocco “Constant” la temperatura ambiente T0 definita nel file “ingressi” e impostando un blocco “Function” :
f (u)=(u(1)−u(2))
(u(1)−u(3))
(5.24)Si richiama il valore della temperatura Tpr e del calore specifico (“cp_p”) tramite blocchi
“Constant”, il resto dei dati viene richiamato tramite blocchi “From”. La formula inserita nel blocco “Function” per il calcolo della portata d'acqua di raffreddamento segue la (5.14) è:
f (u)=u(5)(u (2)−u(3))
u(4)(u (1)−u(6)) (5.25)
mentre per la temperatura d'uscita dell'acqua di raffreddamento (5.15) vale:
f (u)=u(4)+ u (5)(u(6)−u(2))
u (1)u (2) (5.26)
Infine nella parte inferiore del modello si sono inseriti i calcoli per le potenze, il rendimento di ciclo e il parametro “a”.
Figura 5.12: Calcolo della portata e della temperatura d'uscita dell'acqua di raffreddamento
Si impostano blocchi “Function” inserendo le seguenti formule: • potenza alla turbina (5.10):
f (u)=u(1)(u(2)−u(3)) (5.27) • calore assorbito all'evaporatore(5.6):
f (u)=(u (1)−u (2))u (3) (5.28) • potenza alla pompa (5.3):
f (u)=u(1)(u(2)−u(3)) (5.29) • potenza di riferimento (6.6): f (u)=u(1)(u(2)−u(3))(1−u (3) u (2)) (5.30) • parametro “a” (6.5): f (u)=(u (1)−u(2)) u(1) (5.31)
Si ricava la potenza netta tramite un blocco “Add” (Library Browser, Math Operations) e il rendimento termico tramite un blocco “Divide” (Library Browser, Math Operations). Il parametro “a” viene inviato al Workspace di Matlab.