• Nie Znaleziono Wyników

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, wœró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 noœnika 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 noœnikiem materia³ów w modelowanym procesie. Ich g³ówne zadanie polega na po³¹czeniu u¿ytych w danym programie komponentów, które nie mog¹ bezpoœrednio ³¹czyæ siê miêdzy sob¹. Komponenty SimuSage, okreœla-ne w dokumentacji SimuSage jako unit operations, to obiekty wykorzystywaokreœla-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¿ okreœliæ stan równo-wagi, który osi¹gany jest wy³¹cznie w okreœlonym miejscu lub w okreœlonym czasie procesu.

Rys. 22. Zestaw komponentów SimuSage

Ka¿dy strumieñ ma parametr ToUnit i FromUnit, za których pomoc¹ okreœlana 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 wejœciowe – wykorzystywane s¹ na pocz¹tku tworzonego schematu procesu. S³u¿¹ do wprowadzania do uk³adu materia³ów o okreœlonym sk³adzie chemicznym, masie, tempera-turze i ciœnieniu. Cech¹ charakterystyczn¹ dla strumienia wejœciowego jest parametr idMaterial, okreœlaj¹cy rodzaj materia³u, którego noœnikiem bêdzie dany strumieñ w modelowanym procesie. U¿ytkownik mo¿e przypisaæ wybranemu strumieniowi ma-teria³ o okreœlonej 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¿noœci od rodzaju zdarzenia, w czasie trwania obliczeñ, wyœwietlany jest graficzny interfejs, przedsta-wiony na rysunkach 23–24, pozwalaj¹cy na kontrolowanie sk³adu chemicznego mate-ria³u, powi¹zanego ze strumieniem.

Na etapie tworzenia aplikacji mo¿na okreœliæ poziom dostêpu przysz³ych u¿yt-kowników programu do edycji sk³adu chemicznego materia³u powi¹zanego ze strumie-niem wejœciowym. W tym celu w Delphi nale¿y do w³aœciwoœci EditMode, kompo-nentu PbInputStream, przypisaæ jedn¹ z czterech dostêpnych wartoœci:

– 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 bezpoœrednio w pliku ssd,

– Material_Edit: u¿ytkownik mo¿e przypisywaæ do strumienia wejœciowego ró¿ne materia³y zdefiniowane wczeœniej 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 wejœciowego 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 wejœciowym 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¿liwoœci 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³asnoœci idMaterial. Nie ozna-cza to jednak, ¿e nie ma przypisanego materia³u. PbStream jest noœnikiem materia³u, który zostanie mu przypisany poprzez w³aœciwoœæ FromUnit. Je¿eli na przyk³ad w³aœ-ciwoœci tej przypiszemy obiekt PbGttBalance, to strumieñ bêdzie noœnikiem 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³aœciwoœæ 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ñ wejœciowy, ale powi¹-zany z materia³em, który jest paliwem. W odró¿nieniu od omówionego poprzednio strumienia wejœciowego PbInputStream, aby zdefiniowaæ strumieñ paliwa, nale¿y podaæ dodatkowe informacje o materiale, tj.:

РzawartoϾ wilgoci,

– analizê czêœci lotnych i popio³u,

– podstawow¹ analizê zawartoœci 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 ciœnienia, 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 okreœlenie minimalnej wartoœci 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³aœciwoœci 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 okreœlonym miejscu lub te¿ w okreœlonym 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 wejœciowe mog¹ mieæ ró¿-ne temperatury. Temperatura strumienia wyjœciowego nie jest obliczana. Temperatura strumienia wynikowego musi w takim przypadku zostaæ okreœlona 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¹ 1600o

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 wejœciowego 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 okreœlanego przez u¿ytkownika poprzez przypisa-nie w³aœciwoœci SplitFactor wartoœci z przedzia³u 0–1.

Przyk³adowo dla SplitFactor: = 0.5 masa strumienia wejœciowego zosta-nie podzielona w stosunku 50 do 50. Wartoœæ wspó³czynnika mo¿e byæ okreœlana 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 wartoœci z przedzia³u 0–1.

procedure TForm1.PbSplitter2BeforeCalculation(sender: TPbUnit);

var factor: Double;

begin

Randomize; // generator liczb losowych

factor:=Random(10)*0.1; // przypisanie wartoœci z przedzia³u 0–1 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

wejœciowego w zakresie 0–1. U¿ytkownicy maj¹ równie¿ mo¿liwoœæ wykorzystania obiektu PbPhaseSpliter, który dokonuje rozdzielenia strumienia wejœciowego 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 wejœciowego.