Documentación de NexBlue
1. Canal de comunicación
- Tipo de canal: TCP/IP
- Interfaz física: conexión mediante cable Ethernet RJ45 / conexión Wi-Fi
2. Comunicación TCP/IP
2.1 Configuración de la red
- Modo de red: obtención dinámica de direcciones IP mediante DHCP
- Modo de reserva: dirección IP estática configurada en la aplicación
En modo DHCP, tras el encendido, el dispositivo solicita automáticamente una dirección IP al servidor DHCP. Una vez obtenida la dirección, el dispositivo difunde su información a través de mDNS. El nombre del servicio de difusión es:
_nexblue_modbus._tcp.local
Los sistemas EMS compatibles con mDNS, como Home Assistant y Tibber, pueden detectarlo automáticamente.
2.2 Puerto de comunicación
- Puerto Modbus TCP: 502
2.3 Identificador de la unidad
- Valor por defecto: 200
- Rango configurable: 1–247
En Modbus TCP, el ID de unidad es un identificador lógico que se mantiene para garantizar la compatibilidad con RTU. Utiliza el mismo parámetro de configuración que la dirección de esclavo empleada en el modo RTU.
2.4 Definiciones de los registros
2.4.1 Tipos de registros
| Tipo de registro | Función | Código de función | Descripción |
|---|---|---|---|
| Registros de entrada | Leer registros de entrada | 0x04 | Registros de solo lectura que proporcionan mediciones o información de estado, como tensión, corriente, potencia, temperatura, energía acumulada, etc. |
| Registros de tenencia | Leer los registros de retención | 0x03 | Registros de lectura/escritura. El maestro puede leer la configuración actual, los límites actuales, el estado del modo, etc. |
| Registros de tenencia | Escribir en el registro de retención único | 0x06 | El maestro introduce un único parámetro de configuración o comando, como el ajuste de la corriente máxima o el inicio o la interrupción de la carga. |
| Registros de tenencia | Escribir en varios registros de retención | 0x10 | El maestro escribe varios registros consecutivos a la vez, lo que se utiliza para actualizaciones por lotes de la configuración o de grupos de parámetros estructurados. |
Estos cuatro son los códigos de función fundamentales reconocidos por las normas IEC 61131-3, EN 61107 y la especificación Modbus de la ISO, y son compatibles de forma predeterminada con casi todos los dispositivos maestros, PLC y sistemas EMS.
2.4.2 Planificación de direcciones de registro (mapa de direcciones)
| Principio | Descripción |
|---|---|
| Longitud | El campo de dirección de una trama Modbus es un entero sin signo de 16 bits. |
| División por capas | División por función: Identificación → A nivel de estación → Por conector. Mantén la lógica clara y fácil de ampliar. |
| Punto de partida común | Todos los registros utilizan direcciones lógicas. El direccionamiento lógico suele comenzar en 0. El documento muestra tanto el formato decimal como el hexadecimal. |
| Regla de alineación | Los datos de 32 bits deben comenzar en una dirección par para evitar cruzar los límites de los registros. |
| Espacio reservado para la ampliación | Cada área deja espacios libres para que en futuras versiones se puedan añadir campos sin afectar a la compatibilidad. |
| Codificación de caracteres | Cada registro tiene una longitud de 2 bytes. Las cadenas tienen una longitud fija y no se rellenan con 0x00 en los bytes no utilizados. |
| Orden de bytes/palabras | El orden de los bytes en un solo registro es «Big-Endian». Los datos de varios registros utilizan el orden de palabras «Little-Endian» DCBA. |
| Métodos de acceso | La entrada utiliza el código 0x04. Los registros de retención se leen con el código 0x03 y se escriben con el código 0x06 (una vez) o 0x10 (varias veces). |
2.4.3 Identificación, versión y hora (datos de entrada, 0x04)
| Dirección | Nombre | Tipo | Unidad | Acceso | Descripción |
|---|---|---|---|---|---|
| 0000–0007 / 0x0000–0x0007 | Marca | STRING(16) | — | RO | 2 bytes por registro, UTF-8/ASCII. |
| 0008–0015 / 0x0008–0x000F | Modelo | STRING(16) | — | RO | Modelo del dispositivo. |
| 0016–0027 / 0x0010–0x001B | Número de serie | STRING(24) | — | RO | Número de serie del dispositivo. |
| 0028–0035 / 0x001C–0x0023 | Versión del firmware | STRING(16) | — | RO | Por ejemplo: 04.00.19. |
| 0036 / 0x0024 | Versión de la asignación Modbus | UINT16 | — | RO |
El byte superior representa la versión principal, y el byte inferior representa la versión secundaria. Ejemplos: 0x0100 = versión 1.0; 0x0102 = versión 1.2. |
| 0037 / 0x0025 | Número de conectores | UINT16 | — | RO | Número de conectores: 1 o 2. |
| 0038–0039 / 0x0026–0x0027 | Fecha | UINT32 | AAAAMMDD | RO | Alineación par de 32 bits. Ejemplo: 20251202. |
| 0040–0041 / 0x0028–0x0029 | Hora | UINT32 | HHMMSS | RO | Ejemplo: 155630 significa las 15:56:30. |
| 0042 / 0x002A | Zona horaria | UINT16 | minutos | RO | Ejemplo: UTC+2 → +120. |
| 0044 | Versión de hardware | STRING(16) | — | RO | Versión de hardware. |
| 0043–0099 | Reservado | — | — | — | Reservado para identificación futura, certificados, información de fabricación, etc. |
2.4.4 Estado y medición en tiempo real (Entrada, 0x04)
| Dirección | Nombre | Tipo | Unidad | Acceso | Descripción |
|---|---|---|---|---|---|
| 0100 / 0x0064 | Estado de Chargepoint | UINT16 | — | RO |
|
| 0102–0103 / 0x0066–0x0067 | Nivel 1 actual | FLOAT32 | A | RO | Alineación par de 32 bits. |
| 0104–0105 / 0x0068–0x0069 | Nivel 2 actual | FLOAT32 | A | RO | — |
| 0106–0107 / 0x006A–0x006B | Nivel 3 actual | FLOAT32 | A | RO | — |
| 0108–0109 / 0x006C–0x006D | Tensión L1-N | FLOAT32 | V | RO | — |
| 0110–0111 / 0x006E–0x006F | Tensión L2-N | FLOAT32 | V | RO | — |
| 0112–0113 / 0x0070–0x0071 | Tensión L3-N | FLOAT32 | V | RO | — |
| 0114–0115 / 0x0072–0x0073 | Ángulo de fase L1 | FLOAT32 | ° | RO | Ángulo de fase con respecto a L1-N. |
| 0116–0117 / 0x0074–0x0075 | Ángulo de fase L2 | FLOAT32 | ° | RO | Ángulo de fase con respecto a L1-N. |
| 0118–0119 / 0x0076–0x0077 | Ángulo de fase L3 | FLOAT32 | ° | RO | Ángulo de fase con respecto a L1-N. |
| 0120–0121 / 0x0078–0x0079 | Potencia activa L1 | FLOAT32 | W | RO | — |
| 0122–0123 / 0x007A–0x007B | Potencia activa L2 | FLOAT32 | W | RO | — |
| 0124–0125 / 0x007C–0x007D | Potencia activa L3 | FLOAT32 | W | RO | — |
| 0126–0127 / 0x007E–0x007F | Potencia activa total | FLOAT32 | W | RO | — |
| 0128–0129 / 0x0080–0x0081 | Energía de sesión | FLOAT32 | kWh | RO | Sesión actual. |
| 0130–0133 / 0x0082–0x0085 | Energía de por vida | UINT64 | ¿Qué | RO | Energía acumulada. 64 bits, 4 registros. |
| 0134–0135 / 0x0086–0x0087 | Corriente de reserva | FLOAT32 | A | RO | Corriente de reserva configurada a través de NexBlue o la nube. |
| 0136–0137 / 0x0088–0x0089 | Corriente máxima de carga | FLOAT32 | A | RO | La corriente máxima de carga se configura a través de NexBlue o de la nube. |
| 0138 / 0x008A | Carga por fases | UINT16 | — | RO |
|
| 0137–0399 / 0x0088–0x018F | Reservado | — | — | — | Reservado para tensión, factor de potencia, frecuencia, potencia por fase, etc. |
2.4.5 Control y seguridad (Holding, lectura 0x03 / escritura 0x06 o 0x10)
| Dirección | Nombre | Tipo | Unidad | Acceso | Descripción |
|---|---|---|---|---|---|
| 1000–1001 / 0x03E8–0x03E9 | Límite de corriente | FLOAT32 | A | RW | Límite de corriente a nivel de estación. Valor predeterminado: 16 A. Rango: 0–32 A. |
| 1002–1003 / 0x03EA–0x03EB | Límite de reserva | FLOAT32 | A | RW | La corriente de desconexión de seguridad solo se puede ajustar entre 0 y 16. Los valores inferiores a 6 se consideran 0. |
| 1004–1005 / 0x03EC–0x03ED | Tiempo de espera de reserva | UINT32 | s | RW | Umbral de tiempo de espera de Heartbeat. Por defecto: 5 minutos. Mínimo: 30 segundos. Máximo: 30 minutos. |
| 1006 / 0x03EE | IF_START | UINT16 | — | RW | Valores:
Restricciones de autorización:
|
| 1007 / 0x03EF | Modo de fase de ejecución | UINT16 | — | RW | Valores:
Restricciones de conmutación:
|
| 1008-1999 | Reservado | — | — | — | Reservado para extensiones. |
2.4.6 Alarmas y errores (Error / Advertencia)
| Dirección | Nombre | Tipo | Unidad | Acceso | Descripción |
|---|---|---|---|---|---|
| 0400 / 0x0190 | Conjunto de bits de error | UINT16 | — | RO |
|
| 0401 / 0x0191 | Conjunto de bits de advertencia | UINT16 | — | RO |
|
| 0402 / 0x0192 | Conjunto de bits en espera | UINT16 | — | RO |
|
Apéndice
Códigos de función
Un código de función en Modbus indica qué operación quiere realizar el maestro sobre el esclavo. Cada trama incluye un código de función de 1 byte.
| Hex | Significado | Objetivo |
|---|---|---|
| 0x01 | Bobinas de lectura | Salidas de bits |
| 0x02 | Leer entradas discretas | Entradas de bits |
| 0x03 | Leer los registros de tenencia | de 16 bits |
| 0x04 | Leer registros de entrada | de 16 bits |
| 0x05 | Escribir «Single Coil» | Bit |
| 0x06 | Escribir en el registro de tenencia única | de 16 bits |
| 0x0F | Escribir varias bobinas | Bit |
| 0x10 | Escribir en varios registros de retención | de 16 bits |
Resumen de los tipos de datos habituales de Modbus
| Tipo de datos | Registros utilizados | Ancho en bits | Tipo C | Significado y uso | Ejemplos típicos |
|---|---|---|---|---|---|
| UINT16 | 1 | de 16 bits | uint16_t | Entero sin signo | Códigos de estado, enumeraciones, contadores, número de conectores. |
| INT16 | 1 | de 16 bits | int16_t | Entero con signo | Temperatura, compensaciones, zona horaria. |
| UINT32 | 2 | de 32 bits | uint32_t | Entero largo sin signo | Marcas de tiempo, medición de energía, contadores de segundos. |
| INT32 | 2 | de 32 bits | int32_t | Entero largo con signo | Potencia, valores direccionales. |
| FLOAT32 | 2 | de 32 bits | flotar | Número flotante de precisión simple, IEEE 754. | Corriente, tensión, potencia, energía, etc. |
| UINT64 | 4 | 64 bits | uint64_t | Número entero muy grande | Energía total, medición acumulada. |
| STRING[n] | n/2 | n × 8 bits | char[] | Información del texto | Marca, modelo, número de serie, número de versión. |