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.

Podobne dokumenty