Modbus
Modbus
Version: 3.32 1
Table of contents
Version: 3.32 2
1 Information on this Document
1.1 Introduction
1.2 Validity
X1-Hybrid-G4
X3-Hybrid-G4
1.3 Abbreviation
Abbr. Explanation
RO Read Only
RW Read and Write
uint8 A byte (8-bit)
uint16 A word (16-bit)
int16 A signed word (16-bit)
uint32 A double word (32-bit)
int32 A signed double word (32-bit)
MSB Most Significant Bit
LSB Least Significant Bit
X1 X1-Hybrid-G4
X3 X3-Hybrid-G4
ADU Application Data Unit
PDU Protocol Data Unit
Version: 3.32 3
2 Protocols Overview
Data bits: 8
Stop Bit: 1
Parity: None
Frame format:
The MODBUS protocol defines a simple protocol data unit (PDU) independent of the
underlying communication layers. The mapping of MODBUS protocol on specific buses or
network can introduce some additional fields on the application data unit (ADU).
Notice:
The slave address of the MODBUS RTU in the Solax Power energy storage system represents the
address of the inverter. The address range is assigned as follows:
0 1–247 248–255
The size of the MODBUS PDU is limited by the size constraint inherited from the first
MODBUS implementation on Serial Line network (max. RS485 ADU = 256 bytes).
Therefore:
MODBUS PDU for serial line communication = 256 - Server address (1 byte) - CRC (2
bytes) = 253 bytes.
Consequently:
RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 bytes.
Version: 3.32 4
2.2 Reading and Writing of Data
A MODBUS register is 16 bits wide. For wider data items, connected MODBUS registers are used
and considered as data blocks. The address of the first MODBUS register in a data block is the start
address of the data block.
With data storage in the Motorola format "Big Endian", data transmission begins with the high byte
and then the low byte of the MODBUS register.
Notice: When use “Write Single Registers” and “Write Multiple Registers” function, some registers will be write
in EEprom if they are changed(these parameters can be saved after power failure). But the EEprom has the write
times limit. Too frequent operation will lead to irreversible hardware damage. Related registers are marked with ★.
If there is any doubt about the use, please contact the technical personnel in time.
Version: 3.32 5
2.2.5 Data Format Description
Version: 3.32 6
Data format (Read Input Register)
2byte
CRC CRC MSB C2
CRC LSB
Version: 3.32 7
Data format (Write Single Register)
2byte
C3
CRC CRC MSB
A1
CRC LSB
Version: 3.32 8
Data format (Write Multiple Register)
Version: 3.32 9
Slave normal response
0x00~0xFF
Slave ID 1 byte 01
(Inverter default 0x01)
Function code 1 byte 0x10 10
2 byte
10
Register address Address MSB 0x0000-0xFFFF
00
Address LSB
2byte
00
Register number Number MSB 0x0001-0x007B
07
Number LSB
2byte
85
CRC CRC MSB
0B
CRC LSB
Slave fault response
0x00~0xFF
Slave ID 1byte 01
(Inverter default 0x01)
Fault code 1byte 0x90 90
2byte
CD
CRC CRC MSB
C1
CRC LSB
Version: 3.32 10
2.3 MODBUS Exception Responses
Only some of the MODBUS exception responses are listed here, for more details please visit the
MODBUS website: [Link]
Version: 3.32 11
3 Use the Inverter via Commands
Funct
ion Address Application
Code
Inverter related configuration data
0x0000~0x01FF
or model feature information
0x03
0x0200~0x0300 Battery characteristic information
0x3098~0x30A9 modbus upgrade result feedback
0x0000~0x017F Inverter real-time data
0x0180~0x0x01DA Italian safety self-test status and result data
0x04
Summary of basic operating information of the inverter
0x01DD~0x02ED
parallel system and slave units
All range except
0x06 Inverter configuration parameters
0xA000-0xA1FF
0x0000~0x007B Generally write multiple parameters
0x10 0x007C~0x008A Vpp power control
0x3000~0x0x30C2 modbus upgrade operation range
Version: 3.32 12
3.2 Get Firmware Info (Function Code: 0x03)
Data
Un Lengt
Register Variable Description form
it h
at
0x0000
Inverter SN Inverter Serial Number - uint16 7
~0x0006
0x007D FirmwareVersion_DSP_Minor DSP_Minor_Software_Ver 1 uint16 1
0x007E HardwareVersion_DSP DSP_Hardware_Version 1 uint16 1
0x007F FirmwareVersion_DSP_Major DSP_Major_Software_Ver 1 uint16 1
0x0080 FirmwareVersion_ARM_Major ARM_Major_Software_Ver 1 uint16 1
0x0082 FirmwareVersion_ModbusRTU Modbus_RTU_Software_Ver 1 uint16 1
0x0083 FirmwareVersion_ARM_Minor ARM_Minor_Software_Ver 1 uint16 1
FirmwareVersion_ARM_Bootload ARM_Bootloader_Software_Ve
0x0084 1 uint16 1
er r
0x00AA
Register SN
~0x00A WiFi Module SN - uint16 1
(external WiFi module)
E
X1: 3000/3680/5000
/6000/7500
0x00BA Inverter Power Type 1w uint16 1
X3: 15K/12K/10k/8K
/6K/5K
0x0105 Machine Type 1:X1 3:X3 - uint16 1
0x0107 Machine Style 0:X-Hybrid 1:X-FIT 1 uint16 1
Example:
Version: 3.32 13
3.2.2 Get Battery Firmware Info
Data
Register Variable description Unit Length
format
Subsystem_Battery
0x0200 Subsystem_Num 1 Uint16 1
Num
x.y
0x0205 BMS_Slave4Version 1 Uint16 1
x = Uint8(Hi)
0x020A~
Master SN Master SN 1 14char 7
0x0210
0x0211~
slave1_2SN slave1_2SN 1 14char 7
0x0217
0x0218~
slave3_4SN slave3_4SN 1 14char 7
0x021E
0x021F~
slave5_6SN slave5_6SN 1 14char 7
0x0225
0x0226~
Slave7_8SN Slave7_8SN 1 14char 7
0x022C
Version: 3.32 14
3.3 Get Inverter Real-Time Info (Function Code: 0x04)
Data
Register Variable Description Unit Length
format
Inverter Inverter Run Mode
0x0009 - uint16 1
Run Mode Description
Inverter
0x0054 0:locked 1:unlocked - uint16 1
Lock State
Version: 3.32 15
3.3.2 Get Inverter-PV Port Info
Data
Register Variable Description Unit Length
format
Version: 3.32 16
3.3.3 Get Inverter-Grid Port Info
Data
Register Variable Description Unit Length
format
0x0000 GridVoltage(X1) On-Grid Voltage 0.1V uint16 1
Version: 3.32 17
3.3.4 Get Inverter-Battery Port Info
Data
Register Variable Description Unit Length
format
0:Disconnected
0x0017 BMS_Connect_State - uint16 1
1:Connected
0: discharge
0x0019 BDCStatus 1: charge - uint16 1
2: stop
0x0026
BMS_BatteryCapacity BMS_BatteryCapacity Wh uint16 1
~0x0027
Version: 3.32 18
3.4 Get Inverter History Data (Function Code: 0x04)
Data
Len
Register Variable Description Unit form
gth
at
Today Energy
0x0050 Etoday_togrid 0.1kWh uint16 1
(Inverter AC Port)
Total Energy
0x0052
Etotal_togrid (Inverter AC Port) 0.1kWh uint32 2
~0x0053
On- (0x52:LSB,0x53:MSB)
Grid EchargeToday
0x0091 EchargeToday 0.1kWh uint16 1
(Inverter AC Port)
EchargeTotal
0x0092
EchargeTotal (Inverter AC Port) 0.1kWh uint32 2
~0x0093
(0x92:LSB,0x93:MSB)
0x008E Off-grid Yield Total
EPS Off-gridYieldTotal 0.1kWh uint32 2
~0x008F (0x8E:LSB,0x8F:MSB)
(Off-
Grid) 0x0090 Off-gridYieldToday Off-grid Yield Today 0.1kWh uint16 1
Version: 3.32 19
3.5 Read or Set Inverter Operating Parameters
Read
Write Data
Registe Len
Register Variable Description Unit forma
r gth
(0x06) t
(0x03)
User Password
0x0039 0x00E0 User Password 1 uint16 1
0000~9999
Advance Password
0x003A 0x00E1 Advance Password 1 uint16 1
0000~9999
0:English 1:German
2: French 3: Polish
4:Spanish 5:Portuguese
0x0047 0x00BB Language 6:Italian 0~9 uint16 1
7:Chinese(Mute)
8: Ukrainian
9: Brazil
Please refer to the Table
0x0000 0x001D Safety Code of Safety code in the 1 uint16 1
detailed documentation.
Version: 3.32 20
3.5.1 Read or Set the Inverter Work Mode Parameters
Write Read
Work Data Len
Register Register Variable Description Unit
Mode format gth
(0x06) (0x03)
0:Self use mode
1: Feedin Priority
2:Back up mode
- 0x001F 0x008B Inverter Work Mode 3:Manual mode 1 uint16 1
4: Peak Shaving
5:TOU Mode
6: Smart Schedule
0x0093 SelfUse_Discharge_
0x0061 10%~100% 1% Uint8(Hi)
(Hi) MinSoC
Whether to allow
electricity 1
SelfUse_NightCharge
0x0062 0x0093(Lo) from the grid 1 Uint8(Lo)
_Enable
0:Disable
Self Use
1:Enable
This value will be
enabled if
SelfUse_NightCharge
0x0063 0x0094 SelfUse_NightCha 1% Uint16 1
_UpperSoC
rge_Enable is 1.
10%~100%
Feedin_NightCharge_
0x0065 0x0095(Hi) 10%~100% 1% uint8(Hi)
Feedin UpperSoC
1
Priority Feedin_Discharge_Mi
0x0064 0x0095(Lo) 10%~100% 1% uint8(Lo)
nSoC
BackUp_Discharge_
0x0067 0x0096(Lo) 30%~100% 1% uint8(Lo)
Backup MinSoC
1
Mode BackUp_NightCharge
0x0066 0x0096(Hi) 30%~100% 1% uint8(Hi)
_UpperSoC
0:Stop
charge&discharge
Manual 0x0020 0x008C Manual mode 1 uint16 1
1:Force charge
2:Force discharge
PeakShaving
Peak 0x00EA(
0x014F(Hi) DischarPeriod. 0-59 1min uint8(Hi)
Shaving Hi)
bP1_StartMinute 1
Mode
0x00EA( PeakShaving
0x014F(Lo) 0-23 1hour uint8(Lo)
Lo) DischarPeriod.
Version: 3.32 21
bP1_StartHour
PeakShaving
0x00EB(
0x0150(Hi) DischarPeriod. 0-59 1min uint8(Hi)
Hi)
bP1_StopMinute
1
PeakShaving
0x00EB(
0x0150(Lo) DischarPeriod. 0-23 1hour uint8(Lo)
Lo)
bP1_StopHour
Peak Shaving
PeakShaving.
Mode Discharge
0x00EE 0x0153 PeriodB 1W Uint16 1
Period 1 Power
PeakLimits1
Limit
PeakShavingDischarP
0x00EC(
0x0151(Hi) eriod.bP2_StartMinut 0-59 1min uint8(Hi)
Hi)
e 1
0x00EC( PeakShavingDischarP
0x0151(Lo) 0-23 1hour uint8(Lo)
Lo) eriod.bP2_StartHour
PeakShavingDischarP
0x00ED(
0x0152(Hi) eriod.bP2_StopMinut 0-59 1min uint8(Hi)
Hi)
e 1
0x00ED( PeakShavingDischarP
0x0152(Lo) 0-23 1hour uint8(Lo)
Lo) eriod.bP2_StopHour
Peak Shaving
PeakShaving. Mode Discharge
0x00EF 0x0154 1w Uint16 1
PeriodDPeakLimits2 Period 2 Power
Limit
PeakShaving.
From Grid
0x00F0 0x0155 PeriodAChargeFrom 1 Uint16 1
charging switch
GridEn
PeakShaving .Period Charging power
0x00F1 0x0156 1W Uint16 1
AChargePowerLimits value from grid
PeakShaving .Period Maximum SOC
0x00F2 0x0157 1% Uint16 1
AMax_SOC charged from grid
Peak shaving
PeakShaving .PeriodC
0x00F3 0x0158 mode reserved 1% uint16 1
Reserved_SOC
SOC
TOUMode_TotalMin
10~100 1% uint8(Lo)
Soc
TOU -
0x016E 0xA0:SelfUse
Mode TOUMode_WorkMo 1
0xA1: 1 uint8(Hi)
de
AllowCharging
Version: 3.32 22
0xA2:
ForceDischarging
0xA3:
BatteryOff
0xA4:
PeakShaving
TOUMode_SelfuseMi
0x016F 10~100 1% uint16 1
nSOC
TOUMode_ChargeFr 0xA0:Disable
1 uint8(Lo)
omGridEn 0xA1:Enable
0x0170 1
TOUMode_ChargeSt
10~100 1% uint8(Hi)
opSOC
TOUMode_DischgPo
0~100 1% uint8(Lo)
werLimitRate
0x0171 1
TOUMode_Discharge
10~100 1% uint8(Hi)
MinSOC
0x0172 TOUMode_PeakShav
- 1w Uint32 2
~0x0173 ingLimit
0: Self Use
Smart
Smart Schedule Work 1: Feedin Priority
Schedul 0x00FF 0x0182 1 uint16 1
Mode 2: BAT not
e
Discharge
Version: 3.32 23
3.5.2 Read or Set the Inverter Charge and Discharge Period
Write Read
Registe Registe Descriptio Uni Data Lengt
Variable
r r n t format h
(0x06) (0x03)
Version: 3.32 24
3.5.3 Read or Set Inverter-Battery System Parameters
Write Read
Data
Register Register Variable Description Unit Length
format
(0x06) (0x03)
0:Lead Acid
0x0021 0x008D Battery Type 1 uint16 1
1:Lithium
Lithium battery
0x0024 0x0090 Battery_ChargeMaxCurrent charge 0.1A uint16 1
maximum current
Lithium battery
0x00E0 0x010E BatteryChargeMaxSoc Charger upper 1% uint16 1
limit
Version: 3.32 25
3.5.4 Read or Set Meter/CT Parameters
Write Read
Data
Register Register Variable Description Unit Length
format
(0x06) (0x03)
0:Positive
0x00A4 0x010B DirectionMeterCT1 1 uint16 1
1:Negative
0:Positive
0x00A5 0x010C DirectionMeterCT2 1 uint16 1
1:Negative
Version: 3.32 26
3.5.5 Read or Set Energy storage integrated system communication parameters
Write Read
Registe Registe Data Len
Variable Description Unit
r r format gth
(0x06) (0x03)
0:115200 1:57600
0x00C 2:56000
0x00B0 ModBusRTU_BraudRate bit/s uint16 1
A 3:38400 4:19200
5:14400 6:9600
0:modbus 485
1:EV Charger
2: DadaHub
0x008F 0x013E 485CommFunSelect 3:AdatptBoxG2 1 uint16 1
4: EVC& AdaptBoxG2
5: AdaptBoxG2 &
Meter
Version: 3.32 27
3.5.6 Read or Set Generator operating parameters
Write Read
Le
Registe Registe Data
Variable Description Unit ng
r r format
th
(0x06) (0x03)
0:Disable
- 0x00C7 0x0131 External GeneratorEn 1:ATS Control 1 uint16 1
2:Dry Contact
ExternalGenMaxC
ExternalGen X1: 1W
0x00C8 0x0132 harge uint16 1
MaxCharge X3: 10W
ATS
0x0109 0x016B ChargeFrom GenEnable 0:Disable 1:Enable 1 uint16 1
&Dry
Contact ChargeFromGen_ChargeSo
0x010A 0x016C 10~100 1% uint16 1
C
0:reference soc
0x00E3 0x0140 Start Gen Method 1 uint16 1
1:immediately
Switch on
0x00E4 0x0141 Switch on SoC 1% uint16 1
SoC(reference soc )
Switch off
0x00E5 0x0142 Switch off SoC 1% uint16 1
SoC(reference soc )
MaxRunTime
0x00E6 0x0143 MaxRunTime 1Min uint16 1
(1~60000)
Only
MinRestTime
Dry 0x00E7 0x0145 MinRestTime 1Min uint16 1
(1~60000)
Contact
Allow Work start time Allow Work start
1M uint8(Hi) 1
Minute time Minute
0x00E8 0x0146
Allow Work start
Allow Work start time Hour 1H uint8(Lo) 1
time Hour
Allow Work stop time Allow Work start
1M uint8(Hi) 1
Minute time Minute
0x00E9 0x0147
Allow Work start
Allow Work stop time Hour 1H uint8(Lo) 1
time Hour
GenCharge_StartHour 0-23 1 uint8(Hi) 1
0x0100 0x0162
GenCharge_StartMinute 0-59 1 uint8(Lo) 1
Work
Period GenCharge_EndHour 0-23 1 uint8(Hi) 1
0x0101 0x0163
GenCharge_EndMinute 0-59 1 uint8(Lo) 1
Version: 3.32 28
GenDischarge_StartHour 0-23 1 uint8(Hi) 1
0x0102 0x0164
GenDischarge_StartMinute 0-59 1 uint8(Lo) 1
Version: 3.32 29
3.5.7 Read or Set the Inverter Parameters to Use the VPP function
0x007E(LSB)
0x007E 0x007F(MSB)
RemoteControl ActivePower 1W int32 2
~0x007F (Postive mean charge;
Negative mean discharge)
0x0080(LSB)
0x0081(MSB)
0x0080
RemoteControl ReactivePower (Positive mean Inductive 1Var int32 2
~0x0081
reactive power;Negative mean
Capacitive reactive power)
0x0084 0x0084(LSB)
TargetEnergy 1Wh Uint32 2
~0x0085 0x0085(MSB)
Version: 3.32 30
0x0086(LSB)
0x0087(MSB)
0x0086 The power of charging or
Charge_Discharg_Power 1W Int32 2
~0x0087 discharging
(Postive mean charge;
Negative mean discharge)
0x0089(LSB)
0x008A(MSB)
0x0089 The power of charging or
PushModePower 1W int32 2
~0x008A discharging
(Postive mean discharge
Negative mean charge)
Version: 3.32 31
While PowerControlMode == 1
(enable power control)
While PowerControlMode == 2
(electric quantity control)
Version: 3.32 32
0xA2 TargetEnergy(LSB) 1 Uint16 1
While PowerControlMode == 3
(SOC target control)
Version: 3.32 33
The power of charging or
discharging
0xA3 Charge_Discharg_Power(LSB) 1 Uint16 1
(Postive mean charge;
Negative mean discharge)
While PowerControlMode == 4
(Push Power -Positive/Negative Mode)
Version: 3.32 34
While PowerControlMode == 5
(Push Power -Zero Mode)
While PowerControlMode == 6
(Self Consume Charge-Discharge Mode)
While PowerControlMode == 7
(Self Consume Charge Only Mode)
Version: 3.32 35
Mode to be executed by the
device after remote control
0xA2 NextMotion timeout 1 Uint16 1
0xA0: VPP OFF
0xA1:VPP Mode 6
While PowerControlMode == 8
(Electrical energy control mode)
LSB of PushModePower
Version: 3.32 36
远程控制超时后需设备执行
Next_Motion 的模式
0xA7 1 Uint16 1
(When TimeOut) 0xA0: VPP OFF
0xA1:Default VPP Mode
While PowerControlMode == 9
(Electrical energy control mode,based on target capacity)
1: Set Target
0xA1 TargetSetType 1 Uint16 1
2: Update Target
Version: 3.32 37
0xA7 RemoteControlTimeOut Remote Control Timeout 1s Uint16 1
远程控制超时后需设备执行
Next_Motion 的模式
0xA8 1 Uint16 1
(When TimeOut) 0xA0: VPP OFF
0xA1:Default VPP Mode
While PowerControlMode == 11
(only for mode switching)
While PowerControlMode == 12
(only for mode switching)
Read the Parallel System Real Time Data(Take two inverters as an example):
Data
Len
Register Variable Description Unit forma
gth
t
0x01DD SystemInvNum SystemInvNum 1 uint16 1
0x01E0
InvActivePower_R_All InvActivePower_R_All 1W int32 2
~0x01E1
Version: 3.32 38
0x01E2
InvActivePower_S_All InvActivePower_S_All 1W int32 2
~0x01E3
0x01E4
InvActivePower_T_All InvActivePower_T_All 1W int32 2
~0x01E5
0x01E6 InvReactiveOrApparentPower_ InvReactiveOrApparentPower_R
1VA int32 2
~0x01E7 R_All _All
0x01EC
InvCurrent_R_All InvCurrent_R_All 0.1A int32 2
~0x01ED
0x01EE
InvCurrent_S_All InvCurrent_S_All 0.1A int32 2
~0x01EF
0x01F0
InvCurrent_T_All InvCurrent_T_All 0.1A int32 2
~0x01F1
0x01F2
PvPower_ChannelA_All PvPower_ChannelA_All 1W uint32 2
~0x01F3
0x01F4
PvPower_ChannelB_All PvPower_ChannelB_All 1W uint32 2
~0x01F5
0x01F6
PvCurrent_ChannelA_All PvCurrent_ChannelA_All 0.1A uint32 2
~0x01F7
0x01F8
PvCurrent_ChannelB_All PvCurrent_ChannelB_All 0.1A uint32 2
~0x01F9
Version: 3.32 39
0x01FA
BatPower_All BatPower_All 1W int32 2
~0x01FB
0x01FC
BatCurrent_All BatCurrent_All 0.1A int32 2
~0x01FD
0x01FE
ChargePowerLimit_All ChargePowerLimit_All 1W int32 2
~0x01FF
0x0200
DischargePowerLimit_All DischargePowerLimit_All 1W int32 2
~0x0201
0x0204 InvActivePower_R 1W int16 1
InvReactiveOrApparentPower_
0x0207 1VA int16 1
R
InvReactiveOrApparentPower_
0x0208 1VA int16 1
S
InvReactiveOrApparentPower_
0x0209 1VA int16 1
T
Version: 3.32 40
Version: 3.32 41
3.5.9 Upgrade the Inverter via MODBUS
Version: 3.32 42
0x301D W
BlockCheckSum BlockCheckSum - uint16 2
~0x301E R
W
0x301F UpgradeDataPackageNum UpgradeDataPackageNum - uint16 1
R
0x3020 W 12
UpgradeData UpgradeData - uint16
~0x3097 R 0
0x3018 W
BlockStartAddr BlockStartAddr - uint16 2
~0x3019 R
0x301A W
BlockLength BlockLength - uint16 2
~0x301B R
data transfer mode:1
W
0x301C CurrentBlockNum high power transfer - uint16 1
R
mode:CurrentBlockNum
0x301D W
BlockCheckSum BlockCheckSum - uint16 2
~0x301E R
W
0x301F UpgradeDataPackageNum UpgradeDataPackageNum - uint16 1
R
0x3020 W 12
UpgradeData UpgradeData - uint16
~0x3097 R 0
McuDownLoadCheckRes
0x3099 R McuDownLoadCheckResult - uint16 1
ult
0x0000:AppCommonRunStatu
s
0x0001:AppResumeWaitStatus
0x0002:EraseProgramStatus
0x0003:ProgramDownloadStat
us
0x30A7 IapState R - uint16 1
0x0004:UpgradeSuccessStatus
0x0005:UpgradeFailStatus
0x8000:bootloaderCommonRu
nStatus
0x8001:BootloaderResumeWai
tStatus
Version: 3.32 43
0x30AA W
File_Name File_Name - uint16 25
~0x30C2 R
Version: 3.32 44
3.5.10 Reset the Inverter (Function Code: 0x06)
Data
Register Variable Description Unit length
format
1:Reset normal
0x005F Reset_Mgr_EE 1 uint16 1
configuration.
Run mode
Code Description
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
11~19 REV
20 NormalMode(R)
21 NormalMode(TOU-S)
22 NormalMode(TOU-C)
23 NormalMode(TOU-D)
Version: 3.32 45
24 NormalMode(TOU-B)
25 NormalMode(TOU-P)
26 NormalMode(Gen)
27 WaitChargeMode
28 NormalMode(SS)
Version: 3.32 46