3. fejezet - A diszkrét esemény szimulátor

Tartalom
3.1. A DES LabVIEW programrendszer
3.1.1. Miért szükséges a LabVIEW programrendszer kiegészítése Diszkrét Esemény Objektumokkal?
3.1.2. Mi szükséges ahhoz, hogy egy Diszkrét Esemény Szimulátort létrehozzunk?
3.1.2.1. Szimulációs idő és eseménykezelés
3.1.2.2. Véletlen szám generátorok
3.1.2.2.1. Jelölések
3.1.2.2.2. A leggyakoribb folytonos eloszlásfüggvények
3.1.2.2.3. Egyenletes eloszlás (Uniform Distribution)
3.1.2.2.4. Normális eloszlás (Normal Distribution)
3.1.2.2.5. Háromszög eloszlás (Triangle Distribution)
3.1.2.2.6. Exponenciális eloszlás (Exponential Distribution)
3.1.2.2.7. Erlang eloszlás (Erlang Distribution)
3.1.2.2.8. Empirikus eloszlás (Empirical Distribution)
3.1.2.2.9. Általános eloszlás függvény definiálása
3.1.2.3. Diszkrét Esemény objektum típusok
3.1.2.4. Diszkrét Esemény Objektumok összekapcsolása
3.1.2.5. Diszkrét Esemény Objektum kimeneti statisztikai adatai
3.1.3. Első mintapélda: Az M/M/1 rendszer modellje a LabVIEW DES rendszerben
3.1.3.1. A rendszermodell leképezése
3.1.3.2. A Source objektum felépítése és feladata
3.1.3.3. A Sink objektum felépítése és feladata
3.1.3.4. A Buffer objektum felépítése és feladata
3.1.3.5. A Machine objektum felépítése és feladata
3.1.3.5.1. Az Entity objektum felépítése és feladata (Entitás objektum)
3.1.4. Második mintapélda: Több kimeneti pont egyesítésének biztosítása (Join művelet)
3.1.4.1. A Join objektum felépítése és feladata
3.1.5. Harmadik mintapélda: Több bemeneti pontból történő választás biztosítása megadott szabály szerint (Select művelet)
3.1.5.1. A Selector objektum felépítése és feladata
3.1.6. Negyedik mintapélda: Több entitás elhelyezése egy másik (Package) entitásban (Pack művelet), illetve több entitás kibontása egy másik (Package) entitásból (UnPack művelet)
3.1.6.1. A Pack objektum felépítése és feladata
3.1.6.2. Az UnPack objektum felépítése és feladata
3.2. A szimulációs rendszer objektumainak közös tulajdonságai (Global Variables)
3.2.1. Az "ObjectList" globalis változók
3.2.2. A "TaskList" globalis változók
3.3. A szimulációs rendszer eljárásai
3.4. A szimulációs program továbbfejlesztésének lehetőségei
3.4.1. További statisztikai számítások beépítése a DES objektumokba
3.4.2. Új attribútumok létesítése és hatásuk beépítése a DES objektumokba
3.4.3. Új DES objektumtípusok létrehozása

A Diszkrét Események Szimulációja (DES) abból a modellezési igényből ered, hogy a folyamatosan működő rendszerek mellett vannak olyan rendszerek, amelyek csak időszakosan működnek . Az ilyen típusú rendszerek állapotának megváltoztatását a rendszert ért diszkrét (csak az adott időpontban ható) események befolyásolják.

Az ilyen típusú rendszerek események időpontjától eltérő időpontokban nem változtatják állapotukat!

(Időben) diszkrét eseménynek nevezzük azt a bemeneti jelet, amely egy várható időpillanatban fog jelentkezni, de a pontos időpontja nem adható meg. Ebből már látszik, hogy ezekben a szimulációs modellekben az események véletlenszerűen jelennek meg, illetve a véletlenszerűségüknek mindig van valamilyen jellegzetessége.

Ilyen jellegzetesség például az, hogy az egymás után megjelenő események közötti időtartam milyen valószínűségi sűrűség függvénynek felel meg. Ilyen valószínűségi sűrűség függvények lehetnek például normál eloszlás, exponenciális vagy más típusú sűrűség eloszlás , amely ebben az esetben azt adja meg, hogy az események közötti időtartam milyen valószínűséggel jelenhet meg következő eseményidőpontként. Ezeket az eseményeket időpont szerint rendezve kell tárolni, hogy így biztosítsuk a végrehajtás időbeni sorrendjét. Az egyes események más további eseményeket hozhatnak létre, amelyeknek bele kell kerülniük az események időpontjait tartalmazó listába. Ez lesz a Feladatok listája (TaskList) .

Az események és azok valószínűségi változók szerinti működése mellett további nagyon fontos elem az ilyen típusú szimulátoroknál, hogy magát az eseményt vagy az esemény megjelenéseként modellezett tulajdonságokat egy virtuális vagy valóságos elemként jelenítjük meg. Ezt az elemet entitásnak (Entity) nevezzük.

Például egy diszkrét esemény szimulációs rendszermodell lehet, amikor egy autógyárban az autók összeszerelésének folyamatát vizsgáljuk. Ebben az esetben az entitások az egyes autóalkatrészek , amelyekből részrendszereket és végül a teljes autót összeszereljük. A rendszermodell célja, hogy a segítségével megállapítsuk, mennyi idő alatt készül el az összeszerelés (a legrosszabb késleltetési feltételeket számításba véve).

Hasonlóan ilyen ”anyagként” megjelenő entitás van abban a közlekedési diszkrét esemény szimulációs modellben, amelyben egy városi közlekedés egyes útvonalainak forgalmát szimuláljuk, az út forgalmi átbocsájtó képességével (szélesség, sávok száma, a felület minősége) és az aktuális forgalom tulajdonságaival (speciális eseményekkel karambol, útlezárás stb,). Ebben az esetben a forgalomban résztvevő autók az entitások .

A forgalmi rendszermodell vizsgálatának az a célja, hogy a legforgalmasabb időszakban is biztosítsuk az egyes útvonalakon a megfelelő sebességű forgalmat, amelyet a forgalmi lámpák átkapcsolási programjainak változtatásával, valamint rendőri útelterelésekkel valósíthatunk meg.

Más területről vett mintapéldával a számítógép hálózatok egyes elemei közötti adatforgalom (lásd Internet) szintén véletlenszerűen megjelenő eseményekkel modellezhetők. Itt az egyes hálózatbeli számítógépelemek között továbbított - adott hosszúságú kezdeti azonosító résszel, információs tartalommal rendelkező adatcsoport- adatcsomag az entitás elem . Egy ilyen adatcsomag eljuttatása egyik csomópontból egy másik hálózatbeli csomópontba a hálózat topológiájától, a hálózat egyes elemeinek üzemkész állapotától és az információ átbocsájtó képességétől függ. A rendszermodell segítségével a számítógép hálózat egyes csomópontjai közötti átlagos információ-késleltetési időtartamot lehet meghatározni.

Visszatérve az entitáshoz, ebben az esetben az az adatcsomag, amelyet mint csomagot juttatunk el a hálózat csomópontjaiba nem tekinthető konkrét „anyagnak”. A feladat megfogalmazása szerint viszont ezekkel a nem anyagi jellegű adatcsomagokkal lehet modellezni az egyes csomópontokban a rendelkezésre álló tároló helyek foglaltságát, illetve az egyes átviteli vonalak villamos jeltovábbító tulajdonságait, figyelembe véve a jeltovábbítás sebességét.

Következő mintapéldánkban eljutunk az entitások másik csoportjához, amikor az entitás nem anyag, hanem információ . A rendszermodell ebben az esetben egy repülőtéri csomagfelvételi rendszer, amelynél meg kell mondanunk, hogy az utasforgalom „hosszú várakozást elkerülő” lebonyolításához adott időszakban hány darab csomagfelvevő ablaknak kell működnie. Ez biztosítja ugyanis, hogy az utasok elérjék az egyes repülőgépjáratokat. Alapvetően nem tudjuk, hogy adott időszakban hány darab utas érkezik, illetve milyen ezeknek az utasoknak a „csomagfeladási szokása” (rövid vagy hosszú időtartammal adják fel csomagjaikat az utazás megkezdése előtt), ezért egy olyan rendszermodellt kell létrehozni, amely az egyes utasok csomagfeladási szándéka közötti időtartam alapján nyitja ki vagy zárja be a csomagfelvételi ablakokat. Az entitás tehát az az információ (időtartam) amely megadja, hogy milyen sűrűséggel érkeznek az utasok.

Az egyes események „természetes véletlenségét” azaz a valós állapothoz legjobban hasonlító véletlenszerű viselkedését speciális tulajdonságú véletlenszám generátorok segítségével állíthatjuk elő. Ezen speciális tulajdonságú véletlenszám generátorok „őseleme” az az egyenletes eloszlású véletlenszám generátor , amely azonos valószínűséggel generálja a különböző véletlen számokat adott értékhatár között.

Ez azt jelenti, hogy ha például létrehozunk egy [0..1] értékhatárokkal rendelkező egyenletes eloszlású véletlenszám sorozatot és az értékekből egy hisztogramot rajzolunk, akkor nagyszámú adat esetén a hisztogram minden értékhatár között (hozzávetőleg) azonos nagyságú oszloppal fog rendelkezni. Ebből az egyenletes eloszlású véletlenszám generátorból tetszőleges sűrűségfüggvénnyel rendelkező véletlenszám gerátort lehet létrehozni, ezek leírását a 3.1.2.2. szakasz fejezetben mutatjuk be.

Egy diszkrét esemény szimulátor modell megvalósításának következő lépése, hogy fel kell írni a rendszermodell egyenleteit. Alapvetően állapottér modellből indulhatunk ki, amelynek állapotváltozói és ezek alapján számított kimeneti jelei csak az események időpontjában változnak. Az állapottér modell a néhány elemet tartalmazó rendszerek esetén is nagyon bonyolult, mert az állapotegyenletek időfüggőek, és együtthatóik valószinűségi változók sűrűségfüggvényei alapján keletkeznek a számítás időpillanatában.

Ennek következtében a rendszermodellt ezeknél a rendszereknél alapelemek és ezek összekapcsolásával magvalósított számítási programmal hozzuk létre.

Ez azt jelenti, hogy a diszkrét események leírásához szükséges alapelemeket ( Source (Forrás), Buffer (Tároló), Machine (Munkavégző elem), Sink (Nyelő) ), objektumokként definiáljuk, a rendszer modellben ezekből a különböző típusú objektumokból tetszőleges mennyiséget alkalmaznak.

Az diszkrét esmények rendszer modelljében felhasznált elemek mindegyike (a Tároló és a Nyelő objektum kivételével) rendelkezik olyan véletlenszám generálási képességgel, amellyel adott valószínűségi változó szerinti eloszlásfüggvényt képesek szimulálni.

Ilyen feldata van a Source (Forrás) objektumnak, amely meghatározott időközönként egy entitást bocsájt ki, ezzel egy (anyag vagy információ tulajdonságú) új eseményt hoz létre. Ez az esemény végighalad a rendszermodell egyes (nem mindegyik) elemén, és ezekben az elemekben különböző okok miatt várakozni kényszerül.

A Buffer (Tároló) elemben lehetőség van a folyamatosan érkező entitásokat átmeneti tárolására. Ez az autóipari példát véve azt jelenti, hogy az összeszereléshez megérkezett alkatrészeket azok beszereléséig tárolni kell. Nem mindegy, hogy az alkatrész tárolása egy raktárban történik, vagy az összeszerelés helyén (ahol erre általában nem áll rendelkezésre elegendő hely), és csak akkor szállítjuk az összeszereléshez a megfelelő mennyiségű alkatrészt, ha azt a megérkezéskor azonnal be is szerelik. A tároló elem ezt az átmeneti tárolási műveletet modellezi.

A repülőtéri csomagbeadási rendszerben az utasok várakozási sora az a tároló (hely), ahol eseményre (csomagbeadásra) várakozó csomagokat átmenetileg tároljuk a check-in-re várakozó utasok sorában.

Ugyanilyen tároló tulajdonságú elemek találhatók a számítógépes hálózati rendszerben is, ahol egy művelet végrehatási feltételének létrejöttéig átmenetileg tárolni kell az információ csomagot.

A Machine (Munkavégző elem) modellezési feladata, hogy az entitáson vagy az entitással elvégzett műveletek szükséges időtartamát modellezze. Ez a gyakorlatban azt jelenti, hogy egy adott típusú véletlen szám generátor segítségével meghatározza a művelet végrehajtásához szükséges időtartamot és elhelyez egy „új eseményt” az események listájában, hogy csak akkor fogalkozzon vele ismét a rendszer (addig nem), amikor már elvégezte a rá bízott feladatot.

