Moduł Modbus 16 Relays (PL)
From Modig.pl Wiki
Modig Modbus 16 Relays
Karta 16 przekaźników sterowanych poprzez RS485 i Modbus
Opis
Moduł Modig Modbus 16R jest wyposażony w 16 przekaźników elektromagnetycznych SPDT, które są sterowane za pomocą poleceń w standardzie Modbus przesyłanych interfejsem RS485. Interfejs sterujący jest wyposażony w separację galwaniczną i zabezpieczenia przeciwprzepięciowe, dzięki czemu działa stabilnie nawet w instalacjach narażonych na silne zakłócenia. Parametry komunikacji i funkcjonowania modułu można elastycznie konfigurować i dostosować do wymagań różnych aplikacji
Podstawowe cechy i parametry
- 16 wyjść przekaźnikowych - styki NC/NO, 10 A, 250 V AC/ 30 V DC
- interfejs RS485 z separacją galwaniczną i zabezpieczeniami przeciwprzepięciowymi
- konfigurowane parametry komunikacji:
- baud rate: 1200…1000000;
- parity: none/even/odd;
- stop bits: 1/1,5/2
- zasilanie 5 V (4,9…5,3) o wydajności min. 1,5 A
- zasilanie poprzez złącze USB-C lub złącze cylindryczne DC 2.1/5.5 lub złącze Phoenix MC 3,81 mm
- sterowanie i konfigurowanie ustawień za pomocą poleceń Modbus
- pomiar wartości napięcia zasilającego i temperatury modułu
- wymiary: 200x110x60
- montaż na szynę DIN-35
Złącza przekaźników
Styki przekaźników są wyprowadzone na złącza śrubowe z rastrem 5,08 mm. Każde z 16 wyjść oferuje styki normalnie zwarte (NC) oraz normalnie otwarte (NO). Gdy dane wyjście zostanie włączone, to styk NO zostanie połączony ze stykiem wspólnym (COM) natomiast styk NC zostanie odłączony od COM. Stan aktywny dla danego wyjścia jest sygnalizowany świeceniem diody LED umieszczonej przy zaciskach tego złącza. Sposób rozmieszczenia poszczególnych wyprowadzeń został pokazany na rysunku.

Przykładowy obwód sterowany za pomocą Modig Modbus 16 Relays pokazano na rysunku.

Interfejs RS485
Interfejs RS485 jest wyprowadzony w postaci złącza typu Phoenix Contact MC 3,81 mm z 4 stykami. W zależności od instalacji mogą być używane tylko linie A+ i B- lub wszystkie T, A+, B- ,G. Ich funkcje zostały opisane w tabeli.

| Oznaczenie | Funkcja |
|---|---|
| 120 Ω / T | Aktywowanie wewnętrznego rezystora terminującego 120 Ω. Rezystor jest aktywny, gdy styk T jest połączony ze stykiem A+, np. za pomocą zworki zamontowanej bezpośrednio we wtyczce. |
| A+ | Linia A magistrali RS485 (potencjał dodatni) |
| B- | Linia B magistrali RS485 (potencjał ujemny) |
| GND / G | Masa GND magistrali RS485. |
Interfejs RS485 jest odseparowany galwanicznie od pozostałych komponentów i wyposażony w elementy przeciwprzepięciowe dzięki czemu działa stabilnie nawet w instalacjach narażonych na silne zakłócenia.
Parametry komunikacji RS485 są konfigurowane za pomocą poleceń Modbus, domyślne ustawienia to: 19200, 8, none, 1.
Moduł Modig Modbus 16R może być dołączony do magistrali RS485, która łączy maksymalnie 64 urządzenia (wliczając moduł). Każde urządzenie powinno być dołączone w taki sposób, aby nie powstawały rozgałęzienia magistrali - ewentualne połączenia powinny być jak najkrótsze. Na obu końcach magistrali zalecane jest dołączenie rezystorów terminujących 120 Ω. Modig Modbus 16R ma zintegrowany taki rezystor, ale żeby był aktywny należy połączyć ze sobą styk A+ oraz T we wtyczce.
Na rysunku pokazano uproszczony schemat magistrali RS485, z jednej strony zakończonej rezystorem terminującym 120 Ω, a z drugiej strony rezystorem terminującym zintegrowanym w module. Ponadto pokazano właściwe, oraz błędne podłączenie urządzeń do magistrali.

