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
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 tabeli Modbus | UINT16 | — | RO | Numer wersji mapowania, na przykład 0x0100. |
| 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 | - 0: Dostępne
- 1: Przygotowanie
- 2: Ładowanie
- 3: Zawieszone EVSE
- 4: ZawieszoneEV
- 5: Wykończenie
- 6: Zarezerwowane
- 7: Niedostępne
- 8: Uszkodzony
|
| 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 | - 0: Adaptacyjne
- 1: Tryb jednofazowy
- 2: Zasilanie trójfazowe
|
| 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)
Uwagi: W przypadku przerwy w zasilaniu sieciowym ładowarki urządzenie automatycznie przywróci wartości domyślne i konieczne będzie ponowne wprowadzenie ustawień.
| 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 | - Sterowanie uruchamianiem/zatrzymywaniem
- 0: STOP
- 1: START
|
| 1007 / 0x03EF | Tryb fazy wykonania | UINT16 | — | RW | Wartości: - 0: Adaptacyjne
- 1: Tryb jednofazowy
- 2: Zasilanie trójfazowe
Ograniczenia dotyczące przełączania: - Zalecany minimalny odstęp czasowy między zmianami faz: 10 minut
- Maksymalnie 2 przełączenia faz w dowolnym okresie 1 godziny
- Maksymalnie 6 przełączeń fazowych podczas jednej sesji ładowania
|
| 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 | - Bit 0: Nieprawidłowe napięcie CP
- Bit 1: upływ prądu w linii fazowej
- Bit 2: nieprawidłowy prąd / nadprąd
- Bit 3: nieprawidłowe napięcie / przepięcie lub zbyt niskie napięcie
- Bit 4: nieprawidłowa temperatura / zbyt wysoka lub zbyt niska
- Bit 5: zablokowany przekaźnik
- Bit 6: Nieudany autotest wyłącznika różnicowoprądowego (RCD)
- Bit 7: Zwarcie diody CP
- Bit 8: PEN otwarty
- Bit9: Wyciek pamięci PE
- Bit10: Otwarcie sesji PE
- Bit11: Nieprawidłowość PP
- Bity 12–15: zarezerwowane
|
| 0401 / 0x0191 | Zestaw bitów ostrzegawczych | UINT16 | — | RO | - Bit 0: nieprawidłowe działanie układu pomiarowego
- Bit 1: nieprawidłowa komunikacja między płytkami
- Bit 2: Nieprawidłowości w sygnale RF RFID
- Bit 3: nieprawidłowa częstotliwość radiowa 868
- Bit 4: Nieprawidłowe działanie modułu 4G
- Bit 5: nieprawidłowe otwarcie pokrywy
- Bit 6: zarezerwowany
- Bit 7: Nieprawidłowa utrata fazy w systemie TN
- Bit 8: neutralny prąd nadmierny w układzie IT
- Bit9: nieprawidłowości w sieci
- Bit10: Tryb MID
- Bity 11–15: zarezerwowane
|
| 0402 / 0x0192 | Zestaw bitów oczekiwania | UINT16 | — | RO | - Bit 0: tryb awaryjny z powodu braku połączenia z CT
- Bit 1: tryb awaryjny z powodu braku połączenia z jednostką główną
- Bit2: wstrzymane z powodu błędu o niskim poziomie ważności / prąd profilu ładowania wynosi 0 zgodnie z OCPP
- Bit3: regulator zmniejsza natężenie prądu w trakcie ładowania
- Bit 4: wysłano pierwsze żądanie, ale host nie odpowiedział
- Bit 5: aktywna ochrona przed wyłączeniami awaryjnymi
- Bit 6: tryb awaryjny uruchomiony przez Modbus
- Bity 6–15: zarezerwowane
|
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. |