1. Konfiguracja portu komunikacyjnego
Konfigurację modułu należy rozpocząć od wykrycia go w oprogramowaniu Ethernet Configuration Tool dostępnego do pobrania na naszej stronie internetowej. Szczegółowa instrukcja została przedstawiona w formie filmu i jest dostępna pod adresem: https://www.multiprojekt.pl/fatek-problem-z-wykryciem-modulu-ethernetowego/.
Należy skonfigurować odpowiedni Port na tryb Modbus Client:

Po wybraniu trybu Modbus Client pojawi się zakładka “Port Mapping”, gdzie definiuje się mapowanie. Do ustawienia jest pięć parametrów:

Gdzie:
– Local Station – numer stacji, na którą nadawać ma sterownik będący Modbus Klientem
– Remote IP – adres urządzenia – Modbus Slave’a
– Remote Station – numer stacji urządzenia – Modbus Servera
– Remote Port – numer portu w komunikacji pomiędzy urządzeniami Klient i Server
– Group Size – rozmiar grupy komunikacyjnej
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:

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.

Przykład połączenia Fatek Modbus Klient – HMI Weintek Modbus Server
Konfigurujemy mapowanie w Ethernet Configuration Tool:

Zgodnie z powyższymi ustawieniam ustawiamy w tabeli komunikacyjnej sterownika Fatek numer stacji Slave równy 3.

To dlaczego ustawiono adres początkowy Slave na 410000 i 000001 wyjaśnimy poniżej.
Najpierw konfigurujemy driver komunikacyjny Modbus Server. Ustawiamy numer stacji 4 zgodnie z parametrami zdefiniowanymi w Ethernet Configuration Tool. Załączamy bramę Modbus TCP/IP.

Z tabeli mapowania adresów odczytać możemy pod jakim adresem Modbus znajdują się poszczególne rejestry lokalne HMI. Tabelę tą możemy odpowiednio zmieniać. Pozostając przy ustawieniach domyślnych odczytujemy, że wartość Modbusowa 410000 pozwala na odczyt/zapis adresu RW-0, a wartość Modbusowa 000001 na odczyt/zapis adresu LB-0.
