TapHome

SolaX Hybrid X1/X3 Gen 4

Modbus RTU
Inviato da
Ultimo aggiornamento: 03. 2026
SolaX Hybrid X1/X3 Gen 4

I SolaX X1-HYBRID e X3-HYBRID Gen 4 sono inverter ad accumulo di energia che supportano configurazioni sia monofase (3–7,5 kW) che trifase (5–15 kW). Il template TapHome comunica tramite Modbus RTU su RS-485, leggendo registri di ingresso e holding per lo stato di carica della batteria, la potenza del string FV, il flusso di potenza dalla rete, i totali di energia, la modalità di ricarica e il SOC della carica notturna. Tutti gli script di scrittura sono commentati, rendendo il template di fatto in sola lettura.

Il template implementa inoltre un rilevamento completo dei guasti analizzando i codici di errore a 32 bit dell’inverter e i codici di errore a 16 bit del gestore, segnalando i singoli guasti come errori in TapHome.

Collegamento hardware

L’inverter SolaX Gen 4 fornisce una porta COM RS-485 per la comunicazione Modbus RTU sul pannello inferiore. La porta COM utilizza un connettore RJ45.

Pannello inferiore SolaX X3-HYBRID G4 — layout dei terminali con connessioni COM, BMS, Meter/CT, PV, BAT e GRID

Assegnazione dei pin del terminale COM (RJ45):

PinAssegnazioneDescrizione
1Drycontact_A(in)Connessione interruttore di sistema
2Drycontact_B(in)Connessione interruttore di sistema
3+13V
4485ARS-485 data+ (per TapHome)
5485BRS-485 data− (per TapHome)
6GNDMassa
7Drycontact_A(out)Connessione generatore
8Drycontact_B(out)Connessione generatore

Collegare TapHome alla porta COM dell’inverter:

  • Pin 4 (485A) sulla porta COM dell’inverter a A+/D+ su RS-485 TapHome
  • Pin 5 (485B) sulla porta COM dell’inverter a B-/D- su RS-485 TapHome
  • Pin 6 (GND) — raccomandato per una comunicazione affidabile

L’inverter stesso non supporta nativamente Modbus TCP. Modbus TCP è disponibile solo tramite il modulo di monitoraggio SolaX (dongle Wi-Fi) e non viene utilizzato dal template TapHome.

Per installazioni in cui il cablaggio RS-485 non è pratico, il template SolaX Inverter (Cloud API) fornisce monitoraggio attraverso la piattaforma SolaxCloud via HTTPS — senza connessione fisica. Supporta tutti i tipi di inverter SolaX, non solo il Gen 4 Hybrid.

Alcuni registri holding sono contrassegnati con cicli di scrittura EEprom limitati. Le operazioni di scrittura eccessive possono causare danni hardware irreversibili. Il template TapHome ha tutti gli script di scrittura disabilitati, quindi non è un problema con il template attuale.

Configurazione

Abilitazione della comunicazione Modbus

Modbus RTU è disponibile di default sulla porta COM RS-485 dell’inverter. I seguenti parametri devono corrispondere tra l’inverter e il modulo TapHome:

  1. Slave ID – predefinito 1, configurabile sul display dell’inverter
  2. Baud rate – l’inverter usa per default 19200 baud, ma il template TapHome usa 9600 baud. Modificare uno dei due per farli corrispondere
  3. Formato dati – 8 bit dati, nessuna parità, 1 stop bit

Configurazione sul display dell’inverter: Menu > Setting > Advance Setting > Modbus. Impostare l’indirizzo slave e il baud rate. Il baud rate può essere letto anche dal registro holding H:0x00B0 e scritto tramite il registro 0x00CA (valori: 0=115200, 1=57600, 2=56000, 3=38400, 4=19200, 5=14400, 6=9600).

Per evitare di modificare le impostazioni dell’inverter, regolare il baud rate nelle impostazioni del modulo TapHome a 19200 per corrispondere al valore predefinito dell’inverter.

Temporizzazione della comunicazione

Il protocollo richiede un intervallo minimo di 1 secondo tra le istruzioni Modbus consecutive e un timeout di gap tra caratteri di almeno 100 ms. Il timeout di risposta è 1 secondo. Il template TapHome utilizza intervalli di polling individuali per dispositivo (da 2,5 s a 150 s) che soddisfano questi requisiti.

Funzione della porta COM RS-485

