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 po włączeniu zasilania urządzenie automatycznie wysyła żądanie uzyskania adresu IP do serwera DHCP. Po pomyślnym uzyskaniu adresu urządzenie rozgłasza swoje informacje za pośrednictwem protokołu mDNS. Nazwa usługi rozgłaszanej brzmi:
_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 oraz 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 | Kolejność bajtów w przypadku pojedynczego rejestru to Big-Endian. Dane dotyczące wielu rejestrów wykorzystują kolejność słów Little-Endian DCBA. |
| 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. |