6. Oprogramowanie wykorzystane do budowy modelu
6.2. Komponenty pakietu SimuSage
Po prawid³owo przeprowadzonej instalacji, w zak³adkach Delphi zawieraj¹cych komponenty, pojawia siê dodatkowy zestaw narzêdzi pakietu SimuSage, wród któ-rych znajduj¹ siê ró¿ne typy strumieni: PbInputStream, PbStream, PbCoallStream, PbCoallInputStream oraz obiekty, za których pomoc¹ mo¿na wykonywaæ ró¿ne ope-racje na strumieniach (obliczaæ stan równowagi, ³¹czyæ, rozdzielaæ, podgrzewaæ):
PbGttBalance, PbPhaseSpliter, PbHeatExch, PbSpliter2, PbMixer, PbIsoMixer. Wyko-rzystuj¹c komponenty wizualne, u¿ytkownicy tworz¹ schemat przep³ywu materia³u w analizowanym procesie. U¿ywaj¹c strumieni jako podstawowego nonika materia³u, buduj¹ sieæ po³¹czeñ pomiêdzy komponentami, tworz¹c tym samym cie¿kê przep³ywu materia³u w modelowanym procesie. Na rysunku 22 przedstawiono zestaw g³ównych komponentów pakietu SimuSage.
Poni¿ej przedstawiono opis i obszar zastosowañ wybranych komponentów pakietu.
Strumienie s¹ podstawowym nonikiem materia³ów w modelowanym procesie. Ich g³ówne zadanie polega na po³¹czeniu u¿ytych w danym programie komponentów, które nie mog¹ bezporednio ³¹czyæ siê miêdzy sob¹. Komponenty SimuSage, okrela-ne w dokumentacji SimuSage jako unit operations, to obiekty wykorzystywaokrela-ne w celu
przeprowadzenia ró¿nych operacji na strumieniach. Za ich pomoc¹ mo¿na na przyk³ad opisaæ wystêpuj¹ce w procesie rzeczywistym lokalne procesy mieszania strumieni zawieraj¹cych materia³y o ró¿nych sk³adach chemicznych lub te¿ okreliæ stan równo-wagi, który osi¹gany jest wy³¹cznie w okrelonym miejscu lub w okrelonym czasie procesu.
Rys. 22. Zestaw komponentów SimuSage
Ka¿dy strumieñ ma parametr ToUnit i FromUnit, za których pomoc¹ okrelana jest cie¿ka przep³ywu materia³u pomiêdzy innymi komponentami. U¿ytkownik ma do dyspozycji wiele typów strumieni, spe³niaj¹cych ró¿ne funkcje w tworzonym schema-cie. Ni¿ej wymieniono poszczególne rodzaje strumieni.
PbInputStream strumienie wejciowe wykorzystywane s¹ na pocz¹tku tworzonego schematu procesu. S³u¿¹ do wprowadzania do uk³adu materia³ów o okrelonym sk³adzie chemicznym, masie, tempera-turze i cinieniu. Cech¹ charakterystyczn¹ dla strumienia wejciowego jest parametr idMaterial, okrelaj¹cy rodzaj materia³u, którego nonikiem bêdzie dany strumieñ w modelowanym procesie. U¿ytkownik mo¿e przypisaæ wybranemu strumieniowi ma-teria³ o okrelonej nazwie i sk³adzie chemicznym zdefiniowanym w aplikacji DFEidtor.
Sk³ad materia³u mo¿na równie¿ zdefiniowaæ z poziomu kodu, podaj¹c masê poszcze-gólnych sk³adników znajduj¹cych siê w wybranej fazie. Przyk³ad procedury napisanej w jêzyku Pascal przedstawia kod 1.
Procedure Wprowad Dodatki(strumieñ: TPbStream; masa:Integer);
Kod 1. Procedura pozwalaj¹ca na ustalenie masy aluminium w strumieniu dodatków wprowadzanych w procesie rafinacji
Komponent PbInputStream zosta³ wyposa¿ony w procedury obs³ugi zdarzeñ ini-cjowanych przez u¿ytkownika programu za pomoc¹ myszki. W zale¿noci od rodzaju zdarzenia, w czasie trwania obliczeñ, wywietlany jest graficzny interfejs, przedsta-wiony na rysunkach 2324, pozwalaj¹cy na kontrolowanie sk³adu chemicznego mate-ria³u, powi¹zanego ze strumieniem.
Na etapie tworzenia aplikacji mo¿na okreliæ poziom dostêpu przysz³ych u¿yt-kowników programu do edycji sk³adu chemicznego materia³u powi¹zanego ze strumie-niem wejciowym. W tym celu w Delphi nale¿y do w³aciwoci EditMode, kompo-nentu PbInputStream, przypisaæ jedn¹ z czterech dostêpnych wartoci:
Full: u¿ytkownik aplikacji mo¿e dowolnie zmieniaæ sk³ad chemiczny materia³u w zakresie dostêpnych sk³adników oraz zmieniaæ materia³ powi¹zany z danym strumieniem, mo¿e równie¿ utworzyæ w³asny materia³ i trwale zapisaæ informacjê o jego sk³adzie bezporednio w pliku ssd,
Material_Edit: u¿ytkownik mo¿e przypisywaæ do strumienia wejciowego ró¿ne materia³y zdefiniowane wczeniej w pliku ssd przez autora programu; ma równie¿ dostêp do edycji sk³adu chemicznego wybranego materia³u, nie mo¿e na-tomiast zapisaæ wprowadzonych zmian w pliku ssd,
Material_Selection: u¿ytkownik ma jedynie mo¿liwoæ powi¹zania stru-mienia wejciowego z materia³ami zdefiniowanymi w pliku ssd,
Read_Only: u¿ytkownik ma wy³¹cznie mo¿liwoæ podgl¹du sk³adu chemiczne-go materia³u powi¹zanechemiczne-go ze strumieniem wejciowym na etapie tworzenia aplikacji.
Rozwi¹zanie tego typu mo¿e byæ wykorzystane podczas tworzenia komercyjnych aplikacji umo¿liwiaj¹cych dostêp do pe³nej edycji na zasadach licencyjnych lub pod-czas tworzenia oprogramowania dedykowanego u¿ytkownikom o ró¿nym poziomie do-stêpu do mo¿liwoci programu.
PbStream to strumienie wykorzystywane do ³¹czenia ze sob¹
pozosta-³ych komponentów wystêpuj¹cych w schemacie proces. W odró¿nieniu od strumienia PbInputStream nie ma w³asnoci idMaterial. Nie ozna-cza to jednak, ¿e nie ma przypisanego materia³u. PbStream jest nonikiem materia³u, który zostanie mu przypisany poprzez w³aciwoæ FromUnit. Je¿eli na przyk³ad w³a-ciwoci tej przypiszemy obiekt PbGttBalance, to strumieñ bêdzie nonikiem materia³u, którego sk³ad chemiczny zosta³ obliczony przez komponent PbGttBalance.
Rys. 23. Graficzny interfejs komponentu PbInputStream wywo³ywany poprzez klikniêcie prawym przyciskiem myszy
Rys. 24. Graficzny interfejs komponentu PbInputStream wywo³ywany poprzez klikniêcie lewym przyciskiem myszy na obiekcie
W³aciwoæ FromUnit i ToUnit mog¹ równie¿ byæ ustalane dynamicznie po-przez kod programu wprowadzony po-przez u¿ytkownika. Przyk³adowy kod realizuj¹cy tê operacjê przedstawiono poni¿ej (kod 2).
If masaAl>100 then dodatkiR1.ToUnit:=PbGttBalance else
dodatkiR1.ToUnit:=PbMixer;
Kod 2. Przyk³ad kodu, który w sposób dynamiczny ustawia po³¹czenie strumienia z komponentami PbGttBalance lub PbMixer
Je¿eli wartoæ zmiennej masaAl jest wiêksza ni¿ 100, strumieñ dodatków zostaje skierowany do obiektu obliczaj¹cego stan równowagi. W przeciwnym wypadku stru-mieñ dodatków bêdzie po³¹czony z obiektem Mixer, a obliczenia termodynamiczne zostan¹ pominiête.
TPbCoalInputStream ` jest to równie¿ strumieñ wejciowy, ale powi¹-zany z materia³em, który jest paliwem. W odró¿nieniu od omówionego poprzednio strumienia wejciowego PbInputStream, aby zdefiniowaæ strumieñ paliwa, nale¿y podaæ dodatkowe informacje o materiale, tj.:
zawartoæ wilgoci,
analizê czêci lotnych i popio³u,
podstawow¹ analizê zawartoci wêgla, wodoru, azotu i tlenu,
kalorycznoæ.
Jednym z najwa¿niejszych komponentów dostêpnych w SimuSage jest PbGttBalance. Umo¿liwia on przeprowadzenie obliczeñ, w wyniku któ-rych wyznaczany jest równowagowy sk³ad po³¹czonych z nim strumieni.
Aby wyznaczyæ równowagowe stê¿enie sk³adników, nale¿y równie¿ podaæ warunki temperatury i cinienia, dla jakich komponent ma wykonañ kalkulacje. Obliczenia re-alizowane za pomoc¹ komponentu PbGttBalance bazuj¹ na silniku wykorzystywanym równie¿ w programie FactSage. Czas potrzebny do wykonania obliczeñ jest jednym z kryteriów optymalizacji ci¹gle rozwijanego od trzydziestu lat silnika ChemApp, któ-rego g³ównym celem jest okrelenie minimalnej wartoci energii Gibbsa dla rozpatry-wanego uk³adu [69]. Szybkoæ obliczeñ zwi¹zana jest ze sposobem pracy silnika, który przed wykonaniem numerycznych obliczeñ stanu równowagi dopasowuje siê do faz wystêpuj¹cych w uk³adzie, które w danych warunkach bêd¹ stabilne. Pozwala to znacznie zredukowaæ liczbê wykonywanych obliczeñ. Informacje o danych termody-namicznych uk³adu zawiera plik z rozszerzeniem *.ssd. W trakcie projektowania apli-kacji u¿ytkownicy mog¹ wykorzystaæ dowoln¹ liczbê obiektów PbGttBalance. Dziêki w³aciwoci ChemDFI_ID istnieje równie¿ mo¿liwoæ przypisania ró¿nym obiektom obliczaj¹cym równowagê innych plików ssd. Dziêki temu, projektuj¹c w³asny schemat, mo¿na obliczaæ stan równowagi tylko w okrelonym miejscu lub te¿ w okrelonym czasie symulowanego procesu.
PbMixer jest komponentem SimuSage, którego zadaniem jest mieszanie dowolnej liczby strumieni zawieraj¹cych materia³y sk³adaj¹ce siê z tych samych faz, ale o ró¿nym stê¿eniu sk³adników, w jeden wynikowy stru-mieñ, którego sk³ad chemiczny obliczany jest poprzez sumowanie sk³adu chemicznego strumieni wchodz¹cych do PbMixer (faza po fazie oraz sk³adnik po sk³adniku). Nie jest obliczany stan równowagi pomiêdzy strumieniami wchodz¹cymi. Mieszanie strumieni nie ma charakteru izotermicznego, co oznacza, ¿e strumienie wejciowe mog¹ mieæ ró¿-ne temperatury. Temperatura strumienia wyjciowego nie jest obliczana. Temperatura strumienia wynikowego musi w takim przypadku zostaæ okrelona przez u¿ytkownika.
Mo¿na w tym celu wykorzystaæ procedurê OnCalculated obiektu PbMixer, która wywo³ywana jest po zakoñczeniu obliczeñ przez obiekt. Przyk³adowy kod, pozwalaj¹-cy na zdefiniowanie temperatury strumienia wynikowego, zosta³ zamieszczony poni¿ej (kod 3).
procedure TForm1.PbMixerCalculated(sender: TPbUnit);
begin
resultStream.Temperature:=1600;
end;
Kod 3. Kod procedury OnCalculated obiektu PbMixer, przypisuj¹cej strumieniowi resultStream temperaturê równ¹ 1600oC
Je¿eli istnieje koniecznoæ symulacji mieszania strumieni w warunkach izoter-micznych, nale¿y wykorzystaæ komponent PbIsoMixer. Wówczas temperatury strumie-ni wchodz¹cych maj¹ tak¹ sam¹ wartoæ przenoszon¹ na strumieñ wystrumie-nikowy.
PbSpliter2 to komponent wykorzystywany do rozdzielenia strumienia wejciowego na dwa strumienie, których sk³ad chemiczny po rozdziele-niu pozostaje niezmieniony. Masa strumieni wynikowych zale¿y od pro-centowego wspó³czynnika podzia³u okrelanego przez u¿ytkownika poprzez przypisa-nie w³aciwoci SplitFactor wartoci z przedzia³u 01.
Przyk³adowo dla SplitFactor: = 0.5 masa strumienia wejciowego zosta-nie podzielona w stosunku 50 do 50. Wartoæ wspó³czynnika mo¿e byæ okrelana dyna-micznie, z poziomu kodu na przyk³ad poprzez wykorzystanie procedury OnBe-foreCalculation, której zawartoæ jest wykonywana przed wywo³aniem obiektu PbSpliter2. Poni¿ej przedstawiono przyk³adowy kod procedury OnBeforeCalcu-lation, który w trakcie obliczeñ modelowych w sposób dynamiczny ustala wartoæ parametru SplitFactor, przypisuj¹c mu przy ka¿dym wywo³aniu procedury przy-padkowe wartoci z przedzia³u 01.
procedure TForm1.PbSplitter2BeforeCalculation(sender: TPbUnit);
var factor: Double;
begin
Randomize; // generator liczb losowych
factor:=Random(10)*0.1; // przypisanie wartoci z przedzia³u 01 PbSplitter2.SplitFactor:=factor;
end;
Kod 4. Procedura OnBeforeCalculation obiektu PbSpliter2
W wypadku obliczeñ wykonywanych iteracyjnie wartoæ zmiennej factor obli-czana bêdzie od nowa, zmieniaj¹c tym samym wspó³czynnik podzia³u strumienia
wejciowego w zakresie 01. U¿ytkownicy maj¹ równie¿ mo¿liwoæ wykorzystania obiektu PbPhaseSpliter, który dokonuje rozdzielenia strumienia wejciowego ze wzglê-du na fazy, które wystêpuj¹ w materiale przypisanym do strumienia. Jako wynik obli-czeñ zwracane s¹ strumienie zawieraj¹ce poszczególne fazy materia³u przypisanego do strumienia wejciowego.