Komunikacja sterownika PLC Fatek jako master w
Transkrypt
Komunikacja sterownika PLC Fatek jako master w
Komunikacja sterownika PLC Fatek jako master w protokole ModBus RTU 1. Konfiguracja portu komunikacyjnego - dokonuje się tego w oprogramowaniu narzędziowym WinProladder, z menu PLC->Setting->Port Parameter: - należy zmienić protokół (czerwona ramka poniżej) z domyślnego Fatek Communication Protocol na ModBus RTU Slave - należy ustalić parametry komunikacji na porcie (niebieska ramka poniżej) na takie same, jakie ustawione są na urządzeniu/ach slave, które będą odpytywane przez sterownik. Obowiązuje tu zasada, którą można streścić jednym zdaniem: parametry komunikacji na wszystkich urządzeniach, komunikujących się na jednej sieci szeregowej, muszą być takie same: 2. Wstawienie w programie głównym funkcję nr 150 - ModBus Master. Funkcja ta przyjmuje trzy argumenty: gdzie: - Pt - numer portu komunikacyjnego sterownika, na którym ma odbywać się komunikacja (w przykładzie port nr 2) - SR - rejestr początkowy tabeli komunikacji ModBus Master. Do tej pory jeszcze jej nie omówiono. Istotne jest to, że w dalszym etapie, tworząc ją, należy nadać jej adres początkowy taki sam jak wpisano w to pole. Natomiast co do tego jaki musi być to adres: musi być z zakresu zmiennych podtrzymywanych (bo inaczej sterownik utraci zapisy w tej tabeli po każdym uruchomieniu) i nie mogą rejestry tej tabeli pokrywać się z użytymi już w programie, ku innym celom, adresami rejestrów (tak, żeby uniknąć nadpisywania wartości w tabeli, co prowadziłoby do jej "zniszczenia" poprzez przekłamanie) - WR - rejestry robocze funkcji - tu należy wpisać adres nieużywanego ku innym celom zakresu rejestrów (funkcja używa 8śmiu kolejnych rejestrów roboczych). Nie muszą już być podtrzymywane.W pierwszym rejestrze roboczym zapisywane są: - na młodszym bajcie numer wykonywanego wpisu z tabeli komunikacyjnej (o tym później) - na starszym bajcie zapisywany będzie ewentualny kod błędu (brak błędu to wartość 0) 3. Wywoływanie funkcji: - optymalnie jest to wykonywać od markera systemowego wskazującego na to czy używany do komunikacji port komunikacyjny jest wolny, czy też zajęty. Każdy port ma przypisany taki marker, a odnaleźć ten marker można w helpie do systemowych zmiennych w WinProladderze (skrót F2). W przykładzie, gdzie stosuje się port nr 2, odpowiednim wierszem w helpie jest: M1962 ● 0:Port 2 Busy ● 1:Port 2 Ready Port 2 busy indicator i ten marker zastosowano, jako wywołanie funkcji nr 150 - ModBus Master: Uzasadnienie takiego wywołania funkcji: - w tabeli komunikacyjne będzie wprowadzane wiele wpisów - będą to odpytania różnych zmiennych w obrębie jednej stacji slave lub wielu stacji slave - funkcja przy pojedynczym jej wywołaniu stanem narastającym na wejściu, wykonuje tylko jeden z tych wpisów - żeby wykonała kolejny, musi pojawić się na jej wejściu ponownie stan narastający (czyli każde wywołanie to wykonanie kolejnego wpisu w tabeli wpisu [gdy wykona się ostatni, w następnym wywołaniu wykona pierwszy - „zapętlenie”]) Z tego powodu trzeba tą funkcję cyklicznie wyzwalać, aby wykonywały się wszystkie wpisy z tabeli i żeby w ogóle się wykonywały. Zastosowanie markera wskazującego na to, że używany przez funkcję port komunikacyjny jest wolny, kiedy tak właśnie będzie: - funkcja zacznie wykonywać odpytanie na port - marker przejdzie w stan niski, gdyż port stanie się zajęty - gdy funkcja skończy pojedyncze odpytanie, port się zwolni, czyli marker przejdzie w stan wysoki. Zatem pojawi się na wejściu funkcji ponownie stan narastający i funkcja rozpocznie wykonywanie kolejnego wpisu. Summa summarum uzyskuje się efekt, że kiedy tylko port jest wolny, wykonywana jest funkcja – nowe odpytanie odbywa się najszybciej, jak to jest możliwe. 4. Tworzenie tabeli ModBus Master Table: - dokonuje się tego w drzewku projektu, w odnodze Table Edit. Klikamy prawym przyciskiem myszy na pozycji ModBus Master Table i wybieramy utworzenie nowej tabeli: - wpisujemy dowolną, naszą nazwę tabeli - adres początkowy wpisujemy taki sam, jaki wpisaliśmy w polu SR funkcji 150: - po kliknięciu OK, otwiera się edytor tabli: 5. Dodawanie wpisów (deklaracji poszczególnych odpytań w protokole ModBus) do tabeli ModBus Master Table. Kreator wpisu wygląda następująco: gdzie: - w polu Slave Station wpisujemy adres stacji slave na sieci ModBus, do której adresujemy zapytanie - pole Command ma trzy opcje: - zapis - zapis pojedynczej zmiennej - odczyt Czym różni się komenda zapis i zapis pojedynczej zmiennej: w ModBusie, do zapisu wartości, istnieją po dwa kody funkcji, odpowiednio dla zapisu do zmiennych dyskretnych (typu coils) i zmiennych rejestrowych (typu holding register). Poniżej wypisano parami te komendy (cytaty z dokumentacji protokołu ModBus): * zmienne coils (coils to zmienne dyskretne zapis/odczyt) Force Single Coil (05) Force Multiple Coils (15, 0x0F) * zmienne holding register (zmienne rejestrowe zapis/odczyt): Preset Single Register (06) Preset Multiple Registers (16, 0X10) I teraz, w zależności od implementacji protokołu ModBus przez producenta urządzenia, które chcemy odpytywać, wybierzemy z listy w kreatorze pozycję Write lub Single Write. Czasami wspierane są obie funkcje, czasami tylko jedna z nich. - w pole Data size wpisujemy ile kolejnych zmiennych od wskazanego w ostatnim polu adresu początkowego, chcemy odczytać lub zapisać (nie dotyczy komendy single write, gdzie w polu tym winna znaleźć się wartość 1) - pole Master Data Start Address - wpisujemy tu adres początkowy zmiennych sterownika Fatek: - do których mają być zapisane odczytane z urządzenia slave wartości, w przypadku komendy odczytu - których wartości mają zostać wysłane do urządzenia slave, w przypadku komendy zapisu - pole Slave Data Start Address - wpisujemy tu adres początkowy zmiennych w urządzeniu slave: - które chcemy pobrać, w przypadku komendy odczytu - do których chcemy wysłać wartości, w przypadku komendy zapisu W polu tym, adres w urządzeniu slave, rządzi się następującymi zasadami: - ostatnia cyfra po lewej stronie wskazuje na typ zmiennej, do której chcemy się odwołać. W ModBusie występują cztery typy zmiennych, oznaczane cyframi: 0 - coils - zmienna dyskretna zapis/odczyt 1- input - zmienna dyskretna tylko do odczytu 3 - input register - zmienna rejestrowa tylko do odczytu 4 - holding register - zmienna rejestrowa zapis/odczyt I tymi cyframi, na ostatniej po lewej stronie pozycji będziemy wskazywać typ zmiennej. W dokumentacji urządzenia winno być napisane, jakiego typu jest dana zmienna. - prawą stronę pola Slave Data Address, uzupełniamy adresem zmiennej w formacie dziesiętnym (często w dokumentacji urządzeń adresy są podawane w kodzie heksadecymalnym - trzeba je przeliczyć na kod dziesiętny). UWAGA: Bardzo często, w dokumentacjach urządzeń, adresy zmiennych są poprzesuwane o jeden adres w dół. Można to stwierdzić doświadczalnie lub wydedukować z tego, że w dokumentacji urządzenia adresy rozpoczynają się od 0 - wtedy na pewno do wszystkich adresów trzeba będzie dodać 1. Przykładowo, wpis jakiego dokonano na powyższym screenie, można by odczytać następująco: Odczytaj ze stacji slave o numerze 3, cztery kolejne zmienne typu holding register, od adresu 1200, a odczytane wartości wpisz do rejestrów od R0 do R3 w sterowniku Fatek. I w ten sposób dodajemy na listę wpisy odczytu różnych zmiennych, z różnych stacji.