Oprogramowanie SCADA w praktyce automatyka, część 3

| Technika

W poprzednich częściach kursu opisano konfigurowanie agentów, sterowników komunikacyjnych i tworzenie prostych obiektów graficznych. W ostatnim z cyklu artykułów zdobyta wiedza rozszerzona zostanie o umiejętność korzystania z szablonów oraz biblioteki elementów. Pokazane zostanie również jak archiwizować dane, tworzyć wykresy, alarmy i obsługiwać zdarzenia.

Oprogramowanie SCADA w praktyce automatyka, część 3

Biblioteka elementów

Aby w pełni wykorzystać możliwości graficzne oprogramowania Adroit konieczne jest skorzystanie z biblioteki elementów. Program ma standardową bibliotekę, która jest instalowana razem z oprogramowaniem. Znajdujące się w niej elementy mogą być wykorzystane w całości lub częściowo, tj. po dokonaniu przeróbek. Wywołanie biblioteki odbywa się poprzez wybranie z menu File->Open w programie Agent Server. W pojawiającym się oknie dialogowym należy wybrać obiekt WizardMenu.mim, który domyślnie umieszczony jest w katalogu c:AdroitWizards. Spowoduje to pojawienie się okienka, w który możliwe jest oglądanie poszczególnych elementów biblioteki. Przycisk More Wizards pozwala na przejście do następnej strony biblioteki, a przycisk Shapes wyświetla elementy statyczne.

Aby wykorzystać dany element w synoptyce, należy go zaznaczyć, a następnie wkleić na ekran synoptyki. Po wykonaniu tej czynności pojawi się okno Wizard substitution (rys. 1), w którym definiuje się zmienną powiązaną z danym elementem. Można ją wpisać ręcznie lub wybrać z listy. Zmienna musi być wcześniej zadeklarowana lub może być dodana w oknie wyboru Select substitution tag (rys. 2). Po zatwierdzeniu wyboru można sprawdzić, czy wszystko działa poprawnie poprzez przełączenie mimiki do trybu Runtime.

Rys. 1. Widok okna podczas wprowadzania nazwy zmiennej dla elementu z biblioteki
Rys. 2. Widok okna podczas dodawania zmiennej do elementu z biblioteki

Jako przykład zostanie wykorzystany gotowy element biblioteki. Warto zaznaczyć, że możliwe jest stworzenie zupełnie nowych elementów i umieszczenie ich w bibliotece. W przypadku ich modyfikacji warto zrobić kopię elementu i dopiero wtedy zmieniać jego właściwości. Większość elementów biblioteki składa się z kilku lub kilkudziesięciu części składowych zgrupowanych ze sobą. Jeżeli element po zgrupowaniu zawiera właściwości dynamiczne (behaviours), po rozgrupowaniu zostaną one utracone.

Strukturę połączeń poszczególnych elementów w obiekcie można zobaczyć poprzez zaznaczenie obiektu i wciśnięcie przycisku Ctrl i kliknięcie go myszką (rys. 3). Można wówczas dowolnie zmieniać dany element obiektu. Część elementów jest statyczna, ale niektóre zawierają dodatkowe właściwości. Klikając w oknie na Background color można zmieniać kolor obiektu. Zmieniając Descriptor: <schows on/off, any Discrete value>.value na <dowolna zmienna cyfrowa>.value dokonuje się zmiany właściwości funkcji. Można również zmienić kolor, jaki ma się pojawić, jeżeli zmienna ma wartość 1 i 0.