Il registro H:0x013E (485CommFunSelect) determina se la porta RS-485 viene utilizzata per la comunicazione Modbus (valore 0) o per la comunicazione del caricabatterie EV (valore 1). Assicurarsi che sia impostato su 0 (Modbus 485) per l’integrazione TapHome.

Funzionalità del dispositivo

Monitoraggio della batteria
  • Battery SOC – legge lo stato di carica della batteria (A:0x1C) come percentuale. Il valore grezzo del registro in unità dell'1% viene diviso per 100 per l’intervallo di ingresso analogico TapHome 0–1 (es. 85% diventa 0,85)
  • Battery Temperature – legge la temperatura della batteria (A:0x18) in gradi Celsius. Polling ogni 80 secondi
Potenza FV solare
  • PV1 Power – potenza DC di uscita dallo string FV 1 (A:0x0A), visualizzata in kW dopo la conversione /1000 da watt
  • PV2 Power – potenza DC di uscita dallo string FV 2 (A:0x0B), visualizzata in kW dopo la conversione /1000 da watt
Potenza di rete e misurazione dell’energia
  • Grid Feed-in Power – potenza di rete istantanea (A:0x46, LittleEndianInt32) in kW. I valori positivi indicano l’esportazione in rete, i valori negativi indicano il consumo dalla rete
  • Daily / Actual Energy – combina l’energia giornaliera prodotta dalla porta AC dell’inverter (A:0x50, risoluzione 0,1 kWh) e la potenza di rete in tempo reale (A:0x02) in kW. Il registro della potenza di rete è specifico per X1 (monofase)
  • Total Energy – energia cumulativa totale prodotta dalla porta AC dell’inverter (A:0x52, LittleEndianInt32), visualizzata in MWh
Modalità di ricarica e carica notturna
  • Charger Use Mode – legge la modalità del caricabatterie solare attiva (H:0x8B): Self Use Mode (0), Feedin Priority (1), Backup Mode (2) o Manual Mode (3). I valori 4–9 sono riservati. Il registro di scrittura (H:0x1F) esiste nel template ma è commentato, rendendolo in sola lettura
  • Self-Use Night Charge SOC – legge il target SOC superiore per la carica notturna in modalità Self-Use (H:0x94) come percentuale. Il registro di scrittura (H:0x63) e il registro di abilitazione (H:0x62) sono entrambi commentati, quindi la configurazione della carica notturna non può essere modificata tramite TapHome
Rilevamento guasti

Lo ReadScript a livello di modulo monitora la modalità di esecuzione dell’inverter (A:0x09) e due registri di errore:

  • Run Mode guasti – attiva un errore quando Run Mode è 3 (Guasto) o 4 (Guasto Permanente)
  • Codici di errore dell’inverter (A:0x40) – bitmap a 32 bit analizzata per 28 guasti individuali inclusi guasti di tensione/frequenza della rete, guasti di tensione FV, guasti della batteria, guasti di isolamento, sovratemperatura, protezione da sovracorrente, guasti dei relè ed errori di comunicazione
  • Codici di errore del gestore (A:0x43) – bitmap a 16 bit analizzata per guasti di tipo di potenza, errori EEPROM, problemi di sensori NTC, avvertimenti di temperatura della batteria, guasti del contatore e guasti della ventola

L’attributo di servizio Run Mode sul modulo visualizza lo stato corrente dell’inverter come testo: Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle o Standby.

Funzionalità aggiuntive

L’inverter espone una mappa di registri completa con oltre 300 registri holding e 200 registri di ingresso. Le funzionalità notevoli non ancora implementate nel template includono il monitoraggio di tensione e corrente per ogni string FV (A:0x03–0x06), letture di tensione/corrente/potenza della batteria, stato di connessione BMS, stato rete on/off, X3 tensione/corrente/potenza di rete per fase (12 registri a A:0x6A–0x75), energia cumulativa immessa e consumata dalla rete (tramite contatore), produzione totale di energia solare, SOC e SOH utente BMS, e temperatura e tensione minima/massima delle celle della batteria. Le funzionalità di scrittura includono il controllo accensione/spegnimento del sistema, selezione della modalità di ricarica, forza manuale di carica/scarica, SOC minimo di scarica, configurazione della carica notturna e controllo remoto della potenza con target di potenza attiva/reattiva. Questi possono essere aggiunti in un futuro aggiornamento del template.

