TapHome do Modbus RTU / ASCII / TCP
TapHome jako Modbus slave dla BMS, SCADA lub PLC przez Modbus TCP, RTU lub ASCII: wybierz wartości i akcje urządzeń i przekaż masterowi mapę rejestrów, którą tam odczytasz.
Ostatnia aktualizacja:
TapHome może działać jako Modbus slave (serwer), dzięki czemu system zarządzania budynkiem (BMS), SCADA lub PLC odczytuje urządzenia TapHome i steruje nimi przez Modbus TCP albo przez Modbus RTU lub ASCII na RS485. W sekcji Uwidocznij urządzenia wybierasz wartości i akcje każdego urządzenia, TapHome przydziela każdej z nich własny rejestr, a wynikiem jest mapa rejestrów, którą przekazujesz osobie konfigurującej mastera. W ten sposób może odczytywać urządzenia także drugi Core (łączenie kilku jednostek Core).
Jak to działa
- Na Core dodaj interfejs Modbus i wybierz, co master może widzieć i robić: wartości (temperatura, poziom żaluzji, stan przełącznika …) i akcje (polecenia żaluzji, przełączenie …).
- Mapa rejestrów powstaje w trakcie wybierania: każda wartość dostaje zakres rejestrów pod następnym wolnym adresem, a zaraz za nim rejestr ważności.
- Na masterze integrator wprowadza te same rejestry jako punkty lub tagi. Odczyt zwraca aktualną wartość; zapis zmienia urządzenie jako zmiana ręczna, tak jak w aplikacji.
Core dalej steruje własnymi modułami i smart rules; Modbus udostępnia tylko wybrane przez Ciebie wartości i akcje.
Przykład: żaluzje i termostat dla BMS
BMS budynku odczytuje temperaturę w pomieszczeniu, ustawia pożądaną temperaturę termostatu i może zatrzymać żaluzje. Na Core w sekcji Uwidocznij urządzenia wybierz Dodaj nowy interfejs → Modbus TCP, a następnie dodaj żaluzje i termostat. To pełna konfiguracja po stronie TapHome — kliknij rejestr lub Dodaj urządzenie, aby zobaczyć następny krok:
- Adres IP Core — BMS łączy się z nim. Nadaj Core stały adres, na przykład przez rezerwację DHCP w routerze.
- Slave ID — BMS musi wysyłać ten sam Unit ID; żądanie z innym otrzymuje wyjątek 0x0A.
- Wartość zajmuje dwa rejestry: samą wartość i rejestr ważności za nią. ×100 to mnożnik: poziom żaluzji 0,55 jest odczytywany jako 55.
- Akcja ma jeden rejestr, do którego BMS zapisuje. Stop to coil: zapis ON zatrzymuje żaluzje.
- Ustawienia rejestru — typ rejestru, indeks, typ danych, mnożnik, kolejność bajtów i rejestr ważności. Wartości domyślne zwykle pasują; indeks zmień, gdy BMS oczekuje stałego układu.
- Dodaj urządzenie — zaznacz wartości i akcje urządzenia; OK dodaje je pod następnymi wolnymi adresami. Wartości zapisywalne dostają rejestr holding (H) lub coil (C), wartości tylko do odczytu rejestr wejściowy (A) lub wejście dyskretne (D).
Po stronie BMS lub SCADA
Master potrzebuje adresu IP i portu Core (lub ustawień linii RS485), Slave ID i listy punktów. Dla powyższego przykładu:
| Punkt | Rejestr TapHome | Notacja od 1 | Kod funkcji | Wartość |
|---|---|---|---|---|
| Poziom żaluzji | H 0 | 40001 | 03 odczyt, 06 zapis | 0–100 |
| Ważność poziomu żaluzji | H 1 | 40002 | 03 | 0 = ważna |
| Kąt listew | H 2 | 40003 | 03 odczyt, 06 zapis | 0–100 |
| Ważność kąta listew | H 3 | 40004 | 03 | 0 = ważna |
| Zatrzymanie żaluzji | C 4 | 00005 | 05 zapis | ON = zatrzymanie |
| Temperatura | A 5 | 30006 | 04 | ÷ 10 = °C |
| Ważność temperatury | A 6 | 30007 | 04 | 0 = ważna |
| Pożądana temperatura | H 7 | 40008 | 03 odczyt, 06 zapis | ÷ 10 = °C |
| Ważność pożądanej temperatury | H 8 | 40009 | 03 | 0 = ważna |
Wszystkie rejestry są typu Int16 (coil to jeden bit). H = rejestr holding, A = rejestr wejściowy, C = coil.
TapHome numeruje rejestry od 0, tak jak są wysyłane w żądaniu. Mastery używające notacji od 1 (40001 dla rejestru holding 0) mają numer o jeden wyższy — przesunięcie o jeden to najczęstsza przyczyna odczytu niewłaściwej wartości.
Odczyt i zapis z przykładu przy użyciu pymodbus 3.16:
| |
Biblioteki dla innych języków: NModbus4 (C#), libmodbus (C), digitalpetri/modbus (Java), goburrow/modbus (Go). Simply Modbus wyjaśnia protokół.
Master powinien odczytywać rejestr ważności razem z wartością (jednym żądaniem dla obu) i traktować każdy kod inny niż 0 jako usterkę — utracone urządzenie pojawi się wtedy w BMS jako usterka, a nie jako zamrożona wartość.
Interfejsy i właściwości komunikacyjne
| Interfejs | Właściwości | Domyślnie |
|---|---|---|
| Modbus TCP | TCP port, Slave ID | port 502, następne wolne Slave ID na porcie |
| Modbus RTU, Modbus ASCII | zacisk BUS 1, BUS 2 lub BUS 3, prędkość transmisji, bity danych, parzystość, bity stopu, Slave ID | bez zacisku, 9600 bodów, 8 bitów danych (ASCII 7), parzystość None, 1 bit stopu, Slave ID 1 |
- Kilka masterów przez TCP: kilka interfejsów Modbus TCP może współdzielić jeden port, jeśli mają różne Slave ID — na przykład jeden dla BMS i jeden dla drugiego Core, każdy z własnymi rejestrami. Do 10 połączeń jednocześnie.
- RS485: interfejs RTU lub ASCII uruchamia się dopiero po wybraniu zacisku, a jeden zacisk obsługuje jeden interfejs.
- Slave ID to wartość od 1 do 247. Interfejs odpowiada tylko na własne Slave ID: Modbus TCP zwraca wyjątek 0x0A dla innego Unit ID (także 0 lub 255), RTU i ASCII nie odpowiadają na ramki dla innego adresu.
Lista interfejsów pokazuje konflikty, takie jak ten sam port i Slave ID użyte dwa razy albo interfejs bez zacisku.
Ustawienia rejestru
| Ustawienie | Wartości |
|---|---|
| Rodzaj rejestru | H rejestr holding, A rejestr wejściowy, C coil, D wejście dyskretne. Master może zapisywać tylko H i C. |
| Indeks rejestru | od 0 do 65535, adres w żądaniu Modbus. |
| Typ danych | Bool, Int16 i UInt16 zajmują jeden rejestr, Int32, UInt32 i Float dwa. C i D przenoszą tylko Bool. |
| Multiplier | Odczyt: rejestr = wartość × mnożnik. Zapis: wartość = rejestr ÷ mnożnik. Temperatury mają domyślnie ×10, poziomy i procenty ×100 (0,55 → 55). |
| Threshold | Zamiast mnożnika dla Bool na wartości liczbowej: true, gdy wartość jest równa progowi lub od niego większa; zapis true do coil ustawia wartość na próg, false na 0. |
| Endianness | BigEndian lub LittleEndian; Byte swap dodatkowo zamienia bajty wewnątrz każdego rejestru dla Int32, UInt32 i Float. |
Widok szczegółów interfejsu oznacza rejestry, których zakresy się nakładają. Nakładająca się wartość nie jest obsługiwana — daj każdej wartości własny zakres, łącznie z jej rejestrem ważności.
Rejestr ważności i wartość zastępcza
Include validity register (na C i D Include validity bit) jest domyślnie włączony. Rejestr tylko do odczytu zaraz za wartością informuje mastera, czy wartość jest ważna; gdy nie jest, rejestry wartości zwracają zamiast niej Fallback value (dla Float NaN z Use NaN as fallback).
| Kod | Znaczenie |
|---|---|
| 0 | ważna |
| 1 | wartość nie mieści się w typie danych (na przykład NaN w typie całkowitym) |
| 2 | urządzenie jest niedostępne lub w stanie błędu |
| 3 | ustawienia rejestru są nieprawidłowe |
| 5 | brak jeszcze wartości, na przykład zaraz po uruchomieniu Core |
Na C i D bit ważności ma wartość 1, gdy wartość nie jest ważna.
Akcje
- Akcja bez parametrów (Stop, Toggle …) ma jeden rejestr na H lub C. Zapis 1 lub więcej albo coil ON ją uruchamia; zapis 0 zwraca wyjątek 0x03.
- Akcja z parametrami (dodanie do poziomu żaluzji, ustawienie zakresu …) ma jeden rejestr holding na każdy parametr, jeden za drugim. Jeden zapis musi objąć wszystkie; zapis tylko części z nich zwraca wyjątek 0x03.
- Rejestry akcji są tylko do zapisu — ich odczyt zwraca wyjątek 0x02.
Co dostaje master
TapHome obsługuje kody funkcji 01, 02, 03, 04, 05, 06, 15 i 16. Jedno żądanie może odczytać kilka kolejnych wartości; w przeciwnym razie master dostaje wyjątek:
| Wyjątek | Kiedy |
|---|---|
| 0x01 | nieobsługiwany kod funkcji |
| 0x02 | adres nieprzypisany do żadnej wartości, zakres z luką, zapis do A lub D, odczyt rejestru akcji, zapis do rejestru ważności |
| 0x03 | wartość, której urządzenie nie może przyjąć, lub nieprawidłowy zapis akcji; zapis kilku wartości działa na zasadzie wszystko albo nic |
| 0x04 | urządzenie odrzuciło zapis |
| 0x0A | Modbus TCP: inne Slave ID (Unit ID) niż Slave ID interfejsu |
Modbus TCP zamyka połączenie nieaktywne przez 15 minut.
Aktualizacja do 2026.1
Przy aktualizacji jednostki sterującej do 2026.1 istniejące interfejsy Modbus slave są konwertowane automatycznie z zachowaniem adresów rejestrów i Slave ID. Rejestr Stop żaluzji KNX, żaluzji i urządzenia Markiza z Packet parsera oraz wirtualnego urządzenia Markiza nie jest konwertowany; master, który go używał, otrzyma pod jego adresem wyjątek 0x02 (Wersja 2026.1).
Od wersji 2026.1 Modbus TCP odpowiada tylko na własne Slave ID — jeśli Twój master wysyła Unit ID 0 lub 255, ustaw w nim Slave ID interfejsu.
Debugowanie połączeń Modbus RTU
RS485 to wspólna magistrala, więc komputer z konwerterem USB–RS485 (na przykład FTDI USB-RS485-WE-1800-BT) i oprogramowaniem terminalowym, takim jak Terminal dla Windows, może podsłuchiwać komunikację podczas integracji.