Oprogramowanie SCADA w praktyce automatyka, część 3
| TechnikaW 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.
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.
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.
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).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.
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.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.
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.
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
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
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ę.
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.
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.
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.