Rys. 3. Widok okna właściwości obiektu
Po zatwierdzeniu wpisanych zmian należy zapisać bibliotekę w katalogu Wizards projektu i przejść do trybu Runtime, następnie wybrać obiekt, przejść do mimiki i go wkleić. W pojawiającym się oknie Wizard substitution w kolumnie descriptor widoczny jest tekst dowolna zmienna cyfrowa, a w polu Substitution należy podać nazwę zmiennej. W nawiasach < > przekazywany jest do obiektu parametr. Użycie danego elementu na synoptyce poprzez wprowadzenie nazwy agenta pozwala na przekazanie wartości tego agenta jako parametru. Takich parametrów może być więcej niż jeden i mogą być różnego typu. Do elementu typu wizard można również dodać inne dodatkowe właściwości. Przykładem może być taka zmiana elementu, aby sygnalizował on poprawną pracę urządzenia oraz awarię. W tym celu należy przejść do edycji obiektu w bibliotece i kliknąć obiekt, trzymając jednocześnie klawisz Ctrl. W oknie Cell contents należy wybrać właściwość Background color i zmienić tekst w nawiasach na <Sygnal potw pracy>.value, po czym zatwierdzić wprowadzone zmiany. Następnie należy kliknąć Elipse wizard i dodać nową wartość Blinking oraz wprowadzić tekst <Sygnal awaria>.value. Można również zmienić kolor, typ i okres migania (rys. 4).

Rys. 4. Widok okna podczas dodawania nowej właściwości do obiektu
Jeśli wprowadzone zostaną zmiany w danym obiekcie biblioteki, na ekranie synoptycznym istniejące obiekty zachowają swoje właściwości przed wprowadzonymi zmianami. Aby elementy na synoptyce miały właściwości obiektów z biblioteki, konieczne jest ich ponowne wprowadzenie. Warto pamiętać o tym, aby obiekty biblioteki tworzone dla danej aplikacji były umieszczone w folderze projektu. Dobrą zasadą jest również wprowadzanie komentarzy dla danego obiektu. W omawianym przykładzie dodatkowo w konfiguratorze agentów zostały stworzone zmienne typu Digital o nazwie AWARIA i POTW_PRACY. Po dodaniu obiektu z biblioteki należy wpisać nazwy zmiennych w oknie Wizard Substitution.

Szablony

Kolejnym elementem oprogramowania są szablony (mimic templates). Są one zasobnikami obiektów graficznych umieszczanych na synoptyce lub innych zdefiniowanych obiektów i mogą być wielokrotnie używane w danym projekcie. Zmiany wprowadzane w jednym szablonie znajdują odzwierciedlenie wszędzie tam, gdzie dany szablon został użyty. Jest to szczególnie użyteczne dla obiektów, które mają te same lub podobne właściwości i są wielokrotnie wykorzystywane w tym samym projekcie. Przykładem mogą być silniki, mieszadła, pompy, zawory, itp. W oprogramowaniu Adroit szablonami mogą być obrazy synoptyczne, okna wykresów, alarmów lub zdarzeń. Każda nowo utworzona synoptyka może być szablonem. Z kolei utworzona mimika, wykres lub okno alarmowe mogą być przerobione na szablon. Najczęściej używane są tutaj okna synoptyk do tworzenia stacyjek dla obiektów graficznych.

Rys. 5. Widok okna konfiguracyjnego agenta typu Counter
Poniżej przedstawiono przykład w którym po kliknięciu przycisku pojawi się okno z wyświetloną wartością zmiennej analogowej oraz cyfrowej z możliwością interakcji ze strony użytkownika. W utworzonym oknie (File->New->Picture) należy wstawić dwa elementy typu Button oraz wykorzystać element typu lampka, który utworzony został wcześniej w bibliotece elementów. W tworzonym projekcie jeden przycisk będzie symulował potwierdzenie pracy urządzenia (zmienna typu Digital o nazwie POTW_PRACY), drugi awarię (zmienna typu Digital o nazwie AWARIA). Lampka będzie odzwierciedlała stan urządzenia. Dodatkowo wyświetlana będzie zmienna analogowa typu Counter, która będzie liczyła czas pracy urządzenia. Aby to zrobić należy stworzyć nową zmienną typu Counter o nazwie CZAS_PRACY, a jako parametr wejściowy Input Tag podać zmienną typu Digital o nazwie POTW_PRACY. W polu Trigger trzeba wybrać zmienną SystemInfo.second, zaznaczyć pole Triggered i uruchomić agenta przyciskiem Start. Opcja Triggered określa kiedy zmienna ma być uaktualniana na synoptyce.