Il template legge attualmente la potenza di rete X1 (monofase) in A:0x02. Per installazioni X3 (trifase), la potenza di rete per fase è disponibile nei registri A:0x6C, A:0x70 e A:0x74 ma non è inclusa nel template attuale.

Risoluzione dei problemi

Nessuna comunicazione con l’inverter
  1. Verificare i collegamenti del cavo RS-485: A+ ad A+, B- a B-, GND a GND
  2. Controllare che il registro H:0x013E sia impostato a 0 (modalità Modbus 485, non EV Charger)
  3. Confermare che il baud rate corrisponda tra inverter e TapHome – l’inverter ha come default 19200 mentre il template ha come default 9600
  4. Verificare che lo Slave ID in TapHome corrisponda all’impostazione dell’inverter (default: 1)
  5. Assicurarsi che nessun altro master Modbus sia collegato allo stesso bus RS-485 – Modbus supporta solo un singolo master
Lettura Battery SOC errata

Il registro Battery SOC (A:0x1C) riporta valori in unità dell'1%. Il template divide per 100 per l’intervallo di ingresso analogico TapHome 0–1. Se il valore visualizzato sembra errato, verificare che il dispositivo TapHome sia configurato come AnalogInput (intervallo 0–1, non 0–100).

Convenzione dei segni della potenza di rete

Grid Feed-in Power (A:0x46) utilizza una convenzione dei segni in cui i valori positivi significano esportazione (generazione/immissione in rete) e i valori negativi significano importazione (consumo dalla rete). Il registro della potenza di rete Daily/Actual Energy (A:0x02) può anche mostrare valori negativi durante il consumo dalla rete.

Differenze tra registri X1 e X3

Alcuni registri sono specifici del modello. Tensione di rete (A:0x00), corrente (A:0x01) e potenza (A:0x02) sono registri X1 monofase. Per i modelli X3 trifase, le corrispondenti letture per fase si trovano in A:0x6A–0x75. Il template utilizza il registro di potenza di rete X1, che potrebbe non riportare correttamente sui modelli X3.

Dispositivi disponibili

SolaX Hybrid Gen 4 Modulo
Attributi di servizio
Modalità operativaStato operativo dell'inverter — Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby

SOLAX Hybrid Gen 4

Lettura (modulo)
var reg := MODBUSR(A, 0x09, UInt16);
IF(reg = 3, ADDERROR("Run Mode Fault"));
IF(reg = 4, ADDERROR("Run Mode Permanent Fault"));
#error table  2-3 for x3
var x3 := MODBUSR(A, 0x0040, Uint32);
IF(GETBIT(x3, 0) = 1, ADDERROR("TZ Protect Fault"));
IF(GETBIT(x3, 1) = 1, ADDERROR("Grid Lost Fault"));
IF(GETBIT(x3, 2) = 1, ADDERROR("Grid Volt Fault"));
IF(GETBIT(x3, 3) = 1, ADDERROR("Grid Freq Fault"));
IF(GETBIT(x3, 4) = 1, ADDERROR("PV Volt Fault"));
IF(GETBIT(x3, 5) = 1, ADDERROR("Bus Volt Fault"));
IF(GETBIT(x3, 6) = 1, ADDERROR("Bat Volt Fault"));
IF(GETBIT(x3, 7) = 1, ADDERROR("AC10mins Volt Fault"));
IF(GETBIT(x3, 8) = 1, ADDERROR("DCI OCP Fault"));
IF(GETBIT(x3, 9) = 1, ADDERROR("DCV OCP Fault"));
IF(GETBIT(x3, 10) = 1, ADDERROR("SW OCP Fault"));
IF(GETBIT(x3, 11) = 1, ADDERROR("RC OCP Fault"));
IF(GETBIT(x3, 12) = 1, ADDERROR("Isolation Fault"));
IF(GETBIT(x3, 13) = 1, ADDERROR("Temp Over Fault"));
IF(GETBIT(x3, 14) = 1, ADDERROR("BatConnDir Fault"));
IF(GETBIT(x3, 15) = 1, ADDERROR("Off-grid Overload"));
IF(GETBIT(x3, 16) = 1, ADDERROR("Overload"));
IF(GETBIT(x3, 17) = 1, ADDERROR("Bat Power Low"));
IF(GETBIT(x3, 18) = 1, ADDERROR("BMS Lost"));
IF(GETBIT(x3, 19) = 1, ADDERROR("Fan Fault"));
IF(GETBIT(x3, 20) = 1, ADDERROR("Low Temp Fault"));
IF(GETBIT(x3, 23) = 1, ADDERROR("INV Volt Sample Fault"));
IF(GETBIT(x3, 24) = 1, ADDERROR("Inner Comm Fault"));
IF(GETBIT(x3, 25) = 1, ADDERROR("INV EEPROM Fault"));
IF(GETBIT(x3, 26) = 1, ADDERROR("RCD Fault"));
IF(GETBIT(x3, 27) = 1, ADDERROR("Grid Relay Fault"));
IF(GETBIT(x3, 28) = 1, ADDERROR("Off-grid Relay Fault"));
IF(GETBIT(x3, 29) = 1, ADDERROR("PV ConnDir Fault"));
IF(GETBIT(x3, 30) = 1, ADDERROR("Charger Relay Fault"));
IF(GETBIT(x3, 31) = 1, ADDERROR("Earth Relay Fault"));

