Viz: Objekt
PmaPrototype
Zjednodušeně si lze funkci objektů
PmaPrototype a
PmaInstance představit tak, že při spuštění aplikace se automaticky rozkopíruje obsah příslušného prototypu do všech instancí, které tento prototyp používají.
Výhoda konceptu prototypů a instancí je, že k rozkopírování prototypu do všech instancí dochází automaticky při každém spuštění aplikace, takže změna provedená v prototypu se projeví automaticky při příštím spuštění i ve všech instancích. Obsah originálního prototypu existuje pouze ve vývojovém prostředí, ve spuštěné aplikaci neexistuje. Existují pouze jeho kopie v jednotlivých instancích.
Parametrizovatelné prototypy:
Obvykle je potřeba zajistit, aby se jednotlivé instance téhož prototypu od sebe mírně odlišovaly. Obvykle se jedná o odlišné zobrazované texty, inicializační hodnoty konstant, napojení vazeb na proměnné, vlastní soubory nebo databázové tabulky, skupiny trendů, alarmů, eventů nebo odlišnosti ve skriptech. K tomuto účelu slouží
Parametry Pma objektu, kdy lze v prototypu definovat sadu parametrů a konkrétní instance pak nastaví skutečnou hodnotu těchto parametrů, platných pro tuto instanci. K definování parametrů objektů
PmaPrototype a
PmaInstance slouží konfigurátor "
Parametry Pma objektu". K odkazu na hodnoty parametrů
Pma objektu v konfigurátorech objektu lze použít
Makro výraz $.par a ve skriptech lze použít metodu
PmaObject.GetPar. Důležité pro zjištění hodnoty parametru je, že při zjišťování hodnoty konkrétního parametru se parametr hledá od daného objektu, přes jeho rodiče kaskádním způsobem (bubláním).
Upozornění pro prototypy a instance: Pro objekt
PmaInstance platí, že přejímá pouze parametry příslušného objektu
PmaPrototype, kterým může (ale nemusí) zadat
změněné hodnoty. To znamená, že instance může pouze měnit hodnoty existujících parametrů příslušného prototypu. Instance, ale ani rodiče instance, nesmí přidávat parametry nové. Instance (prototyp) má přístupné pouze parametry definované v prototypu, nemá přístup k parametrům rodiče instance. Tím je zajištěno, že všechny instance téhož prototypu mají stejnou sadu parametrů i když s různými hodnotami. Objekt
PmaInstance je tedy vyjímečný z hlediska hledání parametrů (bublání), protože v tomto objektu hledání parametrů končí a nepokračuje k rodiči objektu
PmaInstance. Z hlediska parametrů je tedy instance prototypu izolována od parametrů zbytku aplikace. Pokud je nutno získat hodnotu parametru pro prototyp z rodičů instance, pak je nutno založit tento parametr v objektu
PmaPrototype (se stejným nebo jiným názvem) a na parametr rodiče instance se odkázat buď zde nebo v objektu
PmaInstance. Reference na parametr rodiče se provede jako
Makro výraz $.par v hodnotě parametru instance nebo prototypu.
Například v prototypu založíme nový parametr
boiler, jehož hodnotu nastavíme na hodnotu parametru
boiler rodiče instance:
boiler:$.par("boiler");
Vztah parametrů Pma objektů a Pmg objektů:
Důležité je, že lze předat parametr
Pma objektu do obrazu jako parametr
Pmg objektu. Princip je, že parametr
Pma objektu se nedostane dovnitř obrazu automaticky (
Pmg objekt přímo "nevidí" parametr, který je definován mimo obraz). V obrazu je nutno založit příslušný parametr v objektu
PmgRoot a při otevření obrazu ho nastavit na hodnotu parametru
Pma objektu. Toho lze dosáhnout:
Použití konceptu prototypu a instancí:
Koncept prototypu a instancí je velmi vhodný pro situace, kdy se v aplikaci vyskytne několik velmi podobných nebo shodných celků. Například aplikace monitoruje 5 kotlů, kdy jednotlivé kotle jsou v podstatě totožné a část aplikace týkající se jednoho kotle se skládá z komunikace s příslušným PLC, dat kotle, trendování, alarmů, eventů a grafické obrazy.
Nyní stačí založit prototyp "Kotel", který představuje jeden kotel, implementující kompletně funkčnost jednoho kotle (komunikace, zobrazení, trendy a alarmy) a vytvořit 5 instancí tohoto prototypu s názvem "Kotel1", "Kotel2", atd. Pro postihnutí odlišností jednotlivých instancí se vytvoří nezbytný počet parametrů
Pma objektu. Nejdůležitější by byl parametr
"číslo kotle", ale mohla by tam být i IP adresa PLC automatu, atd.
Upozornění! U všech objektů v prototypu je potřeba zajistit
jedinečnost globálních názvů a systémových prostředků (identifikátory, názvy, soubory, adresy, databázové tabulky, atd.), nejlépe použít
Makro výraz $.par. Týká se to zejména objektů
PmaTrendGroup,
PmaAlarmGroup,
PmaAdo zpřístupněných do Webu nebo v síti, atd.
Například u trendů, alarmů i eventů je nutno parametrizovat identifikátor skupiny, zobrazovaný název skupiny, název souboru a složky, název databáze, tabulky, kam komponenta ukládá data. Pokud se toto neprovede, pak je to stejné, jako by ve vývojovém prostředí byly vyrobeny dvě komponenty se stejným nastavením. Pak si navzájem začnou přepisovat data nebo se nepodaří globálně zaregistrovat pod stejným identifikátorem, atd.