Dokumentacja NexBlue
1. Kanał komunikacyjny
- Typ kanału: TCP/IP
- Interfejs fizyczny: połączenie za pomocą kabla Ethernet RJ45 / połączenie Wi-Fi
2. Komunikacja w protokole TCP/IP
2.1 Konfiguracja sieci
- Tryb sieciowy: dynamiczne przydzielanie adresów IP przez protokół DHCP
- Tryb awaryjny: adres IP statyczny skonfigurowany w aplikacji
W trybie DHCP urządzenie automatycznie żąda adresu IP od serwera DHCP. Po pomyślnym uzyskaniu adresu urządzenie rozgłasza swoje informacje za pośrednictwem protokołu mDNS. Nazwa usługi rozgłaszanej to:
_nexblue_modbus._tcp.local
Może to zostać automatycznie wykryte przez systemy EMS obsługujące protokół mDNS, takie jak Home Assistant i Tibber.
2.2 Port komunikacyjny
- Port Modbus TCP: 502
2.3 Identyfikator jednostki
- Wartość domyślna: 200
- Zakres ustawień: 1–247
W protokole Modbus TCP identyfikator urządzenia (Unit ID) jest identyfikatorem logicznym zachowanym w celu zapewnienia zgodności z protokołem RTU. Wykorzystuje on ten sam parametr konfiguracyjny, co adres urządzenia podrzędnego stosowany w trybie RTU.
2.4 Definicje rejestrów
2.4.1 Typy rejestrów
| Typ rejestru | Funkcja | Kod funkcji | Opis |
|---|---|---|---|
| Rejestry wejściowe | Odczyt rejestrów wejściowych | 0x04 | Rejestry tylko do odczytu, które zwracają pomiary lub informacje o stanie, takie jak napięcie, prąd, moc, temperatura, skumulowana energia itp. |
| Rejestry posiadania | Odczyt rejestrów przechowujących | 0x03 | Rejestry do odczytu i zapisu. Urządzenie nadrzędne może odczytać aktualną konfigurację, aktualne wartości graniczne, stan trybu pracy itp. |
| Rejestry posiadania | Zapisz do pojedynczego rejestru buforującego | 0x06 | Urządzenie nadrzędne wysyła pojedynczy parametr konfiguracyjny lub polecenie, takie jak ustawienie maksymalnego natężenia prądu lub rozpoczęcie/zakończenie ładowania. |
| Rejestry posiadania | Zapis do wielu rejestrów buforowych | 0x10 | Program główny zapisuje jednocześnie wiele kolejnych rejestrów, co służy do zbiorczej aktualizacji konfiguracji lub ustrukturyzowanych grup parametrów. |
Te cztery kody funkcji stanowią podstawowe kody rozpoznawane przez normy IEC 61131-3, EN 61107 oraz specyfikację ISO Modbus i są domyślnie obsługiwane przez niemal wszystkie urządzenia nadrzędne, sterowniki PLC i systemy EMS.
2.4.2 Planowanie adresów rejestru (mapa adresów)
| Zasada | Opis |
|---|---|
| Długość | Pole adresu w ramce Modbus jest 16-bitową liczbą całkowitą bez znaku. |
| Podział warstwowy | Podział według funkcji: Identyfikacja → Poziom stacji → Na złącze. Logika powinna być przejrzysta i łatwa do rozszerzenia. |
| Jednolity punkt wyjścia | Wszystkie rejestry wykorzystują adresy logiczne. Adresowanie logiczne zazwyczaj zaczyna się od 0. W dokumencie przedstawiono zarówno format dziesiętny, jak i szesnastkowy. |
| Zasada wyrównania | Dane 32-bitowe muszą zaczynać się od adresu parzystego, aby uniknąć przekraczania granic rejestrów. |
| Zarezerwowana przestrzeń na rozbudowę | W każdym obszarze pozostawiono wolne miejsca, aby w przyszłych wersjach można było dodawać pola bez naruszania zgodności. |
| Kodowanie znaków | Każdy rejestr ma rozmiar 2 bajtów. Ciągi znaków mają stałą długość i nie są uzupełniane wartością 0x00 w przypadku niewykorzystanych bajtów. |
| Kolejność bajtów/słów |
Wartości pojedynczych rejestrów stosują kolejność bajtów typu Big-Endian. Wartości wielu rejestrów stosują pełny format Little-Endian (DCBA): kolejność bajtów typu Little-Endian w obrębie każdego 16-bitowego rejestru oraz kolejność słów typu Little-Endian (najpierw słowo o najniższej wartości). |
| Metody dostępu | Do wprowadzania danych służy kod 0x04. Rejestry buforowe są odczytywane za pomocą kodu 0x03, a zapisywane za pomocą kodu 0x06 (pojedynczy zapis) lub 0x10 (wielokrotny zapis). |
2.4.3 Identyfikator, wersja i czas (dane wejściowe, 0x04)
| Adres | Nazwa | Typ | Jednostka | Dostęp | Opis |
|---|---|---|---|---|---|
| 0000–0007 / 0x0000–0x0007 | Marka | STRING(16) | — | RO | 2 bajty na rejestr, UTF-8/ASCII. |
| 0008–0015 / 0x0008–0x000F | Model | STRING(16) | — | RO | Model urządzenia. |
| 0016–0027 / 0x0010–0x001B | Numer seryjny | STRING(24) | — | RO | Numer seryjny urządzenia. |
| 0028–0035 / 0x001C–0x0023 | Wersja oprogramowania układowego | STRING(16) | — | RO | Na przykład: 04.00.19. |
| 0036 / 0x0024 | Wersja mapowania Modbus | UINT16 | — | RO |
Górny bajt oznacza wersję główną, a dolny bajt – wersję podrzędną. Przykłady: 0x0100 = wersja 1.0; 0x0102 = wersja 1.2. |
| 0037 / 0x0025 | Liczba złączy | UINT16 | — | RO | Liczba złączy: 1 lub 2. |
| 0038–0039 / 0x0026–0x0027 | Data | UINT32 | RRRRMMDD | RO | 32-bitowe wyrównanie do parzystej pozycji. Przykład: 20251202. |
| 0040–0041 / 0x0028–0x0029 | Czas | UINT32 | HHMMSS | RO | Przykład: 155630 oznacza 15:56:30. |
| 0042 / 0x002A | Strefa czasowa | UINT16 | protokoły | RO | Przykład: UTC+2 → +120. |
| 0044 | Wersja sprzętowa | STRING(16) | — | RO | Wersja sprzętowa. |
| 0043–0099 | Zarezerwowane | — | — | — | Zarezerwowane na potrzeby przyszłej identyfikacji, certyfikatów, informacji produkcyjnych itp. |
2.4.4 Stan i pomiary w czasie rzeczywistym (wejście, 0x04)
| Adres | Nazwa | Typ | Jednostka | Dostęp | Opis |
|---|---|---|---|---|---|
| 0100 / 0x0064 | Stan Chargepoint | UINT16 | — | RO |
|
| 0102–0103 / 0x0066–0x0067 | Obecny poziom L1 | FLOAT32 | A | RO | 32-bitowe wyrównanie do parzystej pozycji. |
| 0104–0105 / 0x0068–0x0069 | Obecny poziom L2 | FLOAT32 | A | RO | — |
| 0106–0107 / 0x006A–0x006B | Obecny poziom L3 | FLOAT32 | A | RO | — |
| 0108–0109 / 0x006C–0x006D | Napięcie L1-N | FLOAT32 | V | RO | — |
| 0110–0111 / 0x006E–0x006F | Napięcie L2-N | FLOAT32 | V | RO | — |
| 0112–0113 / 0x0070–0x0071 | Napięcie L3-N | FLOAT32 | V | RO | — |
| 0114–0115 / 0x0072–0x0073 | Kąt fazowy L1 | FLOAT32 | ° | RO | Kąt fazowy względem L1-N. |
| 0116–0117 / 0x0074–0x0075 | Kąt fazowy L2 | FLOAT32 | ° | RO | Kąt fazowy względem L1-N. |
| 0118–0119 / 0x0076–0x0077 | Kąt fazowy L3 | FLOAT32 | ° | RO | Kąt fazowy względem L1-N. |
| 0120–0121 / 0x0078–0x0079 | Moc czynna L1 | FLOAT32 | W | RO | — |
| 0122–0123 / 0x007A–0x007B | Moc czynna L2 | FLOAT32 | W | RO | — |
| 0124–0125 / 0x007C–0x007D | Moc czynna L3 | FLOAT32 | W | RO | — |
| 0126–0127 / 0x007E–0x007F | Moc czynna ogółem | FLOAT32 | W | RO | — |
| 0128–0129 / 0x0080–0x0081 | Energia sesji | FLOAT32 | kWh | RO | Bieżąca sesja. |
| 0130–0133 / 0x0082–0x0085 | Energia na całe życie | UINT64 | Co | RO | Energia skumulowana. 64-bitowa, 4 rejestry. |
| 0134–0135 / 0x0086–0x0087 | Prąd rezerwowy | FLOAT32 | A | RO | Prąd rezerwowy ustawiany za pomocą NexBlue lub w chmurze. |
| 0136–0137 / 0x0088–0x0089 | Maksymalny prąd ładowania | FLOAT32 | A | RO | Maksymalny prąd ładowania ustawia się za pomocą NexBlue lub w chmurze. |
| 0138 / 0x008A | Ładowanie fazowe | UINT16 | — | RO |
|
| 0137–0399 / 0x0088–0x018F | Zarezerwowane | — | — | — | Przeznaczone do pomiaru napięcia, współczynnika mocy, częstotliwości, mocy na fazę itp. |
2.4.5 Sterowanie i bezpieczeństwo (stan aktywny, odczyt 0x03 / zapis 0x06 lub 0x10)
| Adres | Nazwa | Typ | Jednostka | Dostęp | Opis |
|---|---|---|---|---|---|
| 1000–1001 / 0x03E8–0x03E9 | Ograniczenie prądu | FLOAT32 | A | RW | Ograniczenie prądu na poziomie stacji. Wartość domyślna: 16 A. Zakres: 0–32 A. |
| 1002–1003 / 0x03EA–0x03EB | Limit awaryjny | FLOAT32 | A | RW | Prąd odłączania awaryjnego można ustawić wyłącznie w zakresie 0–16. Wartości poniżej 6 są traktowane jako 0. |
| 1004–1005 / 0x03EC–0x03ED | Limit czasu rezerwy | UINT32 | s | RW | Próg limitu czasu dla sygnału pulsacyjnego. Wartość domyślna: 5 minut. Minimum: 30 sekund. Maksimum: 30 minut. |
| 1006 / 0x03EE | IF_START | UINT16 | — | RW |
Wartości:
Ograniczenia dotyczące uprawnień:
|
| 1007 / 0x03EF | Tryb fazy wykonania | UINT16 | — | RW |
Wartości:
Ograniczenia dotyczące przełączania:
|
| 1008–1999 | Zarezerwowane | — | — | — | Zarezerwowane dla rozszerzeń. |
2.4.6 Alarmy i błędy (błąd / ostrzeżenie)
| Adres | Nazwa | Typ | Jednostka | Dostęp | Opis |
|---|---|---|---|---|---|
| 0400 / 0x0190 | Zestaw bitów błędów | UINT16 | — | RO |
|
| 0401 / 0x0191 | Zestaw bitów ostrzegawczych | UINT16 | — | RO |
|
| 0402 / 0x0192 | Zestaw bitów oczekiwania | UINT16 | — | RO |
|
Załącznik
Kody funkcji
Kod funkcji w protokole Modbus wskazuje, jaką operację urządzenie nadrzędne chce wykonać na urządzeniu podrzędnym. Każda ramka zawiera 1-bajtowy kod funkcji.
| Hex | Znaczenie | Cel |
|---|---|---|
| 0x01 | Odczyt cewek | Wyjścia bitowe |
| 0x02 | Odczyt wejść dyskretnych | Wejścia bitowe |
| 0x03 | Odczyt rejestrów przechowywania | 16-bitowy |
| 0x04 | Odczyt rejestrów wejściowych | 16-bitowy |
| 0x05 | Napisz „Single Coil” | Bit |
| 0x06 | Zapis do rejestru pojedynczego przytrzymania | 16-bitowy |
| 0x0F | Zapisz wiele cewek | Bit |
| 0x10 | Zapis do wielu rejestrów buforowych | 16-bitowy |
Podsumowanie typów danych stosowanych w protokole Modbus
| Typ danych | Wykorzystane rejestry | Szerokość bitowa | Typ C | Znaczenie i zastosowanie | Typowe przykłady |
|---|---|---|---|---|---|
| UINT16 | 1 | 16-bitowy | uint16_t | Liczba całkowita bez znaku | Kody stanu, wyliczenia, liczniki, liczba złączy. |
| INT16 | 1 | 16-bitowy | int16_t | Liczba całkowita ze znakiem | Temperatura, wartości przesunięcia, strefa czasowa. |
| UINT32 | 2 | 32-bitowy | uint32_t | Niepodpisana liczba całkowita typu long | Znaczniki czasu, pomiary zużycia energii, liczniki sekund. |
| INT32 | 2 | 32-bitowy | int32_t | Liczba całkowita typu signed long | Moc, wartości kierunkowe. |
| FLOAT32 | 2 | 32-bitowy | float | Liczba zmiennoprzecinkowa o pojedynczej precyzji, standard IEEE 754. | Prąd, napięcie, moc, energia itp. |
| UINT64 | 4 | 64-bitowy | uint64_t | Bardzo duża liczba całkowita | Energia ogółem, pomiar skumulowany. |
| STRING[n] | n/2 | n × 8 bitów | char[] | Informacje tekstowe | Marka, model, numer seryjny, numer wersji. |