#error 2-5 Manager error code
var err := MODBUSR(A, 0x0043, Uint16);
IF(GETBIT(err, 0) = 1, ADDERROR("Power Type Fault"));
IF(GETBIT(err, 1) = 1, ADDERROR("Port OC Warning"));
IF(GETBIT(err, 2) = 1, ADDERROR("Mgr EEPROM Fault"));
IF(GETBIT(err, 4) = 1, ADDERROR("NTC Sample Invalid"));
IF(GETBIT(err, 5) = 1, ADDERROR("Battery Temperature Low"));
IF(GETBIT(err, 6) = 1, ADDERROR("Battery Temperature High"));
IF(GETBIT(err, 9) = 1, ADDERROR("Meter Fault"));
IF(GETBIT(err, 10) = 1, ADDERROR("Bypass Relay Fault"));
IF(GETBIT(err, 11) = 1, ADDERROR("Fan 2 Fault"));
Attributi di servizio
Run Mode
SWITCH(MODBUSR(A, 0x09, UInt16), 
0, "Waiting",
1, "Checking",
2, "Normal",
3, "Fault",
4, "Permanent Fault",
5, "Update",
6, "Off-grid waiting",
7, "Off-grid",
8, "Self Testing ",
9, "Idle",
10, "Standby",
"Other"
);
SOC batteria Ingresso analogico Solo lettura

Stato di carica della batteria in percentuale (0–100%) — visualizzato come ingresso analogico 0–1 in TapHome

Registro: A:0x1C UInt16 Unità: % numeric

SOC batteria

Lettura livello ingresso
MODBUSR(A, 0x1C, UInt16)/100
Temperatura batteria Sensore di temperatura Solo lettura
Registro: A:0x18 UInt16 Unità: °C numeric

Temperatura batteria

Lettura temperatura
MODBUSR(A,0x0018, UInt16)
Energia giornaliera / attuale Contatore elettrico Solo lettura

Combina l'energia giornaliera immessa in rete (kWh) e la potenza di rete in tempo reale (kW) — potenza di rete negativa indica importazione

Registro: A:0x50, A:0x02 UInt16, Int16 Unità: kWh / kW numeric

Energia giornaliera / attuale

Lettura consumo totale
MODBUSR(A, 0x50, UInt16) /10
Lettura domanda
MODBUSR(A,0x02, Int16)/1000
Modalità di ricarica Interruttore multivalore Solo lettura

Modalità del caricabatterie solare attiva — Self Use, Feedin Priority, Backup o Manual (sola lettura)

Registro: H:0x8BH:0x1F UInt16 numeric
Valori / Stati: Self Use Mode · Feedin Priority · Backup Mode · Manual Mode

Modalità di ricarica

Lettura stato interruttore
MODBUSR(H, 0x008B, Uint16)
Scrittura stato interruttore
#MODBUSW(H, 0x001F, uint16, Mu)
Potenza immessa in rete Variabile Solo lettura

Potenza di rete istantanea in kW — valori positivi indicano esportazione, valori negativi indicano importazione

Registro: A:0x46 LittleEndianInt32 Unità: kW numeric

Potenza immessa in rete

Lettura
MODBUSR(A, 0x46,LittleEndianInt32)/1000
Potenza PV1 Variabile Solo lettura
Registro: A:0x0A UInt16 Unità: kW numeric

Potenza PV1