Egyszerűen megfogalmazva a Munkavégző elem egy véletlen időtartammal késlelteti az entitás továbbhaladását.

Az autóipari összeszerelésnél ezzel az elemmel tudjuk modllezni az összeszerelés időtartamát, a forgalmi rendszer vizsgálatánál az út megtételéhez szükséges időtartamot, a csomagbeadási rendszernél pedig, hogy mennyi idővel korábban kell megérkeznünk a repülőtérre, hogy a csomagunkat fel tudjuk adni, és ne késsük le a repülőgép indulási időpontját.

A Sink (Nyelő) elem feladata, hogy az entitást, amelyen minden feladatot elvégeztünk eltávolítsa a rendszerből.

Az autó összeszerelését befejezve a kész autó el kell vinni az összeszerelés helyéről, és el kell juttatni egy másik rendszerbe, amely a tárolását végzi. A forgalmi rendszer példában a jármű megérkezik a célállomásra ezzel a feladat befejeződőtt megadott helyről megadott helyre eljuttatta a járművet (áruval, utassal…). A repülőtéri csomagbeadási rendszernél megtörtént a csomag beadása, az eljárás befejeződött, jöhet a következő feladat az útlevélellenőrzés. Az informatikai rendszernél hasonlóan az eddigi példákhoz az információ csomag megérkezése az adott csomópontba a feladat elvégzését (befejezését) jelenti.

Ha ezeket az elemtípusokat a vizsgált rendszermodell követelményeinek megfelelően összekapcsoljuk, akkor az így létrejött (számítási) hálózat segítségével tulajdonképpen a rendszer vizsgálathoz szükséges rendszeregyenleteket valósítjuk meg.

A rendszer modellezése tehát hasonlóan a blokk-orientált rendszermodellezéshez úgy történik, hogy elemi tulajdonságú modellelemek segítségével nagy bonyolultságú modellt hozunk létre, amelyben az ismétlődő feladatokat alprogramok segítségével tudjuk leírni.

Más (nyelvi) megfogalmazásban az alapelemekből és ezek összekapcsolásából létrejött rendszermodellt állapotgépnek is szokták nevezni, mivel a véges állapotok között történő állapotátmenetek megvalósításához szükséges időtartamokat modellezi.

A felsorolt feladatokat kezelő és megoldó eszközt, amelyek entitások forgalmát valósítja meg adott típusú elemekből összekapcsolt hálózatban, és meghatározza az entitások adott pontok közötti átjutásának időtartamát Diszkrét Esemény Szimulátornak (DES) nevezzük.

A DES olyan szimulációs keretprogram, amellyel lehetőségünk van a DES rendszermodell elemeinek és ezek összekapcsolásának leírására. A rendszermodellben megjelenő eseményeket idő sorrendben tárolunk, és biztosított az aktuális esemény hatásainak meghatározása a különböző modellelemekben. A modell a véletlen eseményeket az adott esemény valószínűségi sűrűségfüggvényének típusával és annak aktuális paramétereivel írja le.

A DES szimulátor tehát egy olyan rendszermodellezési eljárás, amely időben valószínűségi változók szerint változó együtthatójú egyenletekkel írható le. Ezeket az egyenleteket nagyon nehezen lehetne függvények formájában megadni, mivel az adott bemeneti események esetén történő számításokat (valószínűségi változók feltételezett értékeivel) csak a végeredmény bizonyos hibával történő közelítéseként lehet meghatározni.

A DES szimulátor segítségével olyan eredményeket tudunk meghatározni, amelyeknek van várható értéke és szórása, valamint a koincidencia tényező megadásával megkapjuk az eredmények várható értékének határait is.

A LabVIEW DES diszkrét események megadott tulajdonságú blokkok segítségével leírható folyamatának szimulációja (diszkrét sztochasztikus állapotváltozókkal leírható folyamatok szimulációjának keretrendszere).

A keretrendszer segítségével több, egymástól független, párhuzamos, eseményekkel vezérelt folyamat szimulációja valósítható meg, amelyek között információforgalom lehetséges.

A keretrendszerben megengedett az objektumok soros, párhuzamos és visszacsatolásos összekapcsolása , tetszőleges mennyiségű és mélységű kapcsolattal.

A keretrendszer objektumorientált felépítésű. Mind a folyamat szimulálására szolgáló különböző tulajdonságú blokkok, mind pedig a információt hordozó entitások azonos felépítésű objektumok.

A keretrendszerrel készített programok alprogramként is elmenthetők . A megvalósított alprogramokat tetszőleges számban, tetszőleges bemeneti paraméterekkel alkalmazhatjuk a szimulációs programban.

A szimulációs keretrendszer a következő programstruktúrában működik:

A szimulációs rendszer általános blokkdiagramja
3.1. ábra - A szimulációs rendszer általános blokkdiagramja


3.1. A DES LabVIEW programrendszer

3.1.1. Miért szükséges a LabVIEW programrendszer kiegészítése Diszkrét Esemény Objektumokkal?

A LabVIEW programrendszert alapvetően időben diszkrét azonos (idő)lépésközű adatok mérésére, analízisére és megjelenítésére fejlesztették ki. Számos eljárással rendelkezik, amelyek megkönnyítik az adatok adott feltételek szerinti mérését, időbeni és jelszint alapján történő triggerelés alkalmazásával. Az analízishez szintén széleskörű eljáráskönyvtár áll rendelkezésre, amely lehetővé teszi, hogy akár idő-, akár frekvencia tartományban részletes jelanalízist valósítsunk meg. A programrendszer tehát alapvetően folytonos jelek digitális számítógéppel történő mintavételes feldolgozását képes elvégezni.

Rendelkezik olyan eljárásokkal is, amelyek segítik a sorok elemeinek kezelését: a (sor (queue) objektum létrehozása, új elem betöltése a sorba, elem kivétele a sorból, sor objektum megszüntetése. Ezek az eljárások, illetve még néhány a párhuzamos programozást segítő eljáráscsomagból (Notifier operations, Semaphore operations, Occurences) alapvetően nem olyan objektumok és eljárások, amelyekből könnyen össze lehetne állítani egy diszkrét eseményszimulációs modellt.

Ezért indítottunk el egy olyan fejlesztési irányt, amely az oktatás és a kutatás számára biztosít olyan objektumtípusokat, amelyekkel egyszerűen össze lehet állítani tetszőleges bonyolultságú, diszkrét eseménymodellt.

3.1.2. Mi szükséges ahhoz, hogy egy Diszkrét Esemény Szimulátort létrehozzunk?

3.1.2.1. Szimulációs idő és eseménykezelés

A legfontosabb feladat egy DES rendszerben az időpont adattal rendelkező esemény objektumok (Task) létrehozása, megadott feltételek szerint tárolása, illetve eltávolítása a rendszerből, ha az adott esemény már lezajlott. Az egyes esemény-objektumokat egy olyan másik objektumnak (TaskList) kell megfelelő módon tárolnia, és a megadott feltételek szerint szervezni a működését. A különböző DES rendszerek megvalósításánál különböző számú és feladatú eseménylista szerepelhet. A LabVIEW-ban megvalósított DES rendszerben egyetlen ilyen lista van, amely tartalmazza a szimulációs modellben keletkezett összes eseményt, idő szerinti növekvő sorrendben. Minden új esemény a növekvő idősorrend megtartásával, az idő szerinti megfelelő helyre kerül az esemény-objektumok listájában.

A Task objektum tulajdonságai
3.2. ábra - A Task objektum tulajdonságai


A TaskList objektum felépítése és tulajdonságai
3.3. ábra - A TaskList objektum felépítése és tulajdonságai


3.1.2.2. Véletlen szám generátorok

A szimulációs modellben különböző időzítési feladatok megoldásához számos véletlen szám generátor típus működését kell biztosítani a LabVIEW DES rendszerben. A véletlen szám generátorok a LabVIEW-ban elérhető 0 és 1 között egyenletes eloszlású véletlen szám generátorra épülnek. Ez a véletlen szám generátor az alapja a Constant, Uniform, Exponential, Normal, Triangle és a User Defined eloszlású véletlen szám generátor típusoknak. A véletlen szám generátorok meghívásukkor az adott eloszlás típusnak megfelelő paraméteres véletlen számot állítanak elő. Igény esetén további véletlen szám generátor típusok is készíthetők, amelyek problémamentesen illeszthetők a már korábban kifejlesztett modellelemekhez.

3.1.2.2.1. Jelölések

Sűrűség (Density) függvény=

f(x) > 0,         minden x-re

(3.1)

Eloszlás (Distribution)=

F ( x ) = I n f + I n f f ( x ) d x = 1

(3.2)

Átlag (Mean)

μ

(3.3)

Szórás (Variance)

δ

(3.4)

Annak a valószínűsége, hogy  x   A és B közé esik:

 

Pr ( A x B ) = A B f ( x ) d x

(3.5)

ahol

 

Pr()

valószínűség-függvény

 

f(x)

sűrűségfüggvény

 

A,B

x értékek

A sűrűségfüggvény diagramja és két pontja közé esés valószínűsége
3.4. ábra - A sűrűségfüggvény diagramja és két pontja közé esés valószínűsége


Sűrűségfüggvény meghatározása az eloszlásfüggvényből:

 

f ( x ) = d F ( x ) d x

(3.6)

ahol

 

x

aktuális érték

 

f(x)

sűrűségfüggvény

 

F(x)

eloszlásfüggvény

A sűrűségfüggvény (kék) és eloszlásfüggvénye (piros)
3.5. ábra - A sűrűségfüggvény (kék) és eloszlásfüggvénye (piros)


Az eloszlásfüggvény meghatározása a sűrűségfüggvény segítségével:

 

F ( x ) = I n f x f ( η ) d η

(3.7)

ahol

 

x

aktuális érték

 

f(x)

sűrűségfüggvény

 

F(x)

eloszlásfüggvény

3.1.2.2.2. A leggyakoribb folytonos eloszlásfüggvények
  1. Egyenletes eloszlás (Uniform Distribution)

  2. Normál eloszlás (Normal Distribution)

  3. Háromszög eloszlás (Triangle Distribution)

  4. Exponenciális eloszlás (Exponential Distribution)

  5. Erlang eloszlás (Erlang Distribution)

  6. Empirikus eloszlás (Empirical Distribution)

3.1.2.2.3. Egyenletes eloszlás (Uniform Distribution)

Az egyenletes eloszlásnál a megadott minimum és maximum értékek között minden érték előfordulásának valószínűsége azonos. Ilyen valószínűségi változó típus (diszkrét értékekkel) a dobókockával dobott érték, ahol minden oldal előfordulásának valószínűsége azonos érték 1/6-od.

Az egyenletes eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)
3.6. ábra - Az egyenletes eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)


Az egyenletes eloszlás definíciós függvényei:

Sűrűség (Uniform Density) =

f ( x ) = { 1 b a a < x < b 0 e g y é b k é n t

(3.8)

Eloszlás (Uniform Distribution) =

F ( x ) = { 0 x < a x a b a a x b 1 x > b

(3.9)

Átlag (Uniform Mean)=

μ = a + b 2

(3.10)

Szórás (Uniform Variance)=

δ = ( b a ) 2 12

(3.11)

3.1.2.2.4. Normális eloszlás (Normal Distribution)

A normális eloszlás a valószínűségszámításban meghatározó szerepe van. A gyakorlatban előforduló számos valószínűségi változó normális eloszlású, vagy normális eloszlással közelíthető. Ha egy kísérlet kimenetelét nagyszámú, egymástól kevéssé függő vagy függetlenül ható körülmény befolyásolja úgy, hogy az egyes tényezők hatásai összeadódnak, akkor normális eloszlású valószínűségi változót kapunk.

A normális eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)
3.7. ábra - A normális eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)


A normális eloszlás definíciós függvényei:

Sűrűség (Normal Density)=

f ( x ) = 1 2. Π . δ 2 e ( x μ ) 2 2 δ 2

(3.12)

Eloszlás (Normal Distribution)=

NEM  LÉTEZIK  ZÁRT  ALAKBAN!

 

Átlag (Normal Mean)

μ

(3.13)

Szórás (Normal Variance)

δ 2

(3.14)

3.1.2.2.5. Háromszög eloszlás (Triangle Distribution)

