Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS) Temat: InTouch jako SCADA 1, użyteczne funkcje. Ćwiczenie laboratoryjne nr 1 Materiały pomocnicze Opracowanie: Tarnawski Jarosław, dr inż. Puchalski Bartosz, mgr inż. Gdańsk, luty 2016 1 System SCADA (ang. Supervisory Control and Data Aquisition)
Spis treści 1 Skalowanie zmiennych I/O... 3 2 Skrypty... 4 2.1 Skrypty aplikacji... 4 2.2 Skrypty klawiszowe... 5 2.3 Skrypty warunkowe... 5 3 Pilnowanie czasu... 6 4 Mechanizmy zabezpieczeń InTouch / Autoryzacja dostępu... 7 5 System alarmów i rejestracji zdarzeń... 8 5.1 Zapis logów alarmów do pliku i ewentualny wydruk... 10 6 Odczyt/zapis danych z zewnętrznego pliku... 11 6.1 Odczyt z plików csv... 12 6.2 Zapis do pliku csv... 12 Opracowano na podstawie dokumentacji Wonderware (Wonderware FactorySuite InTouch Opis funkcji, pól i zmiennych systemowych, Wonderware InTouch Podręcznik użytkownika Wersja C Wrzesień 2005, Invensys Systems, Inc). 2 S t r o n a
1 Skalowanie zmiennych I/O Przy definiowaniu zmiennych jako I/O (Rysunek 1), czyli przeznaczonych do wymiany z zewnętrznym źródłem, InTouch umożliwia ich skalowanie. Dane po stronie zewnętrznej aplikacji oznaczane są jako RAW (nieprzetworzone, nieskalowane), a po stronie InTouch nazywane są EU (od Engineer Units). Aby wyskalować zmienną należy wprowadzić zależności pomiędzy MinRaw a MinEU oraz MaxRaw i Max EU oraz wybrać sposób skalowania liniowy bądź pierwiastkowy. Rysunek 1 Przykład definicji zmiennej I/O Skalowanie pomiędzy zmiennymi EU oraz Raw odbywa się wg następujących zależności: Dla skalowania liniowego (Linear) Dla skalowania nieliniowego (Square Root) W opisanych powyżej zależnościach Initial Value oznacza wartość początkową nadawaną zmiennej, Deadband jest strefą nieczułości wykorzystywaną w celu ograniczenia wrażliwości na zmiany (krokiem, ziarnem zmienności), natomiast EngUnits jest polem typu String i umożliwia wpisanie jednostki inżynierskiej danej zmiennej np. m 2, sek, Pa, itd. Szczegółowe informacje na temat zmiennych można znaleźć w Podręczniku Użytkownika w Rozdziale 6 na stronie 283. Typy zmiennych oraz skalowane zmiennych I/O można znaleźć w Podręczniku Użytkownika w podrozdziałach Typy zmiennych na stronie 286 oraz w podrozdziale Skalowanie zmiennych na stronie 408. 3 S t r o n a
2 Skrypty Skrypty w InTouch (Rysunek 2) umożliwiają wprowadzanie algorytmów użytkownika udostępniając w ten sposób możliwość automatycznej kontroli wizualizacji a w szczególnym przypadku realizacji sterowania nadzorczego. Skrypty wprowadzane są w języku wysokiego poziomu zbliżonego do języka Pascal. Mamy do dyspozycji skrypty aplikacyjne, związane ze skrótem klawiaturowym, skrypty warunkowe oraz monitorujące zmianę wartości. Rysunek 2 Skrypty w InTouch 2.1 Skrypty aplikacji Skrypty typu aplikacyjnego (Rysunek 3) dotyczą całej aplikacji InTouch i umożliwiają pracę w trzech trybach: podczas startu aplikacji (On Startup), podczas działania aplikacji (While Running) z określonym okresem (Every x msec), podczas zakończenia pracy aplikacji (On Shutdown). Rysunek 3 Skrypty aplikacji 4 S t r o n a
2.2 Skrypty klawiszowe Skrypty związane z klawiszami (Rysunek 4) umożliwiają wywołanie logiki określonej przez użytkownika w przypadku naciśnięcia, trzymania naciśniętego, bądź zwolnienia klawisza klawiatury kompuera. 2.3 Skrypty warunkowe Rysunek 4 Skrypty klawiszowe Skrypty warunkowe (Rysunek 5) umożliwiają ciągłe monitorowanie wyrażenia logicznego i reakcję w zależności od spełnienia i niespełnienia tego warunku Rysunek 5 Skrypty warunkowe 5 S t r o n a
Skrypty związane z monitorowaniem zmiany zmiennej (Rysunek 6) umożliwiają reakcję na taką zmianę. Rysunek 6 Skrypty monitorujące zmianę zmiennej Szczegółowe informacje na temat skryptów można znaleźć w Podręczniku Użytkownika w Rozdziale 8 na stronie 505. Skrypty aplikacji, klawiszowe, warunkowe, zmiany wartości zmiennej opisane są w podręczniku użytkownika na stronach (odpowiednio), 516, 519, 524, 526. 3 Pilnowanie czasu InTouch zawiera wbudowane zmienne systemowe, które mogą być wykorzystane na potrzeby realizacji wielu zadań. Są one dostępne dla każdej nowo tworzonej aplikacji wizualizacji. Nazwy wszystkich zmiennych systemowych poprzedzone są znakiem dolara ($). Szczególnie interesującą oraz pomocną przy wykonywaniu wielu zadań, grupą zmiennych systemowych jest grupa stanowiąca zmienne związane z czasem. Zmienne systemowe związane z czasem są następujące: $Date, $DateString, $DateTime, $TimeString $Time $Year, $Month, $Day, $Hour, $Minute, $Second, $Msec Zmienne te mogą być wykorzystywane w skryptach użytkownika w celu kontroli nad czasem, zmiany parametrów prowadzenia procesu, zmiany reżimu produkcji, odliczania czasu itd. Więcej informacji na temat zmiennych systemowych można znaleźć w Podręczniku Użytkownika w podrozdziale Wewnętrzne zmienne systemowe na stronie 409. 6 S t r o n a
4 Mechanizmy zabezpieczeń InTouch / Autoryzacja dostępu Włączanie mechanizmu zabezpieczeń InTocuh odbywa się poprzez menu aplikacji. Aby włączyć funkcje zabezpieczeń należy wybrać: Special -> Security -> Select Security Type ->InTouch Special ->Security -> Log On Domyślne konto Administratora jest następujące: Login: Administrator Pass: Wonderware Definiowanie nowych lub edycja użytkowników odbywa się również poprzez menu aplikacji (Rysunek 7): Special -> Security -> Configure Users Rysunek 7 Konfiguracja użytkowników Korzystając z tego okna można wprowadzić dowolną liczbę użytkowników wraz z nadanym im hasłem i poziomem dostępu (Access level). Warto usunąć standardowe konto Administratora z domyślnym hasłem i zastąpić je innym. Do monitorowania w oknie wizualizacji nazwy zalogowanego użytkownika służy zmienna systemowa $Operator oraz przypisany poziom dostępu dany przez zmienną $AccessLevel. W przypadku chęci skorzystania z okna logowania do aplikacji oraz wprowadzania hasła bezpośrednio z ekranu wizualizacyjnego wykorzystuje się wpisywanie loginu i hasła do zmiennych $OperatorEntered i $PasswordEntered. Zmienne te są przeznaczone wyłącznie do zapisu. Opcjonalnie można wykorzysta funkcję skryptową systemu bezpieczeństwa PostLogonDialog() służącą do wyświetlania okna dialogowego logowania. Funkcja systemowa służąca do wylogowania użytkownika to LogOff(). Zmienną $AccessLevel można wykorzystywać do przyznawania lub odmowy dostępu do poszczególnych elementów aplikacji wizualizacyjnej. Przykładowo w polu elementu z przybornika określającego jego widoczność (Visibility) lub aktywność (Disable) można zażądać, aby element był widzialny lub aktywny dla użytkowników z poziomem dostępu powyżej 5000. W analogiczny sposób można określać dostęp do okien i innych elementów naszej aplikacji. 7 S t r o n a
Menu Security -> Configure -> WindowViewer -> Inactivity TimeOut pozwala określić czas automatycznego wylogowania z aplikacji w sytuacji braku reakcji ze strony użytkownika (tj. brak zmiany stanu klawiatury oraz myszki). Szczegółowe informacje na temat mechanizmów zabezpieczających InTouch można znaleźć w Podręczniku Użytkownika w Rozdziale 3 na stronie 225. 5 System alarmów i rejestracji zdarzeń Po przywołaniu słownika zmiennych np. na etapie konfigurowania zmiennych istnieje możliwość nadawania stanów alarmowych dotyczących każdej zmiennej. W tym celu należy wybrać sposób wyświetlania Alarms lub Details&Alarms (Rysunek 8). Istnieje możliwość zdefiniowania czterech progów LoLo, Lo, Hi i HiHi podając w nich wartości bezwzględne dotyczące danej wielkości, istnieje również możliwość badania odchylenia od wartości oraz monitorowania prędkości zmian wartości. Poszczególnym alarmom mogą być nadane różne priorytety od 1 do 999. Rysunek 8 Konfiguracja alarmów dla zmiennej Do wyświetlania alarmów i zdarzeń może posłużyć komponent Distributed Alarm Display (Rysunek 9) dostępny w Wizardach w grupie AlarmDisplay. 8 S t r o n a
Rysunek 9 Komponent Distributed Alarm Display W komponencie (Rysunek 10) należy określić własność QueryType wskakując czy komponent ma wyświetlać tylko obecnie występujące alarmy (Summary) czy wszystkie alarmy, które dotąd wystąpiły (Historical). Komponent jest konfigurowalny w celu dostosowania wyświetlania alarmów do naszych potrzeb. Rysunek 10 Konfiguracja komponentu Distributed Alarm Display Ważnym aspektem jest informacja czy występujący alarm został zauważony przez użytkownika i potwierdzony. Do tego służy pole Ack zmiennej. Potwierdzenia można dokonywać globalnie wszystkich alarmów albo każdego z osobna. Potwierdzenie zaistnienia alarmu dla zmiennej temp to wpisanie 1 do pola zmiennej temp.ack 9 S t r o n a
5.1 Zapis logów alarmów do pliku i ewentualny wydruk Korzystając z towarzyszących InTouchowi programów narzędziowych (Rysunek 11) możemy uzyskać zapis alarmów do pliku lub drukować je na bieżąco. Rysunek 11 Programy narzędziowe InTouch Skorzystajmy z programu (Rysunek 12) Alarm Printer i skonfigurujmy (Rysunek 13) zapis alarmów do pliku. Rysunek 12 Program Alarm Printer 10 S t r o n a
Rysunek 13 Konfiguracja programu Alarm Printer Wymuszenie zapisu sprowadzi się do wybrania opcji Query Start. Zapis jest w pełni konfigurowalny. Szczegółowe informacje na temat Alarmów i zdarzeń można uzyskać w Podręczniku użytkownika w Rozdziale 9 na stronie 585. 6 Odczyt/zapis danych z zewnętrznego pliku InTouch zawiera szereg funkcji przeznaczonych do pracy na plikach. Podstawowe z nich zostały wymienione poniżej. Funkcja FileCopy() FileDelete() FileMove() FileReadFields(), FileWriteFields() FileReadMessage(), FileWriteMessage() Opis Kopiowanie plików Usuwanie plików Przenoszenie plików Odczyt/zapis danych do plików csv Odczyt/Zapis danych w postaci tekstu Funkcje FileReadFields(), FileWriteFields() pozwalają na zapis do plików csv (comma-separated values). Zapisują one dane bezpośrednio ze zmiennych zdefiniowanych w InTouchu. 11 S t r o n a
Funkcje FileReadMessage(), FileWriteMessage() pozwalają na odczyt/zapis do pliku tekstowego w postaci łańcucha znaków. Funkcje te dają szersze możliwości w stosunku do funkcji FileReadFields(), FileWriteFields(), gdyż w ich przypadku nie jest jawnie zdefiniowane formatowanie. Użytkownik powinien sam zdefiniować najpierw ciąg znaków a następnie wywołać funkcję z celu zapisu danej wartości. 6.1 Odczyt z plików csv Aby odczytać dane z pliku csv należy wywołać w skrypcie InToucha funkcję FileReadFields(). Jej składnia jest następująca: [result = ] FileReadFields (filename, offset, starttag, numberoffields) filename Nazwa pliku csv z którego będą odczytane dane. Format łańcuch znaków (string, message). Należy podać pełną ścieżkę dostępu do pliku. offset miejsce w pliku (w bajtach) z którego nastąpi odczyt. Format integer. starttag Nazwa pierwszej zmiennej w InTouchu (tagname), do której zostanie zapisana pierwsza wartość odczytana z pliku csv. Nazwa zmiennej powinna być umieszczona w cudzysłowie oraz musi kończyć się cyfrą (np. MojaZmienna1 ). Format łańcuch znaków. numberoffields ilość danych odczytana z plku csv. Typ integer. Pierwsza odczytana wartość jest zapisana do zmiennej zdefiniowanej w argumencie starttag, kolejne wartości są zapisywane do zmiennych InToucha o sufiksie powiększonym o jeden (np. MojaZmienna1, MojaZmienna2, MojaZmienna3, ) Funkcja opcjonalnie zwraca wartość przesunięcia (w bajtach) po odczytaniu danych. Ta informacja może być wykorzystana przy odczycie następnej paczki danych. PRZYKŁAD Skrypt odczytuje wartości Maka do zmiennej Przepis1, 27.23 do zmiennej Przepis2, 14 do zmiennej Przepis3 oraz 1 do zmiennej Przepis4, zwraca nowy offset jeżeli plik c:\set.csv zawiera następujące dane: Maka,27.23,14,1 oraz jeżeli następujące zmienne są zdefiniowane w InTouch: Przepis1:message, Przepis2:real, Przepis3:integer, Przepis4:discrete. FileReadFields("c:\set.csv",0,"Przepis1",4); 6.2 Zapis do pliku csv Aby zapisać dane do pliku csv należy wywołać w skrypcie InToucha funkcję FileWriteFields(). Jej składnia jest nastepująca: [result = ] FileWriteFields (filename, offset, starttag, numberoffields) filename Nazwa pliku csv do którego zapisywane są dane. Jeżeli plik zapisu nie został utworzony, funkcja stworzy go automatycznie. Format łańcuch znaków (string, message). Należy podać pełną ścieżkę dostępu do pliku. 12 S t r o n a
offset miejsce w pliku (w bajtach) do którego nastąpi zapis. Format integer. Aby zawsze wykonywać zapis na końcu pliku należy użyć wartość -1. starttag Nazwa pierwszej zmiennej w InTouchu (tagname), z której wartość jako pierwsza zostanie zapisana do pliku csv. Nazwa zmiennej powinna być umieszczona w cudzysłowie oraz musi kończyć się cyfrą (np. MojaZmienna1 ). Format łańcuch znaków. numberoffields ilość wartości jaka ma zostać zapisana do pliku csv. Typ integer. Pierwsza zapisana wartość jest brana ze zmiennej zdefiniowanej w argumencie starttag, kolejne zapisywane wartości są brane ze zmiennych InToucha o sufiksie powiększonym o jeden (np. MojaZmienna1, MojaZmienna2, MojaZmienna3, ) Funkcja opcjonalnie zwraca wartość przesunięcia (w bajtach) po zapisaniu danych. Ta informacja może być wykorzystana przy zapisie następnej paczki danych. PRZYKŁAD Zbiór zmiennych InToucha jest zdefiniowana następująco: Zmienna Typ Wartość Przepis1 Message Maka Przepis2 Real 27.23 Przepis3 Integer 14 Przepis4 Discrete 1 Skrypt zapisuje wartości zawarte w zmiennych od Przepis1 do Przepis4 do pliku csv znajdującego się w c:\set.csv. W pliku csv będzie zawarta następująca informacja Maka,27.23,14,1 FileWriteMessage("c:\set.csv",0,"Przepis1",4); 13 S t r o n a