Zasilanie
Moduł Modig Modbus 16R jest wyposażony w 3 różne złącza zasilania, połączone równolegle. Należy wybrać tylko jedno z nich i dołączyć zasilanie o napięciu 4,9…5,3 V, wydajności min. 1,5 A i o właściwej polaryzacji.
| Złącze | Funkcja |
|---|---|
| USB-C (J3) | Standardowe gniazdo USB-C, pełni tylko funkcję złącza zasilania |
| 2.1/5.5 (J2) | Gniazdo cylindryczne 2.1/5.5 kompatybilne z zasilaczami typu “kostka”. Uwaga na polaryzację - plus w środku. |
| MC 3,81 mm (J1) | Złącze z wtyczką do przyłączenia przewodów. Uwaga na polaryzację - plus od strony przekaźników. |

Kontrolki sygnalizacyjne
Na płytce Modig Modbus 16R znajdują się dwie kontrolki LED, które informują o działaniu urządzenia.
| Kontrolka | Funkcja |
|---|---|
| STA | Świecenie diody z krótkim cyklicznym wygaszeniem oznacza poprawne działanie urządzenia |
| BUS | Miganie diody LED oznacza odbieranie danych z magistrali RS485 i poleceń Modbus |

Przywracanie ustawień
Na płytce modułu KAmod Modbus 16R znajduje się mikroprzycisk SET. Jego przyciśnięcie i przytrzymanie przez czas ok 5 s. spowoduje przywrócenie wszystkich ustawień (wartości rejestrów konfiguracyjnych) do wartości domyślnych. Funkcja będzie przydatna w sytuacji, kiedy poprzez błędne ustawienie parametrów nie ma możliwości wysyłania poleceń Modbus do modułu. Przywrócenie ustawień domyślnych ustawi parametry komunikacji RS485 na: 19200, 8, none, 1.

Rejestry konfiguracyjne (Holding Registers)
Wszystkie parametry urządzenia są definiowane poprzez wartości rejestrów konfiguracyjnych tzw. Holding Registers. Rejestry można odczytywać i zapisywać poprzez polecenia Modbus i w ten sposób można zmieniać działanie urządzenia. Lista rejestrów oraz ich funkcje zostały opisane w tabeli.
| Numer rejestru (hex) | Nazwa | Opis | Wartość domyślna/
zakres wartości |
|---|---|---|---|
| x4000 | Adress | Określa adres modułu przy sterowaniu poleceniami Modbus | 1 (x0000)
1…255 |
| x4002 | Coils | Zawiera wartość określającą liczbę wyjść (Coils) dostępnych w module. Wartość tylko do odczytu |
16 (x0010) |
| x4004 | Inputs | Zawiera wartość określającą liczbę wejść (Discrete inputs) dostępnych w module. Wartość tylko do odczytu |
0 (x0000) |
| x4006 | Baud | Określa szybkość komunikacji RS485 (baud). Wartość bez 2 ostatnich zer np. 1200 = 12 = x000C; 2400 = 24 = x0018 |
192 (x00C0)
12…10000 |
| x4008 | Parity | Określa parzystość (parity) przy komunikacji RS485. 0 - none; 1 - even; 2 - odd |
0 (x0000)
0…2 |
| x400A | Stop | Określa bity stopu (stop bits) przy komunikacji RS485. 1 - 1 bit stopu; 2 - dwa bity stopu |
1 (x0001)
1…2 |
| x400C | Broadcast | Definiuje, czy urządzenie realizuje polecenia z adresem rozgłoszeniowym o wartości 0 (x00) - broadcast. 0 - nie, 1 - tak | 1 (x0001)
0…1 |
| x400E | CRC | Definiuje, czy urządzenie sprawdza sumę kontrolną w poleceniach Modbus. 0 - nie, 1 - tak | 0 (x0000)
0…1 |
| x4010 | Response | Zezwala na wysyłanie odpowiedzi na polecenia Modbus.
0 - nie wysyła żadnych odpowiedzi, |
1 (x0001)
0…1 |
| x4012 | IO Offset | Określa, od jakiej wartości liczone są wejścia (inputs) i wyjścia (coils)
0 - wejścia/wyjścia zaczynają się od 0 (0…15) |
1 (x0001)
0…1 |
| x4014
oraz x8000 |
Version | Zawiera wersję oprogramowania firmware.
wartość 10 - oznacza 1.0 itd. |
10 (x00A0) |
| x2000 | ExBaud | Umożliwia ustawienie parametrów komunikacji, jedną z predefiniowanych wartości.
Młodszy bajt odpowiada prędkości baud: |
x0002
x0000…x0208 |
Rejestry wejść pomiarowych (Input Registers)
Urządzenie jest wyposażone w obwody pomiaru napięcia zasilającego oraz temperatury, które pozwalają kontrolować warunki pracy modułu i uniknąć awarii. Wyniki pomiarów są dostępne w rejestrach wejść pomiarowych tzw. Input Registers. Rejestry pomiarowe można odczytywać poprzez polecenia Modbus.
| Numer rejestru (hex) | Nazwa | Opis | Zakres wartości |
|---|---|---|---|
| x3000 | Voltage | Pomiar wartości napięcia zasilającego. Wartość 495 = 4,95 V itd. | 330…550 |
| x3002 | Temp | Pomiar temperatury modułu. Wartość temperatury 24 (x0018), co oznacza 24 stopnie C. Zakres temperatury: -20…-1 jest zapisywany jako xFF14…xFF01 |
-20…-1 *C =
xFF14…xFF01 0…70 *C= x0000…0046 |
Komendy sterujące w standardzie Modbus
Każde polecenie w standarcie Modbus ma postać ramki danych, której strukturę pokazuje rysunek:

Kolejne ramki muszą być oddzielone przerwą o czasie co najmniej 3,5 znaku (czas potrzebny na przesłanie pełnego znaku ASCII), natomiast przerwa pomiędzy przesłaniem jednego znaku, a rozpoczęciem transmisji kolejnego, w tej samej ramce, nie może przekroczyć 1,5 znaku. Takie reguły są stosowane dla prędkości komunikacji (baud rate) do 19200.
Jeśli prędkość komunikacji jest ustawiona powyżej 19200, to minimalna przerwa pomiędzy ramkami ma stałą wartość, równą 1,75 ms. Natomiast przerwa pomiędzy kolejnymi znakami tej samej ramki nie może przekroczyć 0,75 ms.
Każde urządzenie dołączone do magistrali Modbus musi mieć przypisany niepowtarzalny adres. Pole adresu znajduje się w każdej przesyłanej ramce, ma rozmiar 1 bajta i może mieć wartość z zakresu 1…255. Adres o wartości 0 jest tzw. adresem rozgłoszeniowym (broadcast) i umożliwia skierowanie polecenia do wszystkich urządzeń dołączonych do magistrali. W niektórych systemach nie zaleca się ustawiania adresów powyżej wartości 247.
Wyjścia i wejścia standardowo są numerowane od liczby 1. Wtedy pierwsze wyjście, to wyjście o numerze 1 (x01), a ostatnie ma numer 16 (0x10). Opisy komend i przykłady poleceń dotyczą właśnie takiego wariantu. Jednak urządzenie może być skonfigurowane w taki sposób, aby wyjścia i wejścia były numerowane od liczby 0. Wtedy pierwsze wyjście, to wyjście o numerze 0 (x00), a ostatnie ma numer 15 (0x0F). Jeśli numer wyjścia, do którego odnosi się polecenie sterujące/odczytujące, przekracza liczbę wyjść zawartych w urządzeniu (15 lub 16, w zależności od konfiguracji), to polecenie nie zostanie wykonane i pozostanie bez odpowiedzi.
W standardzie Modbus występuje kilka standardowych komend. Każda z nich oraz przykładowe polecenia i odpowiedzi urządzenia zostały opisane w dalszej części instrukcji.
Wykaz obsługiwanych komend Modbus
| Nazwa komendy | Kod komendy | Funkcja |
|---|---|---|
| Write Single Coil | x05 | Pozwala sterować stanem wyjścia lub wyjść |
| Write Multiple Coils | x0F | Pozwala sterować stanem wielu wyjść jednocześnie, zarówno załącza jak i wyłącza określone wyjścia. |
| Read Coils | x01 | Pozwala odczytać stan wyjścia lub wyjść |
| Read Discrete Inputs | x02 | Pozwala odczytać stan wejść. Ponieważ urządzenie Modig Modbus 16R nie ma wejść do odczytu stanów w odpowiedzi na to polecenie odczytuje stan wyjść, podobnie jak komenda “Read Coils” - x01. |
| Read Input Registers | x04 | Pozwala odczytać wartości z rejestrów wejść pomiarowych |
| Read Holding Registers | x03 | Pozwala odczytać wartości z rejestrów konfiguracyjnych |
| Write Single Holding Register | x06 | Pozwala ustawić wartość w rejestrze konfiguracyjnym |
| Write Multiple Holding Registers | x10 | Pozwala ustawić wartości kilku rejestrów konfiguracyjnych |
Komenda “Write Single Coil” - x05
Komenda x05 pozwala sterować stanem wyjścia lub wyjść.
| Ramka danych z komendą x05 | 01 05 00 00 FF 00 8C 3A | |
|---|---|---|
| Numer bajtu | Wartość (hex) | Znaczenie |
| 1 | x01 | Adres urządzenia docelowego |
| 2 | x05 | Komenda “Write Single Coil” - sterowanie jednym wyjściem |
| 3…4 | x0000 | Numer wyjścia, które będzie sterowane:
0 - żadne z wyjść, 1 - wyjście 1 (pierwsze), 16 - wyjście 16 (ostatnie) x00FF - steruje wszystkimi wyjściami - od 1 do 16 |
| 5…6 | xFF00 | Wartość określająca zadanie do wykonania:
x0000 - wyłącz (ON), xFF00 - włącz (OFF), x5500 - zmień stan na przeciwny (TOGGLE) ON->OFF / OFF->ON |
| 7…8 | x8C3A | Suma kontrolna CRC16 |
| Odpowiedź | Urządzenie, które odczyta i wykona polecenie wyśle w odpowiedzi identyczną ramkę: 01 05 00 00 FF 00 8C 3A | |
Podobne polecenia:
- A5 05 00 08 55 00 6A 7C - polecenie x05 do urządzenia o adresie 165 (xA5), wyjście nr. 8 (x0008) zmieni stan na przeciwny (x5500)
- Odpowiedź: A5 05 00 08 55 00 6A 7C
- 14 05 00 10 00 00 CE CA - polecenie x05 do urządzenia o adresie 20 (x14), wyjście nr. 16 (x0010) zostanie wyłączone - OFF (x0000)
- Odpowiedź: 14 05 00 10 00 00 CE CA
- 29 05 00 FF FF 00 BA 22 - polecenie x05 do urządzenia o adresie 41 (x29), wszystkie wyjścia (x00FF) zostaną włączone - ON (xFF00)
- Odpowiedź: 29 05 00 FF FF 00 BA 22
Komenda “Write Multiple Coils” - x0F
Komenda x0F pozwala sterować stanem wielu wyjść jednocześnie, zarówno załącza jak i wyłącza określone wyjścia.
| Ramka danych z komendą x0F | 01 0F 00 01 00 03 02 00 05 27 76 | |
|---|---|---|
| Numer bajtu | Wartość (hex) | Znaczenie |
| 1 | x01 | Adres urządzenia docelowego |
| 2 | x0F | Komenda “Write Multiple Coils” - sterowanie wieloma wyjściami |
| 3…4 | x0001 | Numer wyjścia, od którego rozpocznie się sterowane:
0 - żadne z wyjść nie będzie sterowane, 1 - od wyjścia 1 (pierwszego), 16 - od wyjścia 16 (ostatniego) |
| 5…6 | x0003 | Liczba wyjść, które będą sterowane:
0 - żadne z wyjść nie będzie sterowane 1 - jedno wyjście, 16 - do wysterowania 16 wyjść |
| 7 | x02 | Liczba bajtów danych zawierających sekwencję sterującą - musi wynosić 2 |
| 8…9 | x0005 | Sekwencja sterująca, LSB -> wyjście nr 1.
Bity o wartości 0 powodują wyłączenie wyjść, bity o wartości 1 powodują załączenie wyjść. x0005 = 00000000 00000101 - załączone wyjścia 1 i 3 |
| 10...11 | x27 76 | Suma kontrolna CRC16 |
| Odpowiedź | Urządzenie, które odczyta i wykona polecenie wyśle w odpowiedzi następującą ramkę: 01 0F 00 01 00 03 44 0A | |
| 1 | x01 | Adres urządzenia, które odpowiada |
| 2 | x0F | Komenda “Write Multiple Coils” - sterowanie wyjściami |
| 3...4 | x0001 | Numer wyjścia, od którego rozpoczęto sterowane |
| 5...6 | x0003 | Liczba wyjść, które rzeczywiście były sterowane |
| 7...8 | x440A | Suma kontrolna CRC16 |
Jeśli liczba wyjść do ustawienia przekracza liczbę wyjść zawartych w urządzeniu (po uwzględnieniu numeru wyjścia, od którego rozpocznie się sterowanie), to polecenie zostanie wykonane prawidłowo dla wyjść istniejących. W odpowiedzi zostanie zwrócona liczba wyjść rzeczywiście wysterowanych.
Podobne polecenia:
- A5 0F 00 08 00 04 02 00 07 6D 9D - polecenie x0F do urządzenia o adresie 165 (xA5), steruje 3 (x0003) wyjściami od wyjścia nr. 8 (x0008), sekwencja sterująca to :x0007 (00000000 00000111) czyli załączy wyjścia 8, 9, 10 oraz wyłączy wyjście 11.
- Odpowiedź: A5 0F 00 08 00 04 CC EE
- 14 0F 00 0F 00 05 02 00 00 14 43 - polecenie x0F do urządzenia o adresie 20 (x14), steruje 5 (x0005) wyjściami od wyjścia nr. 15 (x000F), sekwencja sterująca to :x0000 (00000000 00000000) czyli wyłączy wyjścia 15 i 16.
- Odpowiedź: 14 0F 00 0F 00 02 E6 CC (wysterowane 2 wyjścia, a nie 5)
- 29 0F 00 01 00 10 02 FF FF 1C 40 - polecenie x0F do urządzenia o adresie 41 (x29), steruje 16 (x0010) wyjściami od wyjścia nr. 1 (x0001), sekwencja sterująca to xFFFF (11111111 11111111) czyli włączy wszystkie wyjścia od 1 do 16.
- Odpowiedź: 29 0F 00 01 00 10 03 EF
Komenda “Read Coils” - x01
Komenda x01 pozwala odczytać stan wyjścia lub wyjść.
| Ramka danych z komendą x01 | 01 01 00 02 00 04 9C 09 | |
|---|---|---|
| Numer bajtu | Wartość (hex) | Znaczenie |
| 1 | x01 | Adres urządzenia docelowego |
| 2 | x01 | Komenda “Read Coils” - odczyt stanu wyjść |
| 3…4 | x0002 | Numer wyjścia, od którego rozpocznie się odczyt stanów wyjść:
2 - odczyt od wyjścia nr 2 |
| 5…6 | x0004 | Wartość określająca ile wyjść będzie odczytanych:
4 - odczytanie 4 wyjść, czyli: 2, 3, 4 i 5 |
| 7…8 | x0DC5 | Suma kontrolna CRC16 |
| Odpowiedź | Urządzenie, które odczyta i wykona polecenie wyśle w odpowiedzi następującą ramkę: 01 01 02 00 0C B9 F9 | |
| 1 | x01 | Adres urządzenia, które odpowiada |
| 2 | x01 | Komenda “Read Coils” - odczyt stanu wyjść |
| 3 | x02 | Liczba bajtów danych, które zawierają odpowiedź - 2 |
| 4…5 | x000C | Stan wyjść: 2 - OFF (0), 3 - OFF (0), 4 - ON (1), 5 - ON (1)
Binarnie: 00000000 00001100 |
| 6…7 | xB9F9 | Suma kontrolna CRC16 |
Podobne polecenia:
- A5 01 00 08 00 06 6A 7C - polecenie x01 do urządzenia o adresie 165 (xA5), odczyt stanu 6 (x0006) wyjść, zaczynając od wyjścia 8 (x0008).
- Odpowiedź: A5 01 02 00 02 49 E4 - załączone tylko wyjście nr. 9 (x0002)
- 14 01 00 10 00 01 CE CA - polecenie x01 do urządzenia o adresie 20 (x14), odczyt stanu jednego (x0001) wyjścia, zaczynając od wyjścia 16 (x0010).
- Odpowiedź: 14 01 02 00 00 B4 3F - wyjście wyłączone (x0000)
- 29 01 00 20 01 00 BA 06 - polecenie x01 do urządzenia o adresie 41 (x29), odczyt stanu 16 (x0010) wyjść, zaczynając od wyjścia 32 (x0020).
- Odpowiedź: brak odpowiedzi - nie można odczytać stanu od wyjścia 32
Jeśli liczba wyjść do odczytania przekracza liczbę wyjść zawartych w urządzeniu (po uwzględnieniu numeru wyjścia, od którego rozpocznie się odczyt stanów), to w odpowiedzi wyjścia nieistniejące będa miały zawsze stan OFF (0).
Komenda “Read Discrete Inputs” - x02
Komenda x02 pozwala odczytać stan wejść. Ponieważ urządzenie KAmod Modbus 16R nie ma wejść do odczytu stanów w odpowiedzi na to polecenie odczytuje stan wyjść, podobnie jak komenda “Read Coils” - x01.
| Ramka danych z komendą x02 | 01 02 00 02 00 04 D8 09 | |
|---|---|---|
| Numer bajtu | Wartość (hex) | Znaczenie |
| 1 | x01 | Adres urządzenia docelowego |
| 2 | x02 | Komenda “Read Discrete Inputs” - odczyt stanu wejść |
| 3…4 | x0002 | Numer wejścia, od którego rozpocznie się odczyt stanów wejść:
2 - odczyt od wejścia nr 2 |
| 5…6 | x0004 | Wartość określająca ile wejść będzie odczytanych:
4 - odczytanie 4 wejść, czyli: 2, 3, 4 i 5 |
| 7…8 | xD809 | Suma kontrolna CRC16 |
| Odpowiedź | Urządzenie, które odczyta i wykona polecenie wyśle w odpowiedzi następującą ramkę: 01 02 02 00 0C B9 BD | |
| 1 | x01 | Adres urządzenia, które odpowiada |
| 2 | x02 | Komenda “Read Discrete Inputs” - odczyt stanu wejść |
| 3 | x02 | Liczba bajtów danych, które zawierają odpowiedź - 2 |
| 4…5 | x000C | Stan wejść: 2 - nieaktywne (0), 3 - nieaktywne (0), 4 - aktywne (1), 5 - aktywne (1);
Binarnie: 00000000 00001100 |
| 6…7 | xB9BD | Suma kontrolna CRC16 |
Podobne polecenia:
- A5 02 00 08 00 06 60 EE - polecenie x02 do urządzenia o adresie 165 (xA5), odczyt stanu 6 (x0006) wejść, zaczynając od wejścia 8 (x0008).
- Odpowiedź: A5 02 02 00 02 49 A0 - aktywne tylko wejście nr. 9 (x0002)
- 4 02 00 10 00 01 BA CA - polecenie x02 do urządzenia o adresie 20 (x14), odczyt stanu jednego (x0001) wejścia, zaczynając od wejścia 16 (x0010).
- Odpowiedź: 14 02 02 00 00 B4 7B - wejście nieaktywne (x0000)
- 29 02 00 20 01 00 7E 78 - polecenie x02 do urządzenia o adresie 41 (x29), odczyt stanu 16 (x0010) wejść, zaczynając od wejścia 32 (x0020).
- Odpowiedź: brak odpowiedzi - nie można odczytać stanu od wejścia 32
Jeśli liczba wejść do odczytania przekracza liczbę wejść zawartych w urządzeniu (po uwzględnieniu numeru wejścia, od którego rozpocznie się odczyt stanów), to w odpowiedzi wejścia nieistniejące będą miały zawsze stan nieaktywny (0).