A normális eloszlású valószínűségi változó, egyik közelítése.

A háromszög eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)
3.8. ábra - A háromszög eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)


A háromszög eloszlás definíciós függvényei:

Sűrűség (Triangle Density)=

f ( x ) = { 2 ( x a ) ( b a ) ( c a ) a x c 2 ( b x ) ( b a ) ( b c ) c x b 0 e g y é b k é n t

(3.15)

Eloszlás (Triangle Distribution)=

F ( x ) = { 0 x < a ( x a ) 2 ( b a ) ( c a ) a x b 1 ( b x ) 2 ( b a ) ( b c ) c x b 1 x > b

(3.16)

Átlag (Triangle Mean)=

μ = a + b + c 3

(3.17)

Szórás (Triangle Variance)=

δ = a 2 + b 2 + c 2 ( a b + a c + b c ) 18

(3.18)

ahol

 

Minimum érték (Minimum)

= a

 

Szokásos érték (Usual)

= c

 

Maximum érték (Maximum)

= b

3.1.2.2.6. Exponenciális eloszlás (Exponential Distribution)

Exponenciális eloszlásúnak tekinthetők bizonyos időtartamok. Például gépek véletlenszerű meghibásodásáig eltelt időtartam; várakozási idő; radioaktív atomok elbomlásáig eltelt idő. Az exponenciális eloszlás "örökifjú" tulajdonságú: ha egy egyed bizonyos kort megért, akkor úgy tekinthető, mintha akkor született volna, nem hat rá az öregedés.

Az exponenciális eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)
3.9. ábra - Az exponenciális eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)


Az exponenciális eloszlás definíciós függvényei:

Sűrűség (Exponential Density)=