Rys. 6. Widok właściwości zakładki Template
Na szablonie jeden z przycisków zostanie nazwany Praca i otrzyma właściwość Operator Action. W polu Tag należy wpisać <Sygnal potw pracy>.value, a typ akcji ustawić na Digital Toggle. Drugi przycisk o nazwie Awaria należy skonfigurować w podobny sposób, z tym że w polu Tag powinno się znaleźć: <Sygnal awaria>.value. Dla lampki w oknie Wizard Substitution należy wpisać odpowiednio <Sygnal awaria> oraz <Sygnal potw pracy>. Po wstawieniu tych elementów trzeba zapisać plik, np. pod nazwą Stacyjka.mim. Następną czynnością jest wybranie z menu View->Properties, przejście do zakładki Template i wprowadzenie nazwy w kolumnie Named set. W tym przykładzie użyto nazwy Urządzenie1. W kolumnie Sygnal awaria należy wprowadzić nazwę zmiennej, która będzie sygnalizować stan awarii – w tym przypadku zmienna AWARIA. W kolumnie „Sygnal potw pracy” należy wprowadzić zmienną POTW_PRACY. W przypadku większej liczby urządzeń należy dodawać kolejne przyciskiem Add. Okno konfiguracji w zakładce Template zostało przedstawione na rys. 6.

Po zatwierdzeniu zmian należy przejść do głównego obrazu synoptyki i wstawić nowy przycisk, np. wprowadzając nazwę Stacyjka oraz dodać nową funkcję Execute Command. Dalsze czynności to wybór funkcji Open window, której typ należy ustawić na Operate picture oraz wpisanie nazwy Stacyjka.mim w polu File name. Należy również zaznaczyć opcję Enable substitution i wpisać wartość 1 w polu Use group. Pola te znajdują się w grupie opcji zaawansowanych.

Rys. 7. Widok okna szablonu z agentem typu Counter
Po ponownym zapisaniu zmian można przełączyć oprogramowanie do trybu Runtime. Obsługa licznika realizowana jest poprzez dodanie w oknie Stacyjka zmiennej typu Counter, która wyświetlać będzie czas pracy urządzenia. Czynność ta rozpoczyna się od wstawienia obiektu Text, wpisania tekstu Czas pracy=%s, dodania funkcji Display value i wprowadzenia w polu Tag zmiennej z parametrem <Czas pracy calk>.onTotalTime. Jako wyświetlany slot wybrany został onTotalTime, który zawiera wartość czasu załączenia w formie ciągu znaków typu String. Po zatwierdzeniu w kolumnie Czas pracy calk w zakładce Template właściwości okna należy wpisać nazwę CZAS_PRACY i przejść do trybu Runtime. Powielanie utworzonej stacyjki może odbywać się poprzez dodawanie następnych urządzeń w zakładce Template szablonu synoptyki.

Archiwizacja danych

W systemie Adroit przechowywane są jedynie bieżące wartości agentów w postaci plików konfiguracyjnych *.wgp. Możliwe jest cykliczne dokonywanie zapisów poprzez ustawienie slotu saveNow w agencie SystemInfo, co można zrealizować przy użyciu agenta typu Expression i Digital. Po stworzeniu agenta typu Expression jako argument należy podać SystemInfo.minute i sprawdzić, kiedy będzie on równy zeru. Jako wynik podaje się agenta typu Digital o nazwie ZAPIS1GODZ .value, w którym trzeba ustawić parametr Pulsed output na wartość 100ms. Następnie należy skopiować do slotu SystemInfo.saveNow z agenta ZAPIS1GODZ.value wybierając opcję Scan i jako sterownik wskazując Aliascan (rys. 8). Jako typ agenta należy wybrać SystemInfo i slot SaveNow, natomiast jako adres źródłowy - @ZAPIS1GODZ.value.