Lettura
MODBUSR(A,0x0a, UInt16)/1000
Potenza PV2 Variabile Solo lettura
Registro: A:0x0B UInt16 Unità: kW numeric

Potenza PV2

Lettura
MODBUSR(A,0x0b, UInt16)/1000
SOC carica notturna (autoconsumo) Dimmer Solo lettura

Target SOC superiore per la carica notturna in modalità autoconsumo (sola lettura, 10–100%)

Registro: H:0x94H:0x63 UInt16 Unità: % numeric

SOC carica notturna (autoconsumo)

Inizializzazione
#MODBUSWNE(H, 0x0062, Uint16, 1);
Lettura livello
MODBUSR(H, 0x0094, Uint16) / 100
Scrittura livello
#MODBUSW(H, 0x0063, Uint16, Le * 100)
Energia totale Variabile Solo lettura

Energia cumulativa totale prodotta dalla porta AC dell'inverter in MWh

Registro: A:0x52 LittleEndianInt32 Unità: MWh numeric

Energia totale

Lettura
MODBUSR(A, 0x52,LittleEndianInt32) / 1000
Connessione: Modbus RTU • 9600 baud• 8N1 • Slave ID: $[SlaveId]
Possibili miglioramenti (25)
  • A:0x00 Grid Voltage (X1) — 0.1V, UInt16. X3 per-phase voltages at A:0x6A/0x6E/0x72
  • A:0x01 Grid Current (X1) — 0.1A, Int16. X3 per-phase currents at A:0x6B/0x6F/0x73
  • A:0x03, A:0x04 PV Voltage 1 & 2 — 0.1V, UInt16. Useful for string-level diagnostics
  • A:0x05, A:0x06 PV Current 1 & 2 — 0.1A, UInt16. Useful for string-level diagnostics
  • A:0x08 Radiator Temperature — 1°C, Int16. Inverter internal radiator/heatsink temperature
  • A:0x14 Battery Voltage — 0.1V, Int16. Battery pack voltage
  • A:0x15 Battery Current — 0.1A, Int16. Positive=charge, negative=discharge
  • A:0x16 Battery Power — 1W, Int16. Positive=charging, negative=discharging
  • A:0x17 BMS Connect State — 0=Disconnected, 1=Connected. Critical for battery health monitoring
  • A:0x1A Grid Status — 0=OnGrid, 1=OffGrid. Important for backup/off-grid scenarios
  • A:0x48–0x49 Feed-in Energy Total (Meter) — 0.01kWh, UInt32 LE. Cumulative energy exported to grid via meter
  • A:0x4A–0x4B Consumed Energy Total (Meter) — 0.01kWh, UInt32 LE. Cumulative energy consumed from grid via meter
  • A:0x6A–0x75 X3 Per-Phase Grid Readings — Voltage/current/power/frequency per phase R/S/T. 12 registers total. Essential for 3-phase monitoring
  • A:0x94–0x95 Solar Energy Total — 0.1kWh, UInt32 LE. Cumulative PV production (both strings combined)
  • A:0x96 Solar Energy Today — 0.1kWh, UInt16. Today PV production
  • A:0xBE BMS User SOC — 1%, UInt16. SOC as reported by BMS (may differ from A:0x1C)
  • A:0xBF BMS User SOH — 1%, UInt16. Battery state of health
  • Write 0x001C System ON/OFF — 0=OFF, 1=ON. Remote system power control
  • Write 0x001F Charger Use Mode (write) — Write register exists in template but is COMMENTED OUT. 0=Self Use, 1=Feed-in, 2=Backup, 3=Manual
  • Write 0x0020 Manual Mode — 0=Stop, 1=Force charge, 2=Force discharge. Requires Charger Use Mode = 3 (Manual)
  • Write 0x0061 SelfUse Discharge Min SOC — 10%–100%. Minimum SOC before discharge stops in Self-Use mode
  • H:0x8C Manual Mode Readback — 0=Stop, 1=Force charge, 2=Force discharge. Readback of current manual mode setting
  • A:0xBA, A:0xBB Battery Temp High/Low — 0.1°C, Int16. Min/max battery cell temperatures
  • A:0xBC, A:0xBD Cell Voltage High/Low — 0.001V, UInt16. Min/max individual cell voltages. Important for battery health
  • Write 0x007C–0x0082 Remote Power Control — Active/reactive power targets, duration. Enables advanced energy management and grid services

Fonti