f ( x ) = { 1 β e ( x β ) x 0 0 e g y é b k é n t

(3.19)

Eloszlás (Exponential Distribution) =

F ( x ) = { 1 e ( x β ) x 0 0 e g y é b k é n t

(3.20)

Átlag (Exponential Mean)

μ = β

(3.21)

Szórás (Exponential Variance)

δ = β 2

(3.22)

3.1.2.2.7. Erlang eloszlás (Erlang Distribution)

Az Erlang eloszlás egy kevert stratégiát alkalmazó eloszlásfüggvény.

Ha K=1, akkor az eloszlás pontosan a negatív exponenciális eloszlás függvényére hasonlít.

Ha K tart a végtelenhez, akkor az eloszlás közelít a normál eloszlás alakjához.

Az Erlang eloszlás definíciós függvényei:

Sűrűség (Erlang Density)=

f ( x ) = { a k ( k 1 ) ! x k 1 e a x h a 0 x 0 e g y é b k é n t

(3.23)

Eloszlás (Erlang Distribution)=

F ( x ) = { 1 ( e a x j = 0 k 1 [ ( a x ) j j ! ] h a 0 x 0 e g y é b k é n t

(3.24)

Átlag (Erlang Mean)=

μ = k a

(3.25)

Szórás (Erlang Variance)=

σ x = k a

(3.26)

ahol

 

k

a felhasználó által felvett pozitív egész érték, amely az eloszlásfüggvény alakját

határozza meg.

Az Erlang eloszlás (k=2) sűrűségfüggvénye (kék)
3.10. ábra - Az Erlang eloszlás (k=2) sűrűségfüggvénye (kék)


Az Erlang eloszlás (k=3) sűrűségfüggvénye (kék)
3.11. ábra - Az Erlang eloszlás (k=3) sűrűségfüggvénye (kék)


Az Erlang eloszlás (k=5) sűrűségfüggvénye (kék)
3.12. ábra - Az Erlang eloszlás (k=5) sűrűségfüggvénye (kék)


3.1.2.2.8. Empirikus eloszlás (Empirical Distribution)

Kísérleti úton, mérési eredmények alapján megállapított valószínűségi sűrűség függvény alkalmazásának lehetőségét biztosítja. Az adott értékhatárokhoz tartozó valószínűségek öszegének 1.0-nak kell lennie. Ezt a valószínűségeket feldolgozó algoritmus normálással valósítja meg. A következő ábrán (3.13. ábra) bemutatott sűrűségfüggvénynél az 1.1 - 1.2 körötti értékek kiválasztásának valószínűsége nulla(0) értékű, (mert ilyen érték is lehet).

Az empirikus eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)
3.13. ábra - Az empirikus eloszlás sűrűségfüggvénye (kék) és eloszlásfüggvénye (piros)


Az empirikus eloszlás definíciós függvényei:

Sűrűség (Empirical Density)=

f(x)  táblázattal van megadva

(3.27)

Eloszlás (Empirical Distribution)=

F(x)  integrál érték a táblázat alapján

(3.28)

Átlag (Empirical Mean)=

μ = az f(x)  táblázatból számítással

(3.29)

Szórás (Empirical Variance)=

δ = az f(x)  táblázatból számítással

(3.30)

3.1.2.2.9. Általános eloszlás függvény definiálása
  • Az általános eloszlás függvény generálásához 0..1 közötti egyenletes eloszlású véletlen szám generátor szükséges.

  • Létrehozzuk a kívánt ELOSZLÁSFÜGGVÉNY-t, -> minden bemenő értékhez megadjuk annak előfordulási valószinűségét. Nulla valószínűséget is megadhatunk!

  • Képezzük ennek az eloszlásfüggvénynek az INVERZ FÜGGVÉNYÉT (analitikusan, numerikusan, táblázatosan).

  • A véletlen szám generátort az inverz függvény független változójaként alkalmazva, létrehoztuk a tetszőleges eloszlású véletlen szám generátort.

3.1.2.3. Diszkrét Esemény objektum típusok

A legfontosabb elemek a DES szimulátorban a különböző feladatot ellátó alap-objektumok. Ezek biztosítják, hogy segítségükkel felépíthessük a különböző szimulációs modelleket. A LabVIEW-DES szimulációs rendszerben alapvetően öt alapobjektum szerepel, amelyek alapjai más bonyolultabb működést megvalósító DES objektumoknak.

Az alapobjektumoknak biztosítania kell az anyag-, illetve információ mozgást megjelenítő Entity objektumok kibocsátását, fogadását, átmeneti tárolását, továbbhaladásának késleltetését és ha minden feladatot elvégzett, akkor a megszüntetését. A DES rendszer működését biztosító Entity objektumokon kívül vannak még olyan objektumok, amelyek megadott (időbeni) eloszlás szerinti Entity kibocsájtást végeznek, ezek a Source objektumok. Az Entity objektumok fogadását, és átmeneti tárolását a Buffer objektumok végzik, amelyek véges tárolási kapacitással képesek átmenetileg raktározni az Entitás-okat. A következő objektum a Machine, amely a bementére érkezett Entitást - megadott időbeni eloszlás szerint - képes magában tartani (késleltetni a továbbhaladását), és ezzel különböző időtartamokkal jellemzett műveletek időszükségleteit képes modellezni. Azokat az Entitásokat, amelyek elvégezték összes feladatukat és el kell távolítani a szimulációs modellből egy Sink típusú objektumba vezetünk, amelynek az a feladata, hogy a bemenetére érkezett Entitást kivegye az objektumok listájából, és megszüntesse, hogy ne végezhessen további feladatot.

A LabVIEW DES rendszerben az objektumok nevét két elemből állítja össze a rendszer. Minden objektum rendelkezik egy saját, önálló, egyedi névvel, illetve minden objektumnak van egy olyan névparamétere, amely megadja, hogy melyik másik objektum tartalmazza őt. Ezzel megoldással lehet az Entity objektumok vándorlását nyomon követni és adminisztrálni. Az egyedi névből (Name) és az úgynevezett (Container Object Name) tároló objektum névből képzi a rendszer az objektumok számára azt a teljes nevet (Full Name), amelyből mindig megállapítható, hogy az Entity objektum melyik másik objektumban vagy objektumokban tartózkodik. Ennek az a következménye, hogy a diszkrét események kezelését végző alap objektumoknak is rendelkezniük kell egy Container Object Name paraméterrel, amely egy Container objektumtól kapja az adatot. A Container objektumnak nincs más szerepe csak az, hogy az alapobjektumok számára a Container Object Name értéket biztosítsa.

Az előbbiekben felsorolt objektumokat összefoglalóan DES Object-nek nevezzük. Ezekből az objektumokból épülnek fel a DES szimulációs rendszerben a modellek.

A DES objektum tulajdonságai
3.14. ábra - A DES objektum tulajdonságai


Az ObjectList objektum felépítése és tulajdonságai
3.15. ábra - Az ObjectList objektum felépítése és tulajdonságai


3.1.2.4. Diszkrét Esemény Objektumok összekapcsolása

A DES modell objektumainak bemenetét és kimenetét a szimulációs modell felépítésének megfelelően össze kell kötni. Így lehet elkészíteni azt az objektumokból álló hálózatot, amely egy adott feladat elvégzését biztosítja. A LabVIEW grafikus programozású rendszerben ezt úgy valósítottuk meg, hogy az egyes DES modell alapobjektumok egy bemenettel és egy kimenettel rendelkeznek, amelyeket adattípusuknak megfelelően ”azonos típusú” adatvezetékkel lehet (kell) összekapcsolni. A szimulációt végző keretrendszer első lépésként egyedi azonosítókkal (ID Number) látja el a modellben szereplő DES objektumokat, majd megállapítja, hogy melyik kimenet, melyik bemenethez van kapcsolva. Itt jegyezzük meg, hogy minden DES alapobjektum egy adat (Entity) bemenettel és egy adat (Entity) kimenettel rendelkezik. Ha egy adatkimeneti csatornát egynél több DES objektum adatbemeneti csatornájához kapcsolunk, akkor a DES objektumok foglaltsági állapota határozza meg, hogy az Entity melyek DES objektum bemeneti csatornájához kerül (jut el). Ha mindegyik DES objektum készen áll a beérkező Entity fogadására, akkor az objektumok (fizikai) definiálásának sorrendje határozza meg, hogy melyik DES objektumhoz kerül az entitás. Természetesen ezen a "vezetékes" összekapcsolási módon kívül a kiválasztást biztosító (kiegészítő) objektumok segítségével tetszőleges stratégia szerinti bemeneti csatorna kiválasztást - ezzel feldolgozási irányt (DES objektum választást) - tudunk megvalósítani.

3.1.2.5. Diszkrét Esemény Objektum kimeneti statisztikai adatai

A DES alapobjektumok rendelkeznek egy bemeneti és egy kimeneti paraméterrekorddal. A bemeneti paraméterek a DES objektum működését határozzák meg, míg a kimeneti paraméterek DES objektum típusától függő statisztikai adatokat szolgáltatnak az adott objektum működéséről.

A Source objektum által szolgáltatott adatok (3.16. ábra):

  • TimeNow

  • Time of Next Launching

  • Time Step

  • Index of ObjectList

  • Content Object Index

  • Number of Created Objects

  • Status Time Parameters (Time duration in Idle, Busy, Blocked, Failed, Paused state)

  • Status of Source (The possible states are: Idle, Busy, Blocked, Failed, Paused)

  • Full Name

A Buffer objektum által szolgáltatott adatok (3.18. ábra):

  • TimeNow

  • Index of ObjectList

  • Content of Buffer

  • Indexes of Content Objects

  • Used Buffer Capacity [%]

  • Status Time Parameters (Time duration in Idle, Busy, Blocked, Failed, Paused state)

  • Status of Buffer (The possible states are: Idle, Busy, Blocked, Failed, Paused)

  • Full Name

A Machine objektum által szolgáltatott adatok (3.21. ábra):

  • TimeNow

  • Time of Next Launching

  • Time Step

  • Index of ObjectList

  • Content Object Index

  • Utilization [%]

  • Histogram of States

  • Pie Chart of States

  • Status Time Parameters (Time duration in Idle, Busy, Blocked, Failed, Paused state)

  • Status of Buffer (The possible states are: Idle, Busy, Blocked, Failed, Paused)

  • Full Name

A Sink objektum által szolgáltatott adatok (3.17. ábra):

  • TimeNow

  • Index of ObjectList

  • Last Content Object Index

  • Number of Sinked Objects

  • Status of Sink (The possible states are: Idle, Busy, Blocked, Failed, Paused)

  • Full Name

A fentieken kívül minden DES objektum rendelkezik egy kétdimenziós dinamikus indexhatárú tömbváltozóval, amelynek string változók az elemei (User Attribute). Ezekbe az index-szel elérhető rekeszekbe helyezhető el az egyes DES objektumokhoz tartozó, és a szimulációs program futása közben keletkezett tetszőleges adat, amely a program futása közben (is) lekérdezhető. Ez a megoldás biztosítja, hogy az egyes DES objektumok képesek statisztikai adatok meghatározásához szükséges információkat gyűjteni, amelyeket folyamatosan kiértékelhetnek a futás közben vagy a szimuláció befejeztével.

3.1.3. Első mintapélda: Az M/M/1 rendszer modellje a LabVIEW DES rendszerben

Az M/M/1 rendszermodell a négy alapobjektum összekapcsolásával valósítható meg a LabVIEW DES rendszerben, úgy hogy a modell elemeit a LabVIEW DES objektumokra képezzük le ( 3.16. ábra , 3.17. ábra , 3.18. ábra , 3.21. ábra ). A rendszermodellben az Entity kibocsájtást biztosító elemnek a LabVIEW DES Source objektuma feleltethető meg. Hasonlóképpen a sor a Buffer objektummal, a kiszolgálási művelet a Machine objektum segítségével, míg az Entity eltávolítása a Sink objektummal képezhető le. A következő lépésként a 3.1.2.4. szakasz fejezetben leírtaknak meg felelően a DES objektumokat össze kell kapcsolni egy futtatható modellé (lásd  3.26. ábra).

A numerikus számítások elvégzéséhez azonban a LabVIEW proram diagram paneljén keresztül minden objektumot el kell látnunk a bemeneti paraméterek beállítását biztosító rekorddal valamint az eredmények (statisztikai adatok) megjelenítését lehetővé tevő úgynevezett kimeneti paraméterek rekorddal (lásd a 3.1.3.2. szakasz fejezetben).

3.1.3.1. A rendszermodell leképezése

Egy diszkrét esemény szimulációs feladatot megvalósító hálózatot alapelemekből építjük fel, amelyek lehetővé teszik tetszőleges topológia megvalósítását.

3.1.3.2. A Source objektum felépítése és feladata

A Source objektum különböző függvénytípusokkal meghatározott időtartamonként Entity objektumokat bocsát ki.

A Source objektum működése során a kibocsájtott entitás objektumokat elküldi a kimenetéhez kapcsolódó objektumhoz. Amennyiben az nem képes fogadni az entitást, akkor a következő számítási műveletnél a Source objektum megváltoztatja az állapotát és Blocked állapotba kerül. Blokkolt állapotban ismételten megpróbálja az entitást elküldeni a kimenetéhez kapcsolódó objektumnak.

A Source objektum kimenetéhez nem csupán egy, hanem több objektum bemenet is kapcsolódhat. Ilyenkor a Source objektum a kapcsolódó objektumok definiálási sorrendjében próbálkozik az entitás objektum átadásával. A Source objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg. A Source objektum bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paraméterei a következő ábrán (3.16. ábra) láthatók:

A Source objektum bemenő és kimenő paraméterei
3.16. ábra - A Source objektum bemenő és kimenő paraméterei


3.1.3.3. A Sink objektum felépítése és feladata

A Sink objektum szünteti meg (nyeli el) az Entity objektumokat.

A Sink objektum működése során a bemenetére érkezett Entity objektumokról megállapítja, hogy tartalmaznak-e más Entity objektumokat. Ezt követően megvizsgálja, hogy a tartalmazott Entity objektumok tartalmaznak-e további Entity objektumokat, mindaddig amíg olyan objektumokat talál, amelyek már nem tartalmaznak más objektumot. Az így ”felderített” Entity objektumok indexeit (az összes gyermekobjektumot) egy verem (stack) típusú memóriában helyezi el, és kitörli az objektumok listájából. Legvégül csupán az az entitás objektum marad, amely a bemeneti csatornán érkezett, és amelyet szintén töröl az objektumok listájából a Sink objektum.

A objektum törlése az objektumok listájáról azt jelenti, hogy megszüntetjük az elnevezését (nulla hosszúságú szöveg típusú konstans lesz a neve).

A Sink objektumnak nincs kimenete.

A Sink objektum bemeneti csatornáját kötelező bekötni, bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paraméterei a következő ábrán (3.16. ábra) láthatók:

A Sink objektum bemenő és kimenő paraméterei
3.17. ábra - A Sink objektum bemenő és kimenő paraméterei


3.1.3.4. A Buffer objektum felépítése és feladata

A Buffer objektum biztosítja a munkavégző objektumok (Entity-k) átmeneti tárolását, amíg az anyag- vagy információáramban a tároló objektum után kapcsolódó objektum munkavégzésre alkalmassá nem válik.

A Buffer objektum a működése során a bemenetére érkezett Entity objektumokat megpróbálja azonnal a kimenethez kapcsolt objektumhoz továbbítani. Ha ez nem sikerül, akkor átmenetileg tárolja őket.

A Buffer objektum kimenetéhez nem csupán egy, hanem több objektumbemenet is kapcsolódhat. Ilyenkor a Buffer objektum a kapcsolódó objektumok definiálási sorrendjében próbálkozik a kimenetén lévő Entity objektum átadásával.

A Buffer objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

A Buffer objektum bemeneti csatornáját kötelező bekötni, és a bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paramétereit a 3.18. ábra tartalmazza:

A Buffer objektum bemenő és kimenő paraméterei
3.18. ábra - A Buffer objektum bemenő és kimenő paraméterei


A DES objektumok közül, a Buffer objektum példáján keresztül, amelynek van bementi és kimeneti adatcsatornája is, bemutatjuk a paraméter együtteseket és azok beállítását. A korábban már bemutatott alapobjektumok hasonló felépítéssel rendelkeznek, csak egyes esetekben a bemeneti adat csatorna (Source) más esetben pedig a kimeneti adatcsatorna funkció hiányzik (Sink), bár a csatorna fizikailag rendelkezésre áll.

A Buffer objektum a következő bementi paraméterekkel rendelkezik (3.20. ábra):

  1. Container Object Name:  String változó, amely a Buffer objektum tároló objektumának nevét tartalmazza.

  2. Buffer Object Name:  A Buffer objektum saját nevét tárolja.

  3. Buffer Object Input Parameters: A Buffer objektum bemenő paraméterei (Capacity, Enabled Staus of Buffer, Type of Queue).

  4. Input Channel:  Két egész típusú adatból álló rekord, amely a Data változójában megadja annak az Entity objektumnak az index-ét, amely arra vár, hogy a Buffer objektum átvegye a hozzá kapcsolódó objektumtól. Ha a Data értéke nulla vagy negatív az azt jelenti, hogy az Input Channel üres, nem tartalmaz semmilyen adatot. Ha a Data érték pozitív, akkor ez egy létező Entity objektum index-ét tárolja. A Channel Index változó megadja, hogy az Entity melyik csatornáról érkezett.

A Buffer Objektum kimeneti paraméterei pedig a következők (3.29. ábra):

  1. Index of ObjectList:  Pozitív egész típusú érték, amely megadja az objektum indexét az ObjectList/DES Objects vektorban.

  2. Full Name:  String változó, amely a Buffer objektum tároló objektumának nevét és a Buffer objektum saját nevét tartalmazza.

  3. Buffer Object Output Parameters: A Buffer objektum kimenő paraméterei (TimeNow, Content of Buffer, Index of Content Objects, Status of Buffer, Command in Simulation, Full Name, Status Time Parameters, Used Buffer Capacity [%]).

  4. Output Channel: Két egész típusú adatból álló rekord, amely a Data változójában megadja annak az Entity objektumnak az indexét, amely arra vár, hogy a Buffer objektum átadja a hozzá kapcsolódó objektumnak. Ha a Data értéke nulla vagy negatív az azt jelenti, hogy az Input Channel üres, nem tartalmaz semmilyen adatot. Ha a Data érték pozitív, akkor ez egy létező Entity index-et jelől.

    A Channel Index változó megadja, hogy az Entity melyik csatornáról érkezett.

A Source, Machine, Sink és Container alapobjektumok hasonló felépítésűek, mint az előzőleg bemutatott Buffer objektum. Az objektumok összekapcsolását a (3.26. ábra) ábrán láthatjuk, ahol az Entity létrehozását egy "Source1" elnevezésű objektum valósítja meg.

A következő ábrákon (3.19. ábra , 3.20. ábra , 3.22. ábra , 3.23. ábra ) bemutatjuk az M/M/1 modell DES objektumainak bemeneti paraméterértékeit.

Source Objektum bemeneti paraméterei
3.19. ábra - Source Objektum bemeneti paraméterei


A Source objektum exponenciális eloszlású eloszlásfüggvénnyel (EXPONENTIAL (Mean)) hoz létre "Apple" elnevezésű Entity-ket, amelyek a szimuláció kezdő időpontjától létrejönnek (First Creation Time), a Source objektum nem korlátozza a kibocsátott Entity-k darabszámát, mivel a Maximum Batch Size paraméter végtelen (Inf = Infinity) értékű. A bementi paraméterekként szereplő egyéb számértékek más eloszlásfüggvények esetén szerepelnek bemeneti értékeikkel. A program alkalmazója a CONSTANT(Value) eloszlás érték választása esetén a Value bemenő paramétere értéket a szimuláció alatt dinamikusan változtathatja és így tetszőleges eloszlásfüggvényt valósíthat meg. Az Enabled Status of Source kombinált lista segítségével három lehetséges objektumállapotot (Enabled, Failed, Paused) választhat ki. Az Enabled állapotban a DES objektum minden számítást elvégez, a Failed állapotban nem végez semmiféle számítást, mivel az állapot azt jelzi, hogy meghibásodott, míg a Pause üzemállapotban a berendezés hibátlan állapotban van, de nem végez műveletet, hanem arra vár, hogy azonnal működésbe lépjen egy meghibásodott (párhuzamosan működő) DES objektum feladatának elvégzésére.

Buffer Objektum bemeneti paraméterei
3.20. ábra - Buffer Objektum bemeneti paraméterei


A Buffer objektum bemeneti pataméterei között megtaláljuk az objektum által tárolható Entity-k darabszámát (Capacity), valamint a Buffer objektum típusát Type of Queue, amely egy kombinált listából kiválasztható három lehetséges típus valamelyike. A kiválasztható Buffer típusok: First In First Out, Last In First Out és a Using Entity Priority (ahol az Entity a System Attribute paraméterében tárolt érték alapján távozik a tárolóból).

Az Enabled Status of Buffer kombinált lista három lehetséges objektumállapotot (Enabled, Failed, Paused) választhat ki. Az állapotok jelentése megegyezik a Source objektumnál leírtakkal.

3.1.3.5. A Machine objektum felépítése és feladata

A Machine objektum különböző, függvénytípusokkal meghatározott időtartamú műveletet végez az Entity objektumon.

A Machine objektum a működése során a bemenetére érkezett Entity objektumok továbbhaladását késlelteti a műveleti idővel. A műveleti időt különböző eloszlásfüggvény segítségével határozhatjuk meg. Ha a műveleti idő letelt, a Machine objektum megpróbálja az Entity objektumot a kimeneti csatornáján a kimenethez kapcsolódó modellobjektumnak átadni. Ha ez nem sikerül Blocked (Blokkolt) állapotba kerül és minden egyes számítási ciklusnál újra próbálkozik, hogy az ”elkészült Entity-től megszabaduljon”. Amíg blokkolt állapotban van addig nem fogad újabb entitás objektumot a bemeneti csatornáján.

A Machine objektum kimenetéhez nem csupán egy, hanem több objektum bemenet is kapcsolódhat. Ilyenkor a Machine objektum a kapcsolódó objektumok definiálási sorrendjében próbálkozik az Entity objektum átadásával.

A Machine objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

A Machine objektum bemeneti csatornáját kötelező bekötni, bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paramétereit a következő ábrán (3.21. ábra) láthatjuk:

A Macine objektum bemenő és kimenő paraméterei
3.21. ábra - A Macine objektum bemenő és kimenő paraméterei


A Machine Objektum bemeneti paraméterei
3.22. ábra - A Machine Objektum bemeneti paraméterei


A Machine objektum bementi pataméterei között megtalálható a Distribution paraméter, amely egy kombinált lista típusú adatelem, amelyből kiválasztható értékek a következők:

  • CONSTANT(Value),

  • EXPONENTIAL(Mean),

  • NORMAL(Mean, Deviation),

  • TRIANGLE(Minimum, Usual, Maximum),

  • UNIFORM(Minimum, Maximum).

A felsorolásból látható, hogy az egyes eloszlások a bementi paraméterek közötti numerikus értékekből csak meghatározott elnevezésű értékeket alkalmaznak. Így könnyen és pontosan beállíthatók az egyes eloszlástípusokhoz tartozó bementi paraméterek.

Az Enabled Status of Machine kombinált lista három lehetséges objektumállapotot (Enabled, Failed, Paused) választhat ki. Az állapotok jelentése megegyezik a Source objektumnál leírtakkal.

Sink Objektum bemeneti paraméterei
3.23. ábra - Sink Objektum bemeneti paraméterei


A Sink objektum egyetlen bemeneti paraméterrel rendelkezik, amely megadja, az objektum állapotát a szimulációs modell számára.

A DES objektumok állapota a szimulációs modellben dinamikusan (programfutás közben is) változtatható, így kézi vagy programmal előírt objektumállapotokat definiálhatunk egy előírt vagy vizsgált működési mód esetén

A 3.26. ábra bemutatja a modell elemeinek összekapcsolását az úgynevezett Diagram Panelon, amely grafikus programozás segítségével valósítja meg az egyes elemek bemenő és kimenő adatvezetékeinek összekötését. Ez a programrészlet elsősorban azt szemléltati, hogy a DES objektumok hogyan kapják meg bemenő paramétereiket, és hogyan valósul meg az egyes objektumok összekapcsolása.

A 3.27. ábra ábrán egy olyan Front Panel képet mutatunk be, amely DES Objektumok kimenő paraméteradatainak felhasználásával különösebb probléma nélkül kialakítható. Az egyes objektumok kimeneti adatai, mint ahogy az a (3.19. ábra , 3.20. ábra , 3.22. ábra , 3.23. ábra ) ábrákon látható, egyetlen adatstruktúrában - egy rekordban - jelennek meg (melynek a LabVIEW elnevezése cluster).

M/M/1 rendszer modellje
3.24. ábra - M/M/1 rendszer modellje


M/M/1 rendszer blokkdiagramja
3.25. ábra - M/M/1 rendszer blokkdiagramja


Az első mintapélda  (M/M/1) modell Diagram Panel-je
3.26. ábra - Az első mintapélda  (M/M/1) modell Diagram Panel-je


Az első mintapélda  (M/M/1) model Front Panel-je
3.27. ábra - Az első mintapélda  (M/M/1) model Front Panel-je


A 3.27. ábra bemutatja az M/M/1 modell eredményeit egy meghatározott idejű futás után. Az ábra bal oldalán látható, hogy a szimuláció időtartama alatt a Source objektum 972 Entity-t hozott létre, amelyből a Sink objektumot megjelenítő négyszög belsejében lévő Produced felirat alatt szereplő numerikus kijelzőben 967 Entity kezeléséről, és a szimulációs folyamatból történt kilépéséről kapunk tájékoztatást. A létrehozott és a már kilépett Entity-k darabszámának különbsége azok az Entity-k, amelyek a szimuláció befejezése után valamelyik objektumban vannak (maradtak). Erről kapunk tájékoztatást a Sink objektum megjelenítője alatt elhelyezkedő numerikus kijelzőn, amely Work in Process Objects feliratú.

A Front panelen szerepelnek még egyéb információs kijelzők, amelyek megadják a szimuláció lefutásának valós időtartamát Real Time [sec], valamint az adott számítógépen a szimuláció és az eltelt valós idő hányadosát, azaz a szimuláció sebességi faktorát a Simulation Time / Real Time kijelzőben.

A ábrán (3.27. ábra) szereplő Status of xxx kombinált lista értékei a szimulációt megelőzően beállíthatók a működési feltételeknek megfelelő értékekre, illetve ennél a modellnél a szimuláció időtartama alatt kézzel megváltoztathatók. Hasonlóan, a szimuláció megkezdése előtt beállíthatók az eloszlás (Distribution) kombinált lista kiválasztott értéke, és ennek paramétere beállítható a Mean Time of xxx beállító (knob) objektumokon. A jelenlegi beállítás mind a Source, mind pedig a Machine objektumnál EXPONENTIAL(9) eloszlás, amely 9.0 átlagértékű exponenciális eloszlást jelent.

A következő ábrákon az M/M/1 modellben szereplő objektumok kimenő paramétereinek rekordjait láthatjuk, a szimulációs program adott időtartamú futásának befejezése után.

A Source objektum kimeneti paraméterei
3.28. ábra - A Source objektum kimeneti paraméterei


A Source objektum kimenő paraméterei az előző ábrán (3.28. ábra) láthatók. Ez az objektum indítja útjára azokat a véletlenszám generátorral időzitett Entity objektumokat, amelyek végighaladnak a szimulációs modell különböző objektumain, és azokban várakoznak bizonyos események bekövetkezésére.

A TimeNow kijelző azt mutatja, hogy a szimuláció 9322-ik időegységének megfelelő időpontban vagyunk (ez volt a szimuláció időtartama).

A Time of Next Lauching változóban azt az időpontot láthatjuk (szimulációs időegységben), amely megmondja, mikor kell a Source objektumnak legközelebb egy Entity-t kibocsátania (erre már nem kerül sor, mert a szimuláció befejeződött ).

A TimeStep érték megmutatja, hogy a kiválasztott eloszlásfüggvény szerint mekkora volt a legutolsó időlépés nagysága. Ez azt is jelenti, hogy a Source objektum a (Time of Next Lauching - TimeStep) értéknek megfelelő időpontban bocsájtotta ki a legutolsó Entity-t.

Az Index of ObjectList kijelző a Source objektum indexét adja meg az ObjectList objektumban.

A közvetlen mellette szereplő Content Object Index pedig azt jelzi, hogy jelenleg nincs létrehozott objektum a Source objektumban (amit nem tudott eddig még továbbadni a hozzá kapcsolt objektum bemenetéhez). Az

Entity at Output kapcsoló akkor kerülne át az ON (bekapcsolt) állapotba, ha volna Entity a Source objektumban. Jelenleg nincs, így a kapcsoló állapota OFF.

A Number of Created Objects kijelzőből megkapjuk, hány darab Entity-t hozott eddig létre a Source objektum. A 3.18. ábra jobb oldalán található az a vektor, amelynek elnevezése Staus Time Parameters, melynek értékei megmutatják, az adott vektorelem adott állapotokban eltöltött időtartamainak értékeit.

A Source objektum működésének teljes időtartama alatt alapvetően Idle állapotban van. Kivétel egyedül az az eset, amikor az előzetesen meghatározott időpontban létrejött Entity-t nem tudja még ugyanabban a szimulációs lépésben továbbadni az adatkimenetéhez kapcsolódó objektumnak (jelen esetben a Buffer objektumnak). Ez olyan olyan okból történhet csak meg, hogy a Source objektum kimenetéhez kapcsolódó objektum nem képes fogadni a számára felajánlott új Entity-t. Ebben a példában ez csak akkor történik meg, ha a Buffer objektum tele van, azaz kapacitásának megfelelő Entity-t tartalmaz.

Ilyenkor a Source objektum Blocked állapotba kerül, a Staus Time Parameters vektor In Blocked State feliratú eleme pedig megmutatja, hogy a Soure objektum mennyi időt (időtartamot) töltött a Blocked állapotban.

A diszkrét esemény szimulációs rendszerek szempontjából a blokkolt állapot(ok) minimalizálása vagy megszüntetése a tervezés elérendő célja!

A Source objektum a szimulációs rendszer működése során soha nem kerülhet In Busy State állapotba, mivel működésének alapja, hogy nem végez semmilyen műveletet az Entity-ken. A Source objektum meghibásodott állapotban eltöltött időtartamát az In Failed State, a készenléti állapotban eltöltött időt pedig az In Paused State, vektor elemben szereplő időtartam adja meg.

A Status of Source combobox megadja az adott szimulációs időpillanatban (TimeNow) a Source objektum állapotát. Az objektum lehetséges állpotai: Idle, Busy, Blocked, Failed, Paused. Az állapotok jelentését a korábbiakban ismertettük.

A Command in Simulation kombinált lista a szimulációs program futási állapotát adja meg, lehetséges állpotai a következők:

Initiation

Ebben a programállapotban történik meg a modellben szereplő DES objektumok egyedi ID Number értékeinek automatikus hozzárendelése. Ez az ID Number lesz a továbbiakban az objektum (azonosító) indexe az objektumok listájában.

Clear Inputs

Ebben az állapotban az egyes DES objektumok bemeneteinek és kimeneteinek nulla értékkel történő feltöltése valósul meg. Ebben az állapotban az egyes objektumok bemenetén és kimenetén nincs egyetlen pozitív egész számmal mint index-szel jelzett objektum sem.

Calculate

Ebben az üzemállapotban történik meg az azonosító index-szel ellátott összekapcsolt objektumok segítségével a szimulációs program futtatása. Minden egyes esemény időpillanatban a szimulációs rendszer megvizsgálja minden objektum állapotát, és ha szükséges állapotváltoztatást hajt végre. Számos ilyen állapot megváltoztató művelet van, amelyeknek közös vonása, hogy egy adott objektum állapot változása (például a bemeneten új Entity fogadása) hatással van a hozzá kapcsolódó objektumra is így annak állapotát is át kell állítania. Az Entity forgalom kényelmes biztosításához az Entity-k, mint minden más DES objektum rendelkeznek állapot értékkel. Az Entity-k Idle állapotban vannak, ha valmelyik DES objektum kimeneti adat csatornájában arra várnak, hogy a kimenethez kapcsolódó objektum "átvegye" őket. Az Entity-k Busy állapotba kerülnek, ha valamelyik objektum átvette őket, az Index of Container Object attributumuk pedig megadja, hogy melyik DES objektumban vannak.

A Full Name kijelzőben láthatjuk a DES objektum teljes nevét. Ez tartalmazza annak a Container típusú objektumnak a nevét amelyhez a Source objektum tartozik, illetve hozzákapcsolva megjelenik az objektum saját elnevezése is. A változó a családnevekben megszokott elnevezési metódust követi, azaz minden DES objektumnak van egy "családneve" ez itt a Container Full Name, illetve minden DES objektumnak van egy saját neve. A (3.28. ábra) ábrán ez úgy jelenik meg, hogy a Source1 elnevezésű Source objektumnak, amelynek a ContainerName bemenetéhez egy olyan Container objektum kapcsolódik, amelynek Main # Model a teljes neve (Full Name), a saját teljes neve (a Full Name)  Main # Model # Source1 lesz.

A Buffer objektum kimeneti paraméterei
3.29. ábra - A Buffer objektum kimeneti paraméterei


A Buffer objektum kimenő paraméterei a fenti ábrán (3.29. ábra) láthatók. Az objektum átmenetileg tárolni képes azokat az Entity objektumokat, amelyek a bemenetére érkeznek. A beérkezett Entity objektumokat a beérkezés pillanatában megpróbálja a kimeneti csatornáján továbbküldeni, ha azonban ez nem sikerül, akkor tárolja az objektumot.

A Time Now kijelző itt is azt mutatja, hogy a szimuláció 9322-ik időegységének megfelelő időpontban vagyunk (ez volt a szimuláció befejezési időpontja).

A Content of Buffer kijelző megadja hogy hány darab Entity van éppen ebben pillanatban a Buffer objektumban.

Az Index of Content Objects string változóban adja meg azoknak az Entity-iknek az ObjectList-beli indexét, amelyek éppen a Buffer objektumban tartózkodnak.

A Status of Buffer valamint a Command in Simulation kombinált listák azonos kiválasztási (kijelzési) értékeket tartalmaznak, mint ahogy azt már a Source objektumnál leírtuk. A feladatuk is teljesen azonos, mint ahogy azt már korábban leírtuk.

A Status of Buffer kijelző a Buffer objektum aktuális állapotát adja meg (Idle, Busy, Blocked, Failed, Paused).

A Command in Simulation combobox kijelző pedig a szimulációs program által végzett aktuális műveletet jelzi ki (Initiation, Clear Inputs, Calculate).

A Status Time Parameters vektor elemei megmutatják, hogy a Buffer objektum mennyi időt (időtartamot) töltött az egyes állapotokban (In Idle State, In Busy State, In Blocked State, In Failed State, In Paused State).

A Buffer objektum működésekor alapvetően csak négy állapotban lehet az Idle, Blocked, Failed és a Paused állapotban.

  • Az Idle állapot azt jelenti a Buffer objektumnál, hogy nem tartalmaz semmilyen Entity objektumot.

  • A Blocked állapotba akkor kerül a Buffer objektum, ha a benne lévő Entity objektumot(kat) nem tudja a továbbadni a kimenetéhez kapcsolódó DES objektumnak.

  • A Failed állapot azt jelenti, hogy a Buffer objektum meghibásodott, és nem képes Entity-ket fogadni a bemenetén, illetve nem képes a benne elhelyezkedő Entity-ket a kimenetén kibocsájtani.

  • A Paused állapotban lévő Buffer objektum minden egysége működőképes, de biztonsági tartalékként szerepel a szimulációs modellben, hogy egy vele párhuzamosan működő (ugyanahhoz a bemenethez és ugyanahhoz kimenethez kapcsolódó) Buffer objektumot helyettesítse, ha az meghibásodik.

Machine Objektum kimeneti paraméterei
3.30. ábra - Machine Objektum kimeneti paraméterei


A Machine objektum kimenő paraméterei a fenti ábrán (3.30. ábra) láthatók. Az objektum egy meghatározott időtartamig (TimeStep) nem engedi tovább haladni azt az Entity objektumot, amelyet a bemeneti csatornájáról beolvasott.

A Full Name kijelzőben láthatjuk az DES objektum teljes nevét. A Time Now kijelző azt mutatja, hogy a szimuláció 9322. időegységének megfelelő időpontban vagyunk (ez volt a szimuláció befejezési időpontja).

A Time of Next Lauching változóban azt az időpontot láthatjuk (szimulációs időegységben), amely megmondja mikor kell a Machine objektumnak legközelebb kibocsájtania a benne tárolt Entity-t.

A TimeStep érték pedig megmutatja, hogy a kiválasztott eloszlásfüggvény szerint mekkora volt a legutolsó időlépés nagysága. Ez azt is jelenti, hogy a Machine objektum a (Time of Next Lauching - TimeStep) értéknek megfelelő időpontban bocsátotta ki a legutolsó Entity-t.

Az Index of ObjectList kijelző a Machine objektum index-ét adja meg az ObjectList objektumban.

A közvetlen alatta elhelyezkedő Content Object Index pedig azt jelzi, hogy melyik indexszel rendelkező Entity objektum van most a Machine objektumban.

Az Entity at Input kapcsoló azért van bekapcsolt (felső) állapotban, mert a bemeneti adatcsatornában várakozik egy Entity, hogy azt a Machine objektum beolvassa.

Az Entity at Output kapcsoló akkor kerülne át a bekapcsolt (felső) állapotba, ha a kimeneti adatcsatornában arra várakozna egy Entity, hogy a Machine objektum kimenetéhez kapcsolódó másik objektum átvegy azt.

A Utilization [%]műszer megmutatja a Machine objektum (hasznos) kihasználtságának nagyságát. Ez a számérték a Busy állapotban eltöltött időtartam osztva az összes eddig eltelt szimulációs idővel áll elő.

A 3.30. ábra jobb oldalán található Staus Time Parameters vektor, amelynek feliratai megmutatják, hogy az adott vektor elem melyik állapotban eltöltött időtartam értéket mutatja.

A Machine objektum

  • Idle állapotban van, ha nincs benne Entity objektum,

  • Busy állapotban van, ha van benne egy Entity objektum,

  • Blocked állapotba kerül, már elkészült a TimeStep paraméterrel megadott időtartamú művelettel, de nem tudja továbbadni a kimenetéhez kapcsolódó DES objektumnak, mert az nem képes fogadni azt,

  • In Failed State a Machine objektum meghibásodott állapotban eltöltött időtartamát adja meg,

  • In Paused State időtartam pedig a készenléti állapotban eltöltött időtartamot adja meg.

A Status Time Parameters, vektorban lévő információt jelenítik meg grafikus formában a Histogram of States és a Pie Chart of States kijelzők.

A Status of Machine kombinált lista megadja az adott szimulációs időpillanatban (TimeNow) a Machine objektum állapotát. Az objektum lehetséges állpotai: Idle, Busy, Blocked, Failed, Paused. Az állapotok jelentését a korábbiakban ismertettük.

A Command in Simulation kombinált lista kijelző pedig a szimulációs program által végzett aktuális műveletet mutatja (Initiation, Clear Inputs, Calculate).

A Sink objektum kimeneti paraméterei
3.31. ábra - A Sink objektum kimeneti paraméterei


A Sink objektum kimenő paraméterei a fenti ábrán (3.31. ábra) láthatók. Az objektum fogadja és kilépteti a szimulációs rendszerből azokat az Entity objektumot, amelyekkel elvégeztük az összes szükséges feladatot, és meg kell szüntetnünk őket.

A Full Name kijelzőben láthatjuk a DES objektum teljes nevét.

A Time Now kijelző azt mutatja, hogy a szimuláció melyik időpontjában vagyunk.

A Last Content Object Index kijelzőben annak az Entity objektumnak az indexét kapjuk meg, amely legutoljára tartózkodott a Sink objektumban.

A Number of Sinked Object kijelzőben láthatjuk a Sink objektumban eddig az időpontig kiléptetett Entity objektumok számát.

Az Entity at Input kapcsoló azért van kikapcsolt (alsó) állapotban, mert a bemeneti adatcsatornában nem várakozik Entity, hogy azt a Sink objektum beolvassa.

A Status of Sink kombinált lista megadja az adott szimulációs időpillanatban (TimeNow) a Sink objektum állapotát. Az objektum lehetséges állpotai: Idle, Busy, Blocked, Failed, Paused. Az állapotok jelentését a korábbiakban ismertettük.

A Command in Simulation kombinált lista kijelző pedig a szimulációs program által végzett aktuális műveletet jelzi ki (Initiation, Clear Inputs, Calculate).

A szimulációs programot a (3.27. ábra) ábrán látható értékbeállító és kiválasztó elemek segítségével a vizsgált üzemállapotnak megfelelő bemeneti paraméterekre kell beállítani, és elvégezni a futtatást meghatározott időtartamig. A szimulációs program futásának befejeztével megkapjuk azokat az akkumulált statisztikai értékeket, amelyeket a szimulációs program a teljes futási időtartam alatt gyűjtött. Természetesen olyan szimulációs értékeket is figyelemmel kísérhetünk, amely pillanatnyi értéke (maximuma, minimuma) fontos a szimulációs program futása során. Ezekhez a LabVIEW program számos kijelző objektumot bocsájt rendelkezésre, amelyekkel a kívánt stílusú kijelzés könnyen megvalósítható.

3.1.3.5.1. Az Entity objektum felépítése és feladata (Entitás objektum)

Az objektum szabadon felhasználható munkavégző objektumként. Az DES objektum felépítése lehetővé teszi, hogy modell vagy munkavégző objektum legyen belőle. A DES objektum típusa határozza meg, hogy milyen feladatot lát el az illető objektum.

Az Entity objektumot a LabVIEW DES rendszerben csak a Source tipusú objektumok bocsátják ki.

Programozástechnikailag a programozó önállóan is létrehozhat Entity objektumot, de ennek kezelésével és működésének szervezésével olyan sok, egymással szervesen összefüggő feladat van, hogy nem célszerű alkalmazni.

Az Entity objektumok lehetnek anyagi tulajdonsággal rendelkező elemek, például egy gyártási, összeszerelési folyamatban, lehetnek személyek, akik különböző képesítéssel rendelkeznek, és így a munkafolyamatban történő részvélelüket időzíteni és logisztikailag szervezni kell.

Lehetnek Entity objektumok személyek, akiknek adott feltételek melletti forgalmát vagy különböző típusú kiszolgálását kell biztositani.

Az Entity objektum modellbeli megjelenésére és szerepére vonatkozóan még számos példát lehet találni. Összefoglalóan arról a szimulációs objektumról van szó, amely egy adott fizikai ponton belép a szimulációs folyamatba, haladása során különböző okok miatt várakozni kényszerül, majd egy adott fizikai ponton kilép a szimulációs folyamatból.

Az Entity áthaladása a szimulációs rendszeren számos kapcsolatot (statisztikai információt) jelent azokkal az objektumokkal, amelyeken útja során találkozott. A szimulációs rendszeren áthaladó Entity objektumok szintén értékes, egyedi statisztikai adatokat gyűjthetnek arról a rendszerről, amelyen áthaladtak.

3.1.4. Második mintapélda: Több kimeneti pont egyesítésének biztosítása (Join művelet)

3.1.4.1. A Join objektum felépítése és feladata

A Join objektumnak több bemenete és egy kimenete van, amelyek közül egyik bemeneti paraméterével (Join Input Channel Index = Bemeneti csatornaválasztó index) képes kiválasztani, hogy melyik bemenettől fogadja az entitás objektumot.

A Joint objektum több mint egy bemeneti csatornával rendelkezik (bemeneti csatornák vektorával). A kiválasztott csatornáján a bemenetére érkezett Entity objektumot megpróbálja azonnal a kimenethez kapcsolt objektumhoz továbbítani. Ha ez nem sikerül, akkor átmenetileg tárolja az entitást.

A Join objektumból a tárolt entitások First In First Out (Első beérkező első távozó), stratégia alapján távoznak.

A Join objektum kimenetéhez nem csupán egy, hanem több objektumbemenet is kapcsolódhat. Ilyenkor a Join objektum a kapcsolódó objektumok definiálási sorrendjében próbálkozik a kimenetén lévő entitás objektum átadásával. A Join objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

A Join objektum bemeneti csatornáját kötelező bekötni, a bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paraméterei a következő ábrán (3.32. ábra) láthatók:

A Join objektum bemenő és kimenő paraméterei
3.32. ábra - A Join objektum bemenő és kimenő paraméterei


A Második mintapélda LabVIEW DES Diagram Panelje
3.33. ábra - A Második mintapélda LabVIEW DES Diagram Panelje


A Második mintapélda a Join objektum működését mutatja be a fenti ábrán (3.33. ábra). A két azonos felépítésű Source, Buffer és Machine objektumokból álló vonal által kibocsájtott Entity sorozat kerül a Join1 elnevezésű objektum bemeneteihez. Az objektum (jelenleg) 50-50%-os valószínűséggel választ a két lehetséges bemeneti csatornája közül, és a csatornánál lévő Entity objektumot viszi tovább a Machine3 elnevezésű műveletvégző objektumhoz.

3.1.5. Harmadik mintapélda: Több bemeneti pontból történő választás biztosítása megadott szabály szerint (Select művelet)

3.1.5.1. A Selector objektum felépítése és feladata

A Selector objektumnak több kimenete és egy bemenete van, amelyek közül egyik bemeneti paraméterével (Selector Channel Index = Kimeneti csatornaválasztó index) képes kiválasztani, hogy melyik kimeneti csatornájához továbbítsa a kimeneténél lévő entitás objektumot.

A Selector objektum több mint egy kimeneti csatornával rendelkezik (kimeneti csatornák vektorával). A kiválasztott kimeneti csatornáján megpróbálja, átadni a bemenethez érkezett és átvett entitás objektumot. Ha ez nem sikerül akkor átmenetileg tárolja az entitást.

A Selector objektumból a tárolt entitások First In First Out (Első beérkező első távozó) stratégia alapján távoznak.

A Selector objektum minden egyes kimeneti csatornájához KÖTELEZŐEN EGY MODELLOBJEKTUMOT KELL KAPCSOLNI!

A Selector objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

A Selector objektum bemeneti csatornáját kötelező bekötni, bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paraméterei a következő ábra (3.34. ábra) szemlélteti:

A Selector objektum bemenő és kimenő paraméterei
3.34. ábra - A Selector objektum bemenő és kimenő paraméterei


A Harmadik mintapélda LabVIEW DES Diagram Panelje
3.35. ábra - A Harmadik mintapélda LabVIEW DES Diagram Panelje


A Harmadik mintapélda a Selector objektum működését mutatja be a fenti ábrán (3.35. ábra). A bemeneten (az ábra bal oldalán) elhelyezkedő Source objektum által kibocsájtott Entity-ket a Selector objektum két kimeneti csatornája közül az egyikhez továbbítja, amelynek indexét bementi paraméterként adhatjuk meg.

A Selector objektum kimeneti csatornáihoz két azonos felépítésű Buffer, Machine és Sink objektumokból álló vonal csatlakozik, amelyekben az Entity sorozat feldolgozása folytatódik. A Selector objektum (jelenleg) 50-50%-os valószínűséggel választ a két lehetséges kimeneti csatornája közül.

3.1.6. Negyedik mintapélda: Több entitás elhelyezése egy másik (Package) entitásban (Pack művelet), illetve több entitás kibontása egy másik (Package) entitásból (UnPack művelet)

3.1.6.1. A Pack objektum felépítése és feladata

A Pack az objektumnak két bemenete és egy kimenete van. Az első bemeneten (Channel_0) keresztül jut be a becsomagolandó objektumok, míg a második bemeneten (Channel_1) a csomag (doboz) objektum. A becsomagolás művelete úgy történik, hogy először egy csomag (doboz) objektumnak kell megérkeznie, majd ezután várakozik az objektum, amíg a becsomagolandó mennyiségű Entity meg nem érkezik. A becsomagolandó Entity-ket elhelyezi a csomag (doboz) objektumban, majd továbbküldi az így módosított csomag (doboz) objektumot.

A Pack objektum speciális kialakítású Join objektum, amely két bemeneti csatornával rendelkezik (bemeneti csatornák vektorával). Az objektumban a becsomagolás minden műveletét egy szekvenciális logikai program biztosítja, amely a kívánt műveleteknek megfelelően vezérli a Pack objektum bemeneteit és kimeneteit. Ennél az objektumnál volt szükség olyan bemeneti és kimeneti csatornákat engedélyező kapcsolók kialakítására, amelyeket ebben a program verzióban az összes más modellobjektumnál is megvalósítottunk.

A Pack objektum csatorna definiálási és kezelési feladatához a következő bemeneti paraméter áll rendelkezésre: Packed Quantity Request (Az összecsomagolás darabszám igénye), pozitív, egész szám, amellyel az összecsomagolt Entity-k darabszámát adjuk meg.

A Pack objektum kimenetéhez nem csupán egy, hanem több objektumbemenet is kapcsolódhat. Ilyenkor a Pack objektum a kapcsolódó objektumok definiálási sorrendjében próbálkozik a kimenetén lévő összecsomagolt entitás objektum átadásával.

A Pack objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

A Pack objektum minden bemeneti csatornáját kötelező bekötni, a bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paraméterei a következő ábrán (3.36. ábra) láthatók:

A Pack objektum bemenő és kimenő paraméterei
3.36. ábra - A Pack objektum bemenő és kimenő paraméterei


3.1.6.2. Az UnPack objektum felépítése és feladata

Az Unpack objektumnak egy bemenete és két kimenete van. Az első kimeneten (Channel_0) keresztül jutnak ki a kicsomagolt objektumok, míg a második kimeneten (Channel_1) a csomag (doboz) objektum. A kicsomagolás művelete úgy történik, hogy először egy csomag (doboz) objektumnak kell megérkeznie, majd ezután az objektum kicsomagolja a csomag objektumban lévő Entity-ket, és átmenetileg tárolja őket. A kicsomagolt entitásokat folyamatosan eltávolítja az első kimenetén (Channel_0), majd amikor mindegyik eltávozott, a csomag (doboz) objektumot eltávolítja a második kimenetén (Channel_1).

Az Unpack objektum speciális kialakítású Selector objektum két kimeneti csatornával (kimeneti csatornák vektorával). A kiválasztott kimeneti csatornákon keresztül a bemenethez érkezett és átvett összecsomagolt entitás objektumból kicsomagolt entitásokat megpróbálja a kiválasztott kimenethez kapcsolt objektumhoz továbbítani. Ha ez nem sikerül, akkor átmenetileg tárolja a kicsomagolt Entity-ket és a csomag Entity-t.

Az Unpack objektum kimeneti csatorna definiálási és kezelési feladataihoz nem állnak rendelkezésre bemeneti paraméterek.

Az Unpack objektumból a tárolt entitások a First In First Out (Első beérkező első távozó) stratégia alapján távoznak. Az Unpack objektum minden egyes kimeneti csatornájához egy modellobjektum kapcsolható! Az Unpack objektum kimenetéhez kapcsolódó objektumok indexeinek segítségével tetszőleges kibocsátási stratégia valósítható meg.

Az Unpack objektum bemeneti csatornáit kötelező bekötni, a bemeneti paraméterének rekordját kötelező definiálni!

Az objektum bemenő és kimenő paramétereit a következő ábra (3.37. ábra) szemlélteti:

Az UnPack objektum bemenő és kimenő paraméterei
3.37. ábra - Az UnPack objektum bemenő és kimenő paraméterei


A Negyedik mintapélda LabVIEW DES Diagram Panelje
3.38. ábra - A Negyedik mintapélda LabVIEW DES Diagram Panelje


A Negyedik mintapélda a Pack és UnPack objektumok működését mutatja be a fenti ábrán (3.38. ábra). A két azonos felépítésű Source, Buffer és Machine objektumokból álló vonal által kibocsájtott Entity sorozat kerül a Pack1 elnevezésű objektum bemeneteihez. A bemenetek közül az elsőhöz a becsomagolandó Entity objektumokat kell vezetnünk, míg a második bementhez a csomag objektumokat. Addig ameddig nem érkezik egy csomag objektum, nem lehet elkezdeni a becsomagolást. A Pack objektum bementi paramétere megadja, hogy hány darab objektumot kell becsomagolni egy csomagba.

A 3.38. ábra bal oldalán helyezkednek el a csomag és a becsomagolandó objektum Entity kibocsájtó és feldolgozó elemei. A LabVIEW egyik alapvető programozási lehetősége, hogy tetszőleges mennyiségú LabVIEW ikon egy alprogrammá vonható össze. Így az ábrán az alsó részen megvalósított alprogram ugyanaz a feladatot látja el, mint a felső részen elemekből összeállított Entity kezelő rendszer.

Ebben az egyszerű példában az összecsomagolt objektumokat egy UnPack objektummal azonnal szét is bontjuk és külön-külön Sink objektumokkal semmistjük meg az összecsomagolt objektumokat és a csomagokat, amelyekben össze voltak csomagolva.

3.2. A szimulációs rendszer objektumainak közös tulajdonságai (Global Variables)

3.2.1. Az "ObjectList" globalis változók

A következő ábrán (3.39. ábra) látható ObjectList globális változó minden eleme elérhető a szimuláció során bármelyik eljárásból. A szimulációs modell tulajdonképpen az ObjectList globalis változóban (3.39. ábra Az ObjectList objektum felépítése és tulajdonságai) épül fel a DES Objects vektorban úgy, hogy megadjuk a szimulációs modellben szereplő DES objektumok típusát és bemenő paramétereit (mint ahogyan az a (3.10. ábra) ábrán látható a Buffer objektum esetén). A LabVIEW program által biztosított grafikus programozási lehetőséges segítségével létrehozzuk azt a DES objektumkapcsolást, amelyet szeretnénk megvizsgálni. A LabVIEW DES kijelző rekordjait vagy egyéb, a LabVIEW rendszerben alkalmazott kijelző típusokat felhasználva megtervezzük, és megvalósítjuk a számított mennyiségek kijelzését. Majd következik a szimulációs program futtatása, ahol a különböző DES objektumok információkat olvasnak ki más (tetszőleges) DES objektumok aktuális állpotáról, és meghatározott feltételek teljesülése esetén meg is vátoztatják azokat. Az ObjectList globalis változó tehát egy olyan állapottároló rendszer, amelynek állapotai és ezek változtatásai jelentik a szimulációs program futását.

Az ObjectList globalis változó értékei az M/M/1 modell futása után
3.39. ábra - Az ObjectList globalis változó értékei az M/M/1 modell futása után


Néhány adminisztrációs feladatot ellátó változó szerepel még az ObjectList változó attributumai között (3.39. ábra), amelyek minden DES Objektum számára adnak a működéshez szükséges értéket. Az ObjectList változók a következők:

Az Index of Last Model Object  megadja a DES Objects vektorban azt az index értéket, amelyen pillanatnyilag nincs működő (élő) Entity objektum

A Maximum Index of ObjectList  megadja, hogy a méretét dinamikusan változtatni képes DES Objects vektor milyen maximális indexű elemet képes még tárolni. Erre azért van szükség, mert a jelentős számítási idő takarítható meg azzal, hogy a szimuláció alatt ugyanazon a helyen szerepel a DES Objects vektor.

Az Input # for Inputless Objects  a DES objektumok mindegyike azonos felépítésű. Ahhoz, hogy megkülönböztethető legyen a Source objektum típus, amelynek nincs bemenete egy olyan konstans értéket adunk meg bemeneti darabszám értékként, amely jelenti, hogy ezt a bemenetet nem kell (valós) bemenetként kezelni.

A Separator of Name  karakter, amelyet az egyes névkomponensek elválasztásához használunk.

A Delimiter of List  karaktert, a DES objektumok indexeinek elválasztó karaktereként használjuk.

Az Identity Number  egy olyan egész szám, amely minden új DES objektum születésekor eggyel megnöveli az értékét.

A Possible Number of Objects in Model  megadja, hogy a szimulációs modell futásának meghatározott pillanatában hány darab DES objektumot használunk a futtatáshoz. Lehetséges, hogy ezek a DES objektumok nem hézagmentesen töltik fel a DES Objects vektort.

Az ObjectList Enabled  egy logikai érték, amely FALSE értéke esetén megtiltja, hogy a DES Objects vektor elemeinek értékét megváltoztatssuk

# of Rows of SYSTEM Attributes  a szimulációs rendszer által használt, a DES objektumhoz tartozó egyedi rendszertulajdonságok tároló elemének maximális sorindexe.

# of Columns of SYSTEM Attributes  a szimulációs rendszer által használt, a DES objektumhoz tartozó egyedi rendszertulajdonságok tároló elemének maximális oszlopindexe.

# of Rows of USER Attributes  a szimulációs rendszerben a felhasználó által programozható, a DES objektumok egyedi paramétertárolási lehetőségét biztosító elem maximális sorindexe.

# of Columns of USER Attributes  a szimulációs rendszerben a felhasználó által programozható, a DES objektumok egyedi paramétertárolási lehetőségét biztosító elem maximális oszlopindexe.

DES Objects vektor attribútumait progamozástechnikai okokból nem egy objektumban, hanem az attribútumok számának megfelelő globálisan elérhető vektorelemben tárolja a szimulációs rendszer. A DES Objects vektor attribútumai, melyek mindegyikének maximális index-e a Maximum Index of ObjectList globális változóban megadott érték, a következők:

  • ShiftMemory (All Inputs Are Zero).vi  a szimulációs rendszerben az egyes DES objektumok összekapcsolódásának feltérképezésére szolgáló globális változó, amely egy TRUE logikai értéket ad, ha minden bemenet értéke nulla.

  • ShiftMemory (All Inputs Arrived).vi  a szimulációs rendszerben az egyes DES objektumok összekapcsolódásának feltérképezésére szolgáló változó. Logikai értéket tartalmaz, amely megadja, hogy az adott DES objektum minden bemenetéhez megérkezett a hozzá kapcsolódó DES objektum információja.

  • ShiftMemory (Borning Time of Object).vi  lebegőpontos számérték, amely megadja, hogy az adott DES objektum melyik szimulációs időpillanatban született meg, amelytől részt vesz a modell működésében. A szimulációs modell alapelemeinek ezen paramétere 0.0 értékű. Ezt a paramétert elsősorban az Entity típusú DES objektumok korának megállapítására használjuk, amelyből átfutási és tartózkodási időtartamok határozhatók meg.

  • ShiftMemory (Connected Input Object Indexes).vi  stringlista, amely megadja, hogy az adott DES objektum bemenetéhez mely más objektumok kapcsolódnak. A lista a bemenethez kapcsolódó DES objektumok indexét tárolja, ahol listapozició a bemenet sorszámát (bemenet indexét) adja meg.

  • ShiftMemory (Connected Output Object Indexes).vi  stringlista, amely megadja, hogy az adott DES objektum kimenetéhez milyen más objektumok kapcsolódnak. A lista a kimenethez kapcsolódó DES objektumok indexét tárolja, ahol listapozició a kiment sorszámát (kimenet indexét) adja meg.

  • ShiftMemory (Entry Time into Container Object).vi  lebegőpontos változó, amely megadja, hogy az adott objektum mikor lépett be egy olyan DES objektumba, amely tárolni vagy késleltetni fogja a továbbhaladását a szimuláció során.

  • ShiftMemory (First Calculation).vi  logikai változó, amely megadja, hogy az adott objektummal még nem végeztünk soha műveletet a szimuláció során. Értéke akkor TRUE, ha az első számítást végezzük vele.

  • ShiftMemory (Full Name).vi  string változó, amely tartalmazza a DES objektum teljes nevét. Ezt elsősorban az objetum név alapján történő keresésekor alkalmazzuk.

  • ShiftMemory (Index of Container Object).vi  egész típusú változó, amely megadja annak a DES objektumnak az indexét, amelyben az DES objektumunk (általában Entity) éppen tartózkodik.

  • ShiftMemory (Indexes of Content Objects).vi  string változó, amely egy objektumlistával megadja azoknak az objektumoknak az indexét, amelyek az adott objektumban vannak (ehhez tartoznak) ebben a pillanatban.

  • ShiftMemory (Input).vi  vektor típusú változó, amely megadja, hogy az adott DES objektum bemeneténél milyen indexszel rendelkező Entity típusú DES objektumok várakoznak.

  • ShiftMemory (Output).vi  vektor típusú változó, amely megadja, hogy az adott DES objektum kimeneténél milyen indexszel rendelkező Entity típusú DES objektumok várakoznak.

  • ShiftMemory (Object Type).vi  kombinált lista típusú változó, amely megadja, hogy az adott DES objektum milyen típusú. A lehetséges típusok:

    1. EMPTY,

    2. CONTAINER,

    3. ENTITY,

    4. SOURCE,

    5. BUFFER,

    6. MACHINE,

    7. SINK, JOIN,

    8. SELECTOR,

    9. PACK,

    10. UNPACK.

  • ShiftMemory (Status of Input Channel).vi  logikai változó, amely megadja, hogy a DES objektum bemenetein a forgalom engedélyezett vagy sem. Értéke logikai igaz (TRUE), ha a csatorna zárt (Closed), logikai hamis (FALSE), ha a csatorna nyitott.

  • ShiftMemory (Status of Output Channel).vi  logikai változó, amely megadja, hogy DES objektum kimenetein a forgalom engedélyezett vagy sem. Értéke logikai igaz (TRUE), ha a csatorna zárt (Closed) logikai hamis (FALSE), ha a csatorna nyitott.

  • ShiftMemory (Status of Object).vi  kombinált lista típusú változó, amely megadja, hogy az adott DES objektum milyen állapotban van. A lehetséges állapotok: IDLE, BUSY, BLOCKED, FAILED, PAUSED.

  • ShiftMemory (System Attributes).vi  vektor típusú, egész változó értékeket tartalmazó struktúra, amely az egyes DES objektumokhoz rendelt rendszertulajdonságokat tartalmazza. A rendszertulajdonságokhoz a program felhasználója is korlátozás nélkül hozzáférhet, és bővitheti azokat.

  • ShiftMemory (Terminate Time).vi  lebegőpontos változó, amely megadja, hogy az adott DES objektum mikor fejezi be az éppen aktuálisan végzett műveletet.

  • ShiftMemory (Time in Statuses).vi  lebegőpontos vektor típusú változó, amely megadja, hogy az adott szimulációs időpillnatig az adott DES objektum mennyi időt tötött a különböző állapotokban (Idle, Busy, Blocked, Failed, Paused állapotokban).

  • ShiftMemory (Time of Tasks).vi  rekord típusú vektor, amely tartalmazza a szimulációs program futása során keletkezett feladatok időpont (Time od Task), feladatsorszám (TaskNumber) és a küldő DES objektum index (Index of Sender Object) értékeit.

  • ShiftMemory (User Attributes).vi  mátrix típusú string változókat tartalmazó struktúra, amely az egyes DES objektumokhoz rendelt felhasználói tulajdonságokat tartalmazza. A felhasználói tulajdonságok segítségével a program felhasználója az egyes DES objektumokhoz tetszőleges statisztikai számítások alapját jelentő értékeket rendelhet (program segítségével).

3.2.2. A "TaskList" globalis változók

A következő ábrán (3.40. ábra) látható TaskList globális változó minden eleme elérhető a szimuláció során bármelyik eljárásból. A szimulációs modell futása során az egyes DES objektumok a Task Objects rekordokból álló vektor elemeiben helyezik el a DES modell működéséhez szükséges eseményeket (Tasks). Azért, hogy a program futása ne legyen lassú egy újabb eseményt a Task Objects vektor első szabad helyére helyezi el a program és sorrendkereső program állapítja meg az események időbeni végrehajtásának listáját úgy, hogy közben a Task Objects vektorban nem történik adatmozgatás.

A TaskList globalis változó értékei az M/M/1 modell futása után
3.40. ábra - A TaskList globalis változó értékei az M/M/1 modell futása után


A TaskList globális változó elemei a következők (3.40. ábra):

Maximum Index In TaskList  megadja a ShiftMemory (Time of Tasks).vi vektorban maximálisan tárolhat események (Tasks) számát.

Index of Next Free Place on the Time of Tasks  egész típusú indexérték, amely megadja a következő szabad hely indexét a ShiftMemory (Time of Tasks).vi vektorban.

TimeNow  lebegőpontos változó, amely megadja a szimulációs program futásának aktuális időpontját.

Delimiter of TaskList  string típusú változó, amely azt a stringértéket adja meg, amelyet elválasztó karakersorként használunk az események listájában (TaskList).

Empty Value in TaskList  lebegőpontos változó, amely lehetővé teszi, hogy a ShiftMemory (Time of Tasks).vi vektorban a nem használt események időpontját egy soha elő nem forduló értékkel például negatív időpont értékkel töltsük fel.

Command in Simulation kombinált lista kijelző, amely megjeleníti a szimulációs program által végzett aktuális műveletet (Initiation, Clear Inputs, Calculate).

TaskList Enabled?  logikai típusú változó, amely FALSE értéke esetén megtiltja, hogy a ShiftMemory (Time of Tasks).vi  vektorelemek értékeit megváltoztassuk.

Calculation Blocked?  logikai típusú változó, amelynek szerepe, hogy biztosítsa a szimulációs program folyamatos futását.

TaskList  string típusú változó, amely a ShiftMemory (Time of Tasks).vi vektor elemeinek időrendi végrehajtást biztosítja. Maga a TaskList string az esemény (Task) indexeit tartalmazza a végrahajtás sorrendjében.

Az itt felsorolt globális változokat tetszőleges újabb elemekkel lehet bővíteni, azonban az új változók adatainak feldolgozásáról, illetve az egyes DES alapelemekben történő (újra) programozásáról külön gondoskodni kell.

3.3. A szimulációs rendszer eljárásai

3.1. táblázat - A szimulációs rendszer eljárásai

Az eljárás elnevezése

Leírás

   

Objektumkezelő függvények

 

Clear Content of Objects.vi

Az ObjectList tartalmának törlése.

Delete an Object by Index.vi

Az ObjectList objektumból egy objektum törlése indexe alapján.

Delete an Object Index from Content Objects List.vi

Az objektumban tárolt objektumok indexei közül kitöröl egyet.

Delete Packed Objects.vi

Összecsomagolt Entity objektum minden elemének kitörlése.

Get User Attribute.vi

Felhasználói attributum értékének megadása.

Has Object Arrivived.vi

Vizsgálat, hogy a bemeneti csatornán van-e DES Objektum?

Index of Object by Name.vi

A teljes név alapján megkeresi az objektum indexét az ObjectList-ben.

Input Channel Enable.vi

Engedélyezi/letiltja az adott bemeneti csatorna adatforgalmát.

Input ChannelS Enable.vi

Engedélyezi/letiltja a bemeneti csatornák adatforgalmát.

Insert an Object into ObjectList

Létrehoz egy új objektumot az ObjectLis-ben.

Insert Index AS FIRST into Content Objects List by Priority .vi

Az objektumban tárolt objektumok indexei elé beszúr egy új indexet prioritással.

Insert Index AS FIRST into Content Objects List.vi

Az objektumban tárolt objektumok indexei elé beszúr egy új indexet.

Insert Index AS LAST into Content Objects List.vi

Az objektumban tárolt objektumok indexei után beszúr egy új indexet.

Last Index of Content Objects List.vi

Megadja az objektumban tárolt objektumok indexei közül a legutolsót.

   

Entity műveletek

 

Entity is Idle.vi

Az Entity objektum állpotát vizsgálja meg a függvény.

Entity Number Copy.vi

Az adott Entity-ről N darab másolatot készít az eljárás.

Entity System Attribute Setting.vi

Az Entity-hez rendelt rendszerváltozó értékét állítja be.

   

Task kezelő függvények

 

Clear Content of TaskList.vi

A TaskList tartalmának törlése.

Continue of Simulate.vi

A szimuláció folytatásának vizsgálata.

Delete a Task by Index.vi

A TaskList objektumból egy Task törlése az indexe alapján.

Insert a Task into TaskList.vi

Egy Task beszúrása a TaskList objektumba.

Task at Index.vi

A TaskList objektum adott indexénél elhelyezkedő Task paraméterei.

   

Eloszlás függvények

 

Exponential Distribution.vi

Exponenciális eloszlásfüggvény

Empirical Distribution.vi

Empirikus eloszlásfüggvény

Normal Distribution.vi

Normál eloszlásfüggvény

Triangle Distribution.vi

Háromszög eloszlásfüggvény

Uniform Distribution.vi

Egyenletes eloszlásfüggvény

   

Egyéb eljárások

 

Choose.vi

Két csatornából megadott valószínűséggel választ ki egyet.

Next Empty Place Index in ObjectList.vi

A következő üres hely indexének meghatározása az ObjectList-ben

Object Parameters.vi

Az ObjectList adott indexénél elhelyezkedő objektum paramétereit adja meg.

Piechart.vi

Tortadiagramot rajzol.

Real Output Channels Series (Selector Object).vi

A fizikai és logikai csatorna összerendezést valósítja meg.

Set System Attribute.vi

Az adott objektumrendszer változóinak értékbeállító eljárása.

Set User Attribute.vi

Az adott objektum felhasználói változóinak értékbeállító eljárása.

Status Histogram.vi

Állapot hisztogramot rajzol.

Input Connection Control.vi

A bemenethez csatlakozó objektum indexét állapítja meg.

Used Objects.vi

Az ObjectListben a használt objektumok térképét adja meg.


3.4. A szimulációs program továbbfejlesztésének lehetőségei

3.4.1. További statisztikai számítások beépítése a DES objektumokba

A LabVIEW DES rendszer objektumaiba jelenleg beépített statisztikai számítások minden nehézség nélkül további számításokkal egészíthetők ki. Ezekhez nem kell feltétlenül a már elkészült objektumokba belenyúlni, hanem a legcélravezetőbb eljárás, ha az új igényekkel ”körülépitünk” egy már meglévő alapobjektumot, és a bemeneti valamint a kimeneti Entity áram(ok) ellenőrzésével, valamint az Entity objektumok által mért és tárolt időtartaminformációk segitségével tetszőleges statisztikai vizsgálatot végezhetünk el. A rendszer továbbfejlesztéseként már készültek olyan új objektumok, amelyekkel a bementi és kimeneti csatorna választást lehet megadott eloszlással megvalósítani.

3.4.2. Új attribútumok létesítése és hatásuk beépítése a DES objektumokba

Nagyon egyszerűen megvalósítható újabb minden DES objektumban szereplő attribútum létrehozása, amely nem más, mint az attribútum adattípusának megfelelő vektor. Ennek inicializálásáról és egy DES objektumbeli feladatáról újabb program részekkel a felhasználónak kell gondoskodnia. Általánosan elmondható, hogy az objektum attribútumokat a szimulációs rendszer Calculate üzemállapotában olvassuk ki illetve valamilyen számítás elvégzése után itt kapnak új értéket.

A szimulációs rendszer jelenlegi változatába már bele vannak építve az Entity objektumok pozícióját, sebességét, és gyorsulását valamint elfordulási szögét, szögsebességét és forgási tengelyének pozícióját tárolni képes attribútumok. Ezek algoritmusokkal történő kiszolgálására azonban ebben a verzióban már nem volt lehetőség.

3.4.3. Új DES objektumtípusok létrehozása

Ha teljesen új feladat megoldására kívánunk új DES objektumot létrehozni, akkor mindig célszerű megvizsgálni, hogy az új objektum milyen rendszertechnikai kapcsolással hozható létre már meglévő DES objektum(ok) felhasználásával. Ilyenkor az új DES objektum feladatait kell beprogramoznunk a három programfutási állapotban (Initiation, Clear Inputs, Calculate), úgy hogy az Entity áramot, illetve az új DES objektum állapotainak változásait az elvégzett műveletek alapján folyamatosan tároljuk az objektum attribútumaiban.

Ha teljesen új, korábban még nem létezett DES objektumot kíván a felhasználó kifejleszteni, akkor célszerű tanulmányoznia a korábban már elkészített alapobjektumokat.