Rys. 8. Okno skanowania po dodaniu zmienne do sterownika Aliascan
Rys. 9. Konfiguracja agenta typu Datalog

Możliwe jest również zapisywanie do bazy danych dowolnego typu agenta, jak i różnych slotów. Aby przejść do okna konfiguracji należy wybrać agenta w oknie konfiguratora i kliknąć na przycisk Log. Wyświetlone zostanie okno z ustawieniami do logowanie danych (rys. 9). W polu Data Set Configuration należy ustawić nazwę pliku do jakiego zapisywana będzie wartość agenta. Pole Length określa ile zapisywanych będzie danych historycznych, natomiast Time definiuje częstotliwość zapisywania próbki. Automatycznie wyliczana jest również wielkość pliku w którym będą zapisywane dane. Po wprowadzeniu wszystkich ustawień należy uruchomić logowanie klikając Start. Pozyskane dane zapisywane są do wewnętrznej bazy danych. Aby je wyeksportować należy użyć narzędzia Extract. Można również zapisywać dane do zewnętrznej bazy typu Access, SQL, itd., do czego należy użyć agenta typu DbAccess.

Wykresy

Rys. 10. Widok okna wykresu
W systemie Adroit dostępne są standardowe okna wykresów, które mogą być łatwo wykorzystane w projekcie. Jedno okno umożliwia przeglądanie danych bieżących, jak i historycznych. Jeśli agent zapisywany jest do wewnętrznej bazy danych, będzie on również widoczny na wykresie. W przypadku agenta, który nie jest zapisywany do bazy, jest on widoczny w oknie wykresu tylko w momencie, gdy okno wykresu jest otwarta. Jego zamknięcie spowoduje, że dane zostaną utracone.

Aby dodać nowe okno należy wybrać z menu File->New->Trend, otworzyć właściwości okna wybierając z menu górnego View->Properties, a następnie w karcie Plot zdefiniować zmienne, które mają być umieszczone na wykresie. Możliwa jest również zmiana pozostałych parametrów, takich jak: kolory, ustawienia długości czasu okna, siatka na wykresie, itp. Okno wykresu może być również szablonem, który można wykorzystywać wielokrotnie, bez potrzeby każdorazowego definiowania jego parametrów. Aby wywołać okno wykresu z poziomu synoptyki, można przyporządkować dla elementu typu przycisk funkcję Execute command w polu Window Type wybierając Trend i wskazując nazwę pliku.

Alarmy

Rys. 11. Konfiguracja agenta typu Alarm
Bardzo istotnym elementem systemów SCADA są alarmy. Adroit charakteryzuje się również bardzo rozbudowanym systemem alarmowania. Możliwe jest definiowanie różnego rodzaju alarmów m.in. w zależności od priorytetu, docelowego użytkownika, miejsca zapisania i urządzeń audio, jakie mają być uruchamiane. Domyślnie tworzony jest jeden agent typu Alarm, a jako standardowe urządzenie audio przyporządkowany jest głośnik komputera osobistego. Aby go wyłączyć lub zdefiniować inne urządzenie dźwiękowe, należy wybrać agenta typu Alarm i zmienić wartość w polu Audio w zakładce defaultAlarmAgent (rys. 11).

W omawianym przykładzie wykorzystany zostanie istniejący agent typu Alarm. Po wystąpieniu alarmu w oknie alarmów powinien pojawić się odpowiedni komunikat. Aby tak się stało należy wrócić do utworzonej wcześniej zmiennej typu Digital o nazwie AWARIA. Po jej wybraniu należy kliknąć przycisk Alarm, co spowoduje pojawienie się okna, w którym można wybrać w jakim stanie alarm ma być sygnalizowany (rys. 12). Kolejnym krokiem powinno być dodanie typu On oraz otwarcie nowego okna typu Alarm. Aby sprawdzić poprawność wykonanych operacji należy w oknie stacyjki Urzadzenie1 zasymulować awarię.

Rys. 12. Konfiguracja alarmu dla agenta typu Digital
Rys. 13. Widok okna alarmowego

Aby zaakceptować alarm należy zaznaczyć go i kliknąć Global Acknowlegde. Można oczywiście zmienić ustawienia właściwości okna wybierając odpowiednie z menu View->Properties. Jeśli agent zmieni swoją wartość na „0”, zostanie on również usunięty z okna alarmowego. Podobnie skonfigurować można alarmy dla agenta typu Analog. Dostępne są alarmy związane z przekroczeniem górnych i dolnych progów. Standardowy agent typu Alarm został przygotowany tak, aby sygnalizować najczęściej używane alarmy. Można również sygnalizować w nim inne sloty, np. gdy nie może być on prawidłowo odczytany z zewnętrznego urządzenia.

Rys. 14. Okno konfiguracji wywołania okna alarmowego
Wywołanie okna alarmowego z synoptyki realizuje się również przy pomocy przycisku i funkcji Execute command behaviour. Jako Window type należy wybrać typ Alarm i wskazać zapisany wcześniej plik z rozszerzeniem .alm. Aby okno alarmu pojawiało się automatycznie po wystąpieniu alarmu, należy dodatkowo podać w polu Trigger nazwę agenta alarmu defaultAlarmAgent.AlarmsActive (rys. 14).

Zdarzenia

W oprogramowaniu Adroit zaimplementowano system kontroli zdarzeń, który bazuje na wykorzystanym w systemie MS Windows. Zdarzenia pozwalają na dostarczanie informacji na temat tego, co się działo w systemie Adroit, pozwalając na stwierdzenie kiedy dany alarm, funkcja lub okno zostały wywołane. Podgląd zdarzeń historycznych jest możliwy dzięki wbudowanej przeglądarce. Użytkownik może filtrować komunikaty według założonych kryteriów, przy czym domyślnie logowane są zdarzenia systemowe oraz alarmy. Jeżeli mają być logowane również inne zdarzenia, takie jak np. zmiana wartości parametru lub załączenie urządzenia, konieczne jest zaznaczenie opcji Log (rys 15). Każda akcja operatora związana ze zmianą wartości danego agenta będzie zapisywana w zdarzeniach. Widok okna konfiguracji zdarzeń został przedstawiony na rys 16.

Rys. 15. Widok funkcji Operator Action z zaznaczoną opcją Log
Rys. 16. Widok właściwości okna przeglądarki zdarzeń

Należy wyjaśnić jeszcze sposób filtracji zdarzeń. W polu Agent tag jest wpisany filtr POT*, co oznacza, że będą wyświetlone wszystkie zmienne, które w nazwie na początku mają ciąg znaków POT, a więc na przykład POTW_PRACY. Dodatkowo w polu Filter group jest wpisana wartość „10” co oznacza, że są wyświetlane zmienne z tej grupy. Parametr ten dla każdej zmiennej jest określany w oknie Header.

Podsumowanie

Niniejszy artykuł kończy trzyczęściowy cykl praktycznego kursu programowania SCADA w Adroit6. Pokazany został kompletny zestaw narzędzi pozwalający na zaprojektowanie funkcjonalnego systemu HMI/SCADA, niemniej należy mieć świadomość, że kurs nie wyczerpuje wszystkich zagadnień i możliwości systemu Adroit. Więcej informacji znaleźć na ten temat można m.in. u dostawcy oprogramowania.

Artykuł autorstwa specjalistów z firmy AT Control, opracowanie: Marcin Karbowniczek, Zbigniew Piątek.