Patrz: Obiekt
PmaPrototype
W prosty sposób można funkcję obiektów
PmaPrototype oraz
PmaInstance przedstawić tak, że podczas uruchamiania aplikacji dojdzie do automatycznego skopiowania zawartości odpowiedniego prototypu do wszystkich instancji, które wykorzystują dany prototyp.
Zaletą konceptu prototypów i instancji jest, że do kopiowania prototypu do wszystkich instancji dochodzi automatycznie podczas każdego uruchomienia aplikacji, a więc zmiana przeprowadzona w prototypie automatycznie pojawi się przy następnym uruchomieniu aplikacji i to we wszystkich instancjach. Zawartość oryginalnego prototypu istnieje wyłącznie w środowisku deweloperskim, w uruchomionej aplikacji nie istnieje. Istnieją tylko kopie prototypu w poszczególnych instancjach.
Prototyp z parametrami:
Zazwyczaj jest konieczne zapewnić, żeby poszczególne instancje tego samego prototypu różniły się nieco od siebie. Chodzi zazwyczaj o odrębnie wyświetlane teksty, wartości inicjalizacyjne stałych, połączenie powiązań do wartości, własne pliki lub tabele bazy danych, grupy trendów, alarmów, eventów lub różnice w skryptach. Do tego celu służą
Parametry Pma obiektu, kiedy w prototypie można definiować zestaw parametrów i konkretna instancja z kolei ustawi rzeczywiste wartości tych parametrów, ważnych dla danej instancji. Do definicji parametrów w obiekcie
PmaPrototype oraz
PmaInstance służy konfigurator "
Parametry Pma obiektu". Do odniesienia do wartości parametrów
Pma obiektu w konfiguratorach obiektu można zastosować
Makro wyrażenie $.par natomiast w skryptach można zastosować metodę
PmaObject.GetPar. Ważnym do stwierdzania wartości parametru jest fakt, że podczas określania wartości konkretnego parametru parametr ten jest wyszukiwany od danego obiektu poprzez jego obiekty rodzicielskie kaskadowym sposobem.
Uwaga dla prototypów i instancji: Dla obiektu
PmaInstance jest ważne, że przejmuje tylko parametry odpowiedniego obiektu
PmaPrototype, dla których może (lecz nie musi) określić ich
zmienione wartości. To znaczy, że instancja może tylko zmieniać wartości istniejących parametrów odpowiedniego prototypu. Instancja, lecz nawet rodzice instancji nie mogą dodawać nowych parametrów. Instancja (prototyp) ma dostępne tylko parametry zdefiniowane w prototypie, nie ma dostępu do parametrów rodzica instancji. W ten sposób jest zapewnione, że wszystkie instancje tego samego prototypu posiadają taki sam zestaw parametrów choć z różnymi wartościami. Obiekt
PmaInstance jest więc wyjątkowy z punktu widzenia wyszukiwania parametrów (bąbelkowania), ponieważ wyszukiwanie parametrów jest zakończone w tym obiekcie i nie jest kontynuowane do rodzica obiektu
PmaInstance. Z punktu widzenia parametrów instancja prototypu jest więc odseparowana od parametrów reszty aplikacji. Jeżeli jest konieczne uzyskanie parametru dla prototypu z rodzica instancji, wtedy jest konieczne taki parametr założyć w obiekcie
PmaPrototype (z taką samą lub inną nazwą) i odnieść się do parametru rodzica instancji albo tu albo w obiekcie
PmaInstance. Odniesienie do parametru rodzica można wykonać jako
Makro wyrażenie $.par w wartości parametru instancji lub prototypu.
Na przykład w prototypie załóżmy nowy parametr
boiler, którego wartość następnie ustawimy na wartość parametru
boiler rodzica instancji:
boiler:$.par("boiler");
Stosunek parametrów Pma obiektów oraz Pmg obiektów:
Ważnym jest, że można przekazać parametr
Pma obiektu do panela jako parametr
Pmg obiektu. Zasadą jest, że parametr
Pma obiektu nie jest automatycznie przekazywany do środka panelu (
Pmg obiekt "nie widzi" parametr, który jest zdefiniowany poza panelem). W panelu jest konieczne założenie odpowiedniego parametru w obiekcie
PmgRoot i podczas otwarcia panela ustawić go na wartość parametru
Pma obiektu. To można osiągnąć:
Zastosowanie konceptu prototypu i instancji:
Koncept prototypu i instancji jest bardzo dogodny w sytuacjach, kiedy w aplikacji występuje kilka bardzo podobnych lub takich samych zespołów. Na przykład aplikacja monitoruje 5 kotłów, gdzie poszczególne kotły są w zasadzie takie same i część aplikacji dotycząca jednego kotła składa się z komunikacji z odpowiednim sterownikiem PLC, danych kotła, trendowania, alarmów, eventów i paneli graficznych.
Obecnie wystarczy założyć prototyp "Kociol", który przedstawia jeden kociol i implementujący pełną funkcjonalność jednego kotła (komunikacja, wyświetlenie, trendy i alarmy) i wytworzyć 5 instancji tego prototypu o nazwie "Kociol1", "Kociol2" itd. W celu wychwycenia różnic pomiędzy poszczególnymi instancjami trzeba założyć niezbędną ilość parametrów
Pma obiektu. Najważniejszy byłby parametr "numer kotła", lecz mógłby nim być również adres IP sterownika PLC, itd.
Uwaga! We wszystkich obiektach w prototypie jest konieczne zapewnić
unikalność globalnych nazw i zasobów systemowych (identyfikatory, nazwy, pliki, adresy, tabele bazy danych, itd.), najlepiej wykorzystać
Makro wyrażenie $.par. Dotyczy to zwłaszcza obiektów
PmaTrendGroup,
PmaAlarmGroup,
PmaAdo udostępnionych do Webu lub w sieci, itd.
Na przykład dla trendów, alarmów i eventów jest konieczne parametryzacja identyfikatora grupy, wyświetlanej nazwy grupy, nazwa pliku i foldera, nazwy bazy danych, tabeli, do której element zapisuje dane. Jeżeli nie wykonasz tego, wtedy wynik jest taki sam, jak gdyby w środowisku deweloperskim były wytworzone dwa koponenty o tym samym ustawieniu. Wynikiem może być wzajemne przepisywanie danych lub błąd przy rejestracji pod takim samym identyfikatorem, itd.