The description of the protocol is largely taken from the Modbus specifications, which are publicly available at www.modbus.org/specs.php.
Modbus is a simple, open communication protocol, with which master-slave or client-server communication can be carried out between the devices connected to the network. The basic principle of Modbus is: a master sends a request and a slave responds to this. In Modbus TCP, the master is referred to as the client and a slave as a server. The function is the same. The descriptions of the protocol functions provided below will use the more common names master and slave, irrespective of the RTU and TCP variants. In cases where there are differences between RTU and TCP, this will be specifically indicated.
Modbus can be used in two ways on the inverter:In the case of Modbus RTU, there can only ever be one master in the system. In principle, only one master may initiate requests. A slave may only give a response if it has been addressed by the master; the slaves cannot communicate with each other. If a broadcast request (request to all available slaves via slave ID or unit ID 0) is sent, none of the slaves can respond. Broadcasts can therefore only be used for write commands.
If a master sends a request to a slave, then it expects a response. In the event of a request from a master, there are five options:Modbus devices provide data in 16 bit large data blocks (registers).
In certain cases, individual data points may also cover several data blocks (e.g., 2 registers = 32 bit value).
The description of the protocol is largely taken from the Modbus specifications, which are publicly available at www.modbus.org/specs.php.
Modbus is a simple, open communication protocol, with which master-slave or client-server communication can be carried out between the devices connected to the network. The basic principle of Modbus is: a master sends a request and a slave responds to this. In Modbus TCP, the master is referred to as the client and a slave as a server. The function is the same. The descriptions of the protocol functions provided below will use the more common names master and slave, irrespective of the RTU and TCP variants. In cases where there are differences between RTU and TCP, this will be specifically indicated.
Modbus can be used in two ways on the inverter:In the case of Modbus RTU, there can only ever be one master in the system. In principle, only one master may initiate requests. A slave may only give a response if it has been addressed by the master; the slaves cannot communicate with each other. If a broadcast request (request to all available slaves via slave ID or unit ID 0) is sent, none of the slaves can respond. Broadcasts can therefore only be used for write commands.
If a master sends a request to a slave, then it expects a response. In the event of a request from a master, there are five options:Modbus devices provide data in 16 bit large data blocks (registers).
In certain cases, individual data points may also cover several data blocks (e.g., 2 registers = 32 bit value).
In principle, a Modbus message is made up of the protocol data unit (PDU). This is independent of the underlying communication layers.
Depending on the bus or network that is used, additional fields can also be added. This structure is then referred to as the application data unit (ADU).
ADU |
| |||
Address field | Function code | Data | CRC |
|
| PDU |
|
| |
ADU |
| ||
MBAP header | Function code | Data |
|
| PDU |
| |
Modbus TCP uses its own header to identify the application data unit. This header is called MBAP header (MODBUS application protocol header).
The size of the protocol data unit (PDU) is limited due to the first Modbus implementations in a serial network (max. RS-485 ADU = 256 bytes). This results in the following for the size of the protocol data unit PDU: PDU = 256 – slave ID (1 byte) – CRC (2 bytes) = 253 bytesIf an error occurs on the slave during the processing of a request, an error message is sent as the response (exception response). In the event of this kind of response, the most significant bit of the function code is set to 1 (corresponds to adding 0x80 to the function code) 1) and an exception code is added, which indicates the reason for the error.
1) The prefix "0x" stands for hexadecimal numbers.
This function code is used to read the content of one or more successive registers of a device. The request contains the address of the first register to be read and the number of registers to be read. Registers are addressed in the request starting at 0. This means that registers 1 to 16 will be addressed via addresses 0 to 15.
Request |
| |||
| Function code | 1 byte | 0x03 | |
| Start address | 2 bytes | 0x0000 to 0xFFFF (0 to 65535) | |
| Number of registers | 2 bytes | 1 to 125 | |
Response |
| |||
| Function code | 1 byte | 0x03 | |
| Number of bytes | 1 byte | 2 x N* | |
| Register values | N* x 2 bytes |
| |
| *N = number of registers | |||
Error |
| |||
| Error code | 1 byte | 0x83 | |
| Exception code | 1 byte | 01 or 02 or 03 or 04 or 11 | |
This function code is used in order to write a single register. The request only contains the address of the register to be written. Registers are addressed starting at 0. This means that register 1 is addressed via address 0. The normal response is a copy of the request, which is sent after successfully writing the register.
Request |
| |||
| Function code | 1 byte | 0x06 | |
| Register address | 2 bytes | 0x0000 to 0xFFFF (0 to 65535) | |
| Register value | 2 bytes |
| |
Response |
| |||
| Function code | 1 byte | 0x06 | |
| Register address | 2 bytes | 0x0000 to 0xFFFF (0 to 65535) | |
| Register value | 2 bytes |
| |
Error |
| |||
| Error code | 1 byte | 0x86 | |
| Exception code | 1 byte | 01 or 02 or 03 or 04 or 11 | |
This function code is used in order to write a block of successive registers. The request contains the address of the first register to be written, the number of registers to be written, the number of bytes to be written, and the values to be written (2 bytes per register). The normal response contains the function code, the start address, and the number of registers written.
Request |
| |||
| Function code | 1 byte | 0x10 | |
| Start address | 2 bytes | 0x0000 to 0xFFFF (0 to 65535) | |
| Number of registers | 2 bytes | 1 to 123 | |
| Number of bytes | 1 byte | 2 x N* | |
| Register values | N* x 2 bytes |
| |
| *N = number of registers | |||
Response |
| |||
| Function code | 1 byte | 0x10 | |
| Start address | 2 bytes | 0x0000 to 0xFFFF (0 to 65535) | |
| Number of registers | 2 bytes | 1 to 123 | |
Error |
| |||
| Error code | 1 byte | 0x90 | |
| Exception code | 1 byte | 01 or 02 or 03 or 04 or 11 | |
Modbus exception codes | ||
|---|---|---|
Code | Name | Meaning |
01 | ILLEGAL FUNCTION | The function code in the request is not supported by the slave. |
02 | ILLEGAL DATA ADDRESS | Invalid register addresses have been requested. |
03 | ILLEGAL DATA VALUE | A value in the request is outside of the valid range. This applies both for the fields of a request (e.g., invalid number of registers) and for invalid setting values for the SunSpec inverter control models. |
04 | SLAVE DEVICE FAILURE | An error occurred during an attempt to write one or more registers. |
11 | GATEWAY TARGET DEVICE FAILED TO RESPOND | The addressed device is switched off and cannot be found. |
Each Modbus RTU message is equipped with a checksum (CRC, Cyclic Redundancy Check) in order to be able to identify transmission errors. The size of the checksum is 2 bytes. It is calculated by the sending device and attached to the message to be sent. For its part, the receiver calculates the checksum from all bytes of the received message (without CRC) and compares this with the received checksum. If these two checksums are different, then an error has occurred.
The calculation of the checksum starts with setting all bits of a 16 bit register (CRC register) to 1 (0xFFFF). All bytes of the message are then individually processed with the CRC register. Only the data bytes of one message are used for the calculation. Start, stop, and parity bits are not considered.
During the calculation of the CRC, each byte is XOR-linked with the CRC register. The result is then moved in the direction of the least significant bit (LSB) and the most significant bit (MSB) is set to 0. The LSB is considered. If the LSB was previously 1, then the CRC register is XOR-linked with a fixed assigned value. If the LSB was 0, then nothing needs to be done.
This process is repeated until the CRC register has been moved eight times. After the last (eighth) movement, the next byte is taken and XOR-linked to the current CRC register. The write process then starts from the beginning; it is again moved eight times. After dealing with all bytes of the message, the value of the CRC register is the checksum.

If the 16 bit (2 bytes) CRC checksum is sent with a message, then the less significant byte is transferred before the more significant one.
For example, if the CRC checksum is 0x1241 (0001 0010 0100 0001): | ||||||||
Addr | Func | Data | Data | Data | Data | Data | CRC | CRC |
|
|
|
|
|
|
| 0x41 | 0x12 |
AC | Alternating current |
| V | Voltage (volts) |
DC | Direct current |
| VA | Apparent power |
FW | Firmware |
| VAr | Reactive power |
PF | Power factor (cos j) |
| VMax | Maximum voltage |
PV | Photovoltaics |
| VMin | Minimum voltage |
RTC | Real-time clock |
| VRef | Reference voltage |
SF | Scale factor |
| W | Power (watts) |
SW | Software |
| IN | Inverter |
AC | Alternating current |
| V | Voltage (volts) |
DC | Direct current |
| VA | Apparent power |
FW | Firmware |
| VAr | Reactive power |
PF | Power factor (cos j) |
| VMax | Maximum voltage |
PV | Photovoltaics |
| VMin | Minimum voltage |
RTC | Real-time clock |
| VRef | Reference voltage |
SF | Scale factor |
| W | Power (watts) |
SW | Software |
| IN | Inverter |
Inverter |
| Energy meter |
SID |
| SID |
Common Block |
| Common Block |
Inverter Model |
| Meter Model |
Nameplate Model |
| End Block |
Basic Settings Model |
|
|
Ext. Measurement Model |
|
|
Immediate Controls Model |
|
|
Multi. MPPT Inv. Ext. Model |
|
|
Basic Storage Control |
|
|
End Block |
|
|
The register lists can be downloaded from the Fronius website:
https://www.fronius.com/de/downloads / Solar Energy / Modbus Sunspec Maps, State Codes and Events
Recommendation for timeout values
Modbus requests should only be executed sequentially and not in parallel (maximum 2 queries in parallel). Perform the requests with a timeout of at least 1 second. Requests in millisecond intervals can lead to long response times.
Multiple register requests in one message are faster than multiple requests of individual registers.
TCP: The unit-id of the inverter is always 0x01. Identification is possible by the IP address.
RTU: The slave-id must be configured on the web interface of the GEN24. Several GEN24 devices can be connected together. Each device must have a unique number.
If an energy meter (e.g., Fronius Smart Meter 63A) is connected via Modbus RTU, it can be read out via the settable Modbus device ID using Modbus TCP.
Fronius Smart Meter address | Modbus device ID | |
1 | 200 (default) | |
2 | 201 | |
3 | 202 | |
4 | 203 | |
5 | 204 |
IMPORTANT!
Correct procedure:
To read a register, the register's start address must be specified in the Modbus request.
SunSpec Basic Register: 40001
Registers begin at 1 and do not represent a function code.
Do not confuse the registers with the Modicon address scheme:
in the Modicon address scheme, 40001 is displayed as 4x40001.
To read register 40001, use address 40000 (0x9C40).
The register address that is output therefore always has 1 number less than the actual register number.
The lengths of individual models may vary due to the data types used.
Start addresses are therefore specified for SunSpec models in the case of some register tables.
This start address, together with the offset from the table, then produces the value of the actual register number.
Example: Table Nameplate Model (120) on page (→):
the register WRtg of the Nameplate Model has an offset of 4. The start address is specified as 40131 with the setting "float".
Therefore, the correct register number is: 40131 + 4 = 40135.
Examples for Modbus RTU:
| 1. Request for 4 registers starting from register 40005 (Mn, Manufacturer) | |||||||||||||
Send (bytes in hexadecimal) | ||||||||||||||
01 | 03 | 9C | 44 | 00 | 04 | 2A | 4C |
| ||||||
Device ID | Function code | Address 40004 (corresponds to | Number of registers to be read | Checksum |
| |||||||||
Low byte | High byte |
| ||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Receive (bytes in hexadecimal) |
| |||||||||||||
01 | 03 | 08 | 46 | 72 | 6F | 6E | 69 | 75 | 73 | 00 | 8A | 2A |
| |
Device ID | Function code | Number of bytes | Address 40005 | Address 40006 | Address 40007 | Address 40008 | Checksum |
| ||||||
Low byte | High byte |
| ||||||||||||
| 2. Enter one register starting from register 40242 (WmaxLimPct) | |||||||||||||
01 | 10 | 9D | 32 | 00 | 01 | 02 | 13 | 88 | E3 | DD | ||||
Device ID | Function code | Address 40242 | Number of registers to be entered | Number of data bytes still to follow | Register value to be entered 0x1388 = 5000 | Checksum | ||||||||
| Low byte | High byte | ||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
01 | 10 | 9D | 32 | 00 | 01 | 8F | AA |
| ||||||
Device ID | Function code | Address 40242 | Number of registers entered | Checksums | 40008 |
|
| |||||||
Low byte | High byte |
| ||||||||||||
Examples for Modbus TCP:
| 1. Request for 4 registers starting from register 40005 (Mn, Manufacturer) | |||||||||||
Send (bytes in hexadecimal) | ||||||||||||
MBAP header | 03 | 9C | 44 | 00 | 04 |
| ||||||
For details, see description of MBAP header | Function code | Address 40004 (corresponds to | Number of registers to be read |
| ||||||||
| ||||||||||||
| ||||||||||||
Receive (bytes in hexadecimal) | ||||||||||||
MBAP header | 03 | 08 | 46 | 72 | 6F | 6E | 69 | 75 | 73 | 00 | ||
For details, see description of MBAP header | Function code | Number of bytes | Address 40005 | Address 40006 | Address 40007 | Address 40008 | ||||||
| 2. Enter one register starting from register 40242 (WmaxLimPct) | |||||||||||
MBAP header | 10 | 9D | 32 | 00 | 01 | 02 | 13 | 88 | ||||
For details, see description of MBAP header | Function code | Address 40242 | Number of registers to be entered | Number of data bytes still to follow | Register value to be entered 0x1388 = 5000 | |||||||
| ||||||||||||
MBAP header | 10 | 9D | 32 | 00 | 01 | |||||||
For details, see description of MBAP header | Function code | Address 40242 | Number of registers entered | |||||||||
| Fronius inverters cannot always provide all the data specified in the SunSpec data models. Depending on the data type, this data is represented by the following values in accordance with the SunSpec specification: | |
| 0x80001) | |
1) The prefix "0x" stands for hexadecimal numbers.
Data points that are not supported are marked with "Not supported" in the "Range of values" column in the register tables.
In this case, during reading, the corresponding value from the list above is obtained depending on the data type.
In certain instances, registers which are basically listed as supported may also return this value. This is because some values depend on the device type, e.g., currents AphB and AphC in the case of a single-phase inverter.
The EEI sign convention1) for the power factor is in line with the SunSpec specification and is based on the information contained in the "Handbook for Electricity Metering" and IEC 61557-12 (2007).
The power factor is:1) EEI = Edison Electrical Institute
IMPORTANT! Scale factors (also possible when selecting "Float"!) are not static, even if they are entered as a fixed value in these Operating Instructions.
Scale factors can change every time the firmware is changed and also change with the runtime (auto-scale) (e.g., scale factor for power specification).
Scale factors with constant values are listed in the tables in the column "Range of values".
Current data (data of inverters and energy meters) may have variable scale factors. These must be read from the corresponding registers.
The data type "sunssf" is a signed integer with 16 bits.
Example calculation:
(Model 160): 1_DCW = 10000, DCW_SF = -1 -> Power = 10000 x 10^(-1) = 1000 W
If an attempt is made to write to such registers, the inverter does not return an exception code!
The values written to these registers are ignored without an error message.
In Model 123 and 124, an exception occurs during write access if the control option in the local web interface has been deactivated.
Some registers only permit certain values. The valid values can be found in the relevant register table.
If an invalid value is entered into a register, the inverter control will return exception code 3 (illegal data value). The invalid value is ignored.
From your web browser, you can use the inverter web interface to apply the Modbus connection settings which cannot be accessed via the Modbus protocol.
From your web browser, you can use the inverter web interface to apply the Modbus connection settings which cannot be accessed via the Modbus protocol.
The inverter communicates with system components (e.g., Fronius Smart Meter) and other inverters via Modbus. The primary device (Modbus Client) sends control commands to the secondary device (Modbus Server). The control commands are executed by the secondary device.
RTU Server
The following input fields and functions are available for communication via Modbus RTU:
| Meter address offset |
| Inverter address |
| SunSpec Model Type |
| Interface |
| Baud Rate |
| Parity |
| Allow Control If this option is activated, the inverter is controlled via Modbus. Inverter control includes the following functions:
|
TCP Server
The following input fields and functions are available for communication via Modbus TCP:
| Meter address offset |
| SunSpec Model Type |
| Modbus port |
| Meter Address |
| Allow Control If this option is activated, the inverter is controlled via Modbus. Inverter control includes the following functions:
|
| Restrict Control |
The "Limit Control" option is only available for the TCP transmission protocols.
It is used to block inverter control commands from unauthorized users by only permitting control for specific devices.
Limit Control
If this option is activated, only certain devices will be able to send control commands.
IP address
To limit inverter control to one or more devices, enter the IP addresses of the devices which are permitted to send commands to the inverter in this field. Multiple entries are separated by commas.
The description of the Common Block including the SID register (register 40001–40002) for identification as a SunSpec device applies for each device type (inverter, energy meter). Each device has its own Common Block, which lists information about the device (model, serial number, SW version, etc.).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
The description of the Common Block including the SID register (register 40001–40002) for identification as a SunSpec device applies for each device type (inverter, energy meter). Each device has its own Common Block, which lists information about the device (model, serial number, SW version, etc.).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
The register number of the two model types is different!
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
Name | Value | Description |
|---|---|---|
I_STATUS_OFF | 1 | Inverter is off |
I_STATUS_SLEEPING | 2 | Auto shutdown |
I_STATUS_STARTING | 3 | Inverter starting |
I_STATUS_MPPT | 4 | Inverter working normally |
I_STATUS_THROTTLED | 5 | Power reduction active |
I_STATUS_SHUTTING_DOWN | 6 | Inverter shutting down |
I_STATUS_FAULT | 7 | One or more faults present, see St*or Evt* register |
I_STATUS_STANDBY | 8 | Standby |
| * | Inverter model register |
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
VRef (4)
The reference voltage is the voltage at the joint connection point where the local grid is connected to the public grid. The reference voltage is the same as the inverter's nominal voltage.
=> See figure "Joint Connection Point."
The value is given in volts in the range of 0 (0x0000) to 400 (0x0190).
VRefOfs (5)
Depending on the wiring of the local grid, there may be a deviation from the reference voltage at the point where each individual inverter is connected to the local grid (see "Joint connection point" diagram).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
In the settings on the inverter's web interface, the setting "Inverter control via Modbus" must be enabled under Modbus for write functions to be possible. Depending on the control priority that has been set (IO control, dynamic power reduction, or control via Modbus), Modbus commands may not be accepted.
In the settings on the inverter's web interface, the setting "Inverter control via Modbus" must be enabled under Modbus for write functions to be possible. Depending on the control priority that has been set (IO control, dynamic power reduction, or control via Modbus), Modbus commands may not be accepted.
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
Conn_WinTms (3) to Conn (5)
These registers are used to control the standby mode (no grid power feed operation) of the inverter.
Conn_WinTms (3) and Conn_RvrtTms (4)
These registers can be used to control the inverter's time response. => See section "Time Response of the Supported Operating Modes".
0 is set as the default for all registers.
To find out whether or not the inverter is feeding power into the grid, you can also use the ECPConn register and check the extended measurements and status model.
WMaxLimPct (6) to WMaxLim_Ena (10)
These registers can be used to set an output power reduction in the inverter.
WMaxLimPct (6)
Values between 0% and 100% can be entered in register WMaxLimPct.
The values limit the maximum possible output power of the device, and therefore do not necessarily have an effect on the current power.
IMPORTANT! Observe the scale factor for this register.
Further information can be found at:
http://sunspec.org/wp-content/uploads/2015/06/SunSpec-Information-Models-12041.pdf
WMaxLimPct_WinTms (7), WMaxLimPct_RvrtTms (8)
These registers can be used to control the inverter's time response for this operating mode. => See section "Time response of the supported operating modes".
0 is set as the default for all registers.
To change values in an active operating mode (e. g.
to set a different power limit or a different return time), proceed as follows:
Enter the new value into the relevant register
Restart the operating mode using register WMaxLim_Ena by setting a 1
If you are working with function code 0x10 (write multiple registers), performance specifications can be used to achieve a higher level of performance. Instead of using two Modbus commands, it is now possible to preset both the power and enable at the same time with just one command. All 5 registers (WMaxLimPct, WMaxLimPct_WinTms, WMaxLimPct_RvrtTms, WMaxLimPct_RmpTms, WMaxLim_Ena) can be written with one command. Writing to the "Read Only" register WMaxLimPct_RmpTms takes place without returning an otherwise usual exception (error) code.
For example, register values for 80% specification without timing specification: 8000, 0, 0, 0, 1
IMPORTANT! Observe the scale factor for this register.
Further information can be found at:
http://sunspec.org/wp-content/uploads/2015/06/SunSpec-Information-Models-12041.pdf
If the power reduction was originally started using WMaxLimPct_RvrtTms = 0, the operating mode must be manually deactivated.
In principle, reactive power operation is limited by the maximum output current (the maximum apparent power) and by the operative reactive power limit of the inverter:
the following diagram shows the possible working range of the inverter. All valid operating points defined by effective power P and reactive power Q are within the gray area.
The maximum values must be read out from the Nameplate Model via registers VArRtgQ1 to VArRtgQ4 and VArRtg_SF.
Under-excited (inductive) | Over-excited (capacitive) | ||
Key: | ||||
W | Power |
| VArmax | Nominal reactive power |
Wmax | Nominal power |
| VArrel | Relative reactive power |
OutPFSet (11) to OutPFSet_Ena (15)
These registers can be used to set a constant power factor in the inverter.
The power factor value must be entered with the correct sign, see section "Sign convention for the power factor"
positive for under-excited
negative for over-excited.
OutPFSet_WinTms (12), OutPFSet_RvrtTms (13)
These registers can be used to control the inverter's time response for this operating mode. => See section "Time response of the supported operating modes".
0 is set as the default for all registers.
Proceed as follows to change values when an operating mode is active (e.g., when setting a different power factor or return time):
Enter the new value into the relevant register
Restart the operating mode using register OutPFSet_Ena by setting a 1.
VArMaxPct (17) to VArPct_Ena (23)
These registers can be used to set on the inverter a constant value for the reactive power to be produced by the inverter.
In practical operation, the reactive power that is actually available is specified by the inverter's operating limits.
For this reason, the reactive power specification can only be reached if enough effective power is fed into the grid.
If too little effective power is fed into the grid, the inverter will operate at its operating limit.
VArPct_WinTms (19), VArPct_RvrtTms (20)
These registers can be used to control the inverter's time response for this operating mode. => See section "Time response of the supported operating modes".
0 is set as the default for all registers.
To change values in an active operating mode (e. g.
to set a different reactive power or a different return time), proceed as follows:
Enter the new value into the relevant register
Restart the operating mode using register VArPct_Ena by setting a 1.
The Multiple MPPT Inverter Extension Model contains the values of the DC inverter inputs.
If the inverter has several DC inputs, then this is where the current, voltage, power, energy, and status codes for the individual inputs are listed. In the inverter model (101–103 or 111–113), only the full DC power of both inputs is output in this case. DC current and DC voltage are displayed as "not implemented".
The number of blocks is automatically adjusted based on the DC inputs. For devices with a storage solution, there are two additional blocks (charging (MPP3) and discharging (MPP4)). The register addresses are shifted in the following models (absolutely related to the register addresses).
The Multiple MPPT Inverter Extension Model contains the values of the DC inverter inputs.
If the inverter has several DC inputs, then this is where the current, voltage, power, energy, and status codes for the individual inputs are listed. In the inverter model (101–103 or 111–113), only the full DC power of both inputs is output in this case. DC current and DC voltage are displayed as "not implemented".
The number of blocks is automatically adjusted based on the DC inputs. For devices with a storage solution, there are two additional blocks (charging (MPP3) and discharging (MPP4)). The register addresses are shifted in the following models (absolutely related to the register addresses).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
This model is only available for inverters with a storage solution.
The Basic Storage Control Model can be used to make the following settings on the inverter:
All specifications are to be considered recommendations.
The inverter may deviate from the specifications if this is necessary for operational safety reasons.
This model is only available for inverters with a storage solution.
The Basic Storage Control Model can be used to make the following settings on the inverter:
All specifications are to be considered recommendations.
The inverter may deviate from the specifications if this is necessary for operational safety reasons.
The Basic Storage Control Model provides the following read-only information:
WChaMax
ChaState
ChaSt
Energy storage operating status
In the settings on the inverter's web interface, the setting "Inverter control via Modbus" must be enabled under Modbus for write functions to be possible. Depending on the control priority that has been set (IO control, dynamic power reduction, or control via Modbus), Modbus commands may not be accepted.
The following examples assume that WchaMax = 3300 W.
The following applies for the resulting power windows:
The values in the following examples must be scaled according to their scale factors in the specified scale registers after reading and before writing.
Manipulating the registers InWRte, OutWRte and StorCtl_Mod will generate changes in the battery status in Fronius Solar.web, ex: Forced Recharge and Energy saving mode, depending on user settings and current status of the battery.
Example 1: Only permit energy storage charging
This behavior can be achieved by limiting the maximum discharge capacity to 0% => results in window [-3300 W, 0 W]
Example 2: Only permit energy storage discharging
This behavior can be achieved by limiting the maximum charge capacity to 0% => results in window [0 W, 3300 W]
Example 3: Do not permit charging or discharging
This behavior can be achieved by limiting the maximum charge capacity to 0% and the maximum discharge capacity to 0%
=> results in window [0 W, 0 W]
Example 4: Charging and discharging with maximum 50% of the nominal power
This behavior can be achieved by limiting the maximum charge capacity to 50% and the maximum discharge capacity to 50%
=> results in window [-1650 W, 1650 W]
Example 5: Charging in the range of 50% to 75% of the nominal power
This behavior can be achieved by limiting the maximum charge capacity to 75% and the maximum discharge capacity to -50%
=> results in window [1650 W, 2475 W]
Example 6: Discharging with 50% of the nominal power
This behavior can be achieved by limiting the maximum charge capacity to -50% and the maximum discharge capacity to 50%
=> results in window [-1650 W, -1650 W]
Example 7: Charging with 50% to 100% of the nominal power
This behavior can be achieved by limiting the maximum discharge capacity to -50% => results in window [1650 W, 3300 W]
By setting register MinRsvPct, a minimum state of charge of the energy storage can be set.
For example, by setting MinRsvPct to 20%, a reserve of 20% of the state of charge can be reserved that the state of charge should not fall below.
The ChaGriSet register can be used to allow or prevent inverter storage charging via the grid. The register ChaGriSet and the field "battery charging from DNO grid" in the Fronius system monitoring settings are AND-linked (Device configuration - Components - Battery). If the behavior is to be controlled by the ChaGriSet flag, "battery charging from DNO grid" must be checked.
The battery can be woken from standby mode via the IC124 model. If the SocMin under the last known SoC is set while the battery is in standby mode, this will be enabled.
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
Fronius Solar.web allow users to visualize status changes from the battery. These changes can be seen in Fronius Solar.web under the option Energy balance then Production or Consumption. The changes are marked with a bubble status, clicking on a state change will show the previous state followed by an arrow and the new state.

IMPORTANT
The SunSpec 700 models are only available with inverters in the Primo GEN24 208-240 3.8-10.0 kW device class.
On the user interface of the inverter, set the Modbus RTU interface 0/1 to Slave in the Communication → Modbus menu. Inverter control via the supported SunSpec 700 models is activated.
IMPORTANT
The SunSpec 700 models are only available with inverters in the Primo GEN24 208-240 3.8-10.0 kW device class.
On the user interface of the inverter, set the Modbus RTU interface 0/1 to Slave in the Communication → Modbus menu. Inverter control via the supported SunSpec 700 models is activated.
Global priority
The inverter has several interfaces for control. The Modbus 700 commands are prioritized in the event of a conflict between the commands via the Modbus 700 models and other control options (Modbus 100 models, digital I/Os, feed-in limits via the user interface of the inverter).
Priority within the SunSpec 700 models
Prioritization is necessary within the SunSpec 700 models to set the defined control behavior.
Priority | Function | Model |
|---|---|---|
1 (highest) | Enter Service | 703 |
2 | Shutdown at mains voltage and mains frequency limits | 707, 708, 709, 710 |
3 | P(U) and P(f) | 706, 711 |
4 | Maximum effective power setting | 704 |
5 (lowest) | Reactive power functions* | 704, 705, 712 |
* One of the following reactive power functions can be activated. The activated function is deactivated when another is selected:
The following registers can be defined for a set period of time in the Reversion Timers Register:
The values to be applied after the time has elapsed are also written via Modbus registers. This Reversion Timer function is available for the following Modbus models:
SunSpec supports the option of storing several parameter sets (or curves) for the respective functions. A total of 4 curves are supported. The curve with the index 1 corresponds to the current active parameter set of the inverter. The curves with index 2 to 4 can be described and activated. The following registers are displayed:
Name | Value | Description |
|---|---|---|
COMPLETED | 1 | Curve operation successful |
FAILED | 2 | Curve operation not successful |
Name | Value | Description |
|---|---|---|
RW | 0 | Write/read-only access |
R | 1 | Read-only access |
This functionality is supported for the following models:
This model outputs the following measured and status values:
Name | Value | Description |
|---|---|---|
SINGLE_PHASE | 0 | Single-phase network |
SPLIT_PHASE | 1 | Single-phase three-wire network |
THREE_PHASE | 2 | Three-phase network |
Name | Value | Description |
|---|---|---|
OFF | 0 | Inverter is not in operation |
ON | 1 | Inverter working normally |
Name | Value | Description |
|---|---|---|
OFF | 0 | Inverter is not in operation |
SLEEPING | 1 | Auto shutdown |
STARTING | 2 | Inverter starting |
RUNNING | 3 | Inverter working in normal operation |
THROTTLED | 4 | Power reduction active |
SHUTTING_DOWN | 5 | Inverter shutting down |
FAULT | 6 | Indicates one or more errors, see alarm (6) |
STANDBY | 7 | Standby |
Name | Value | Description |
|---|---|---|
DISCONNECTED | 0 | Grid power feed operation is not active |
CONNECTED | 1 | Grid power feed operation is active |
Name | Bit | Description |
|---|---|---|
GROUND_FAULT | 0 | Grounding fault |
AC_DISCONNECT | 2 | Shutdown, no AC supply |
GRID_DISCONNECT | 4 | Grid error |
OVER_FREQUENCY | 8 | Mains frequency is too high |
UNDER_FREQUENCY | 9 | Mains frequency too low |
AC_OVER_VOLT | 10 | Mains voltage exceeds admissible limits |
AC_UNDER_VOLT | 11 | Mains voltage too low |
HW_TEST_FAILURE | 15 | Device defect |
This model outputs the following measured and status values:
Name | Value | Description |
|---|---|---|
SINGLE_PHASE | 0 | Single-phase network |
SPLIT_PHASE | 1 | Single-phase three-wire network |
THREE_PHASE | 2 | Three-phase network |
Name | Value | Description |
|---|---|---|
OFF | 0 | Inverter is not in operation |
ON | 1 | Inverter working normally |
Name | Value | Description |
|---|---|---|
OFF | 0 | Inverter is not in operation |
SLEEPING | 1 | Auto shutdown |
STARTING | 2 | Inverter starting |
RUNNING | 3 | Inverter working in normal operation |
THROTTLED | 4 | Power reduction active |
SHUTTING_DOWN | 5 | Inverter shutting down |
FAULT | 6 | Indicates one or more errors, see alarm (6) |
STANDBY | 7 | Standby |
Name | Value | Description |
|---|---|---|
DISCONNECTED | 0 | Grid power feed operation is not active |
CONNECTED | 1 | Grid power feed operation is active |
Name | Bit | Description |
|---|---|---|
GROUND_FAULT | 0 | Grounding fault |
AC_DISCONNECT | 2 | Shutdown, no AC supply |
GRID_DISCONNECT | 4 | Grid error |
OVER_FREQUENCY | 8 | Mains frequency is too high |
UNDER_FREQUENCY | 9 | Mains frequency too low |
AC_OVER_VOLT | 10 | Mains voltage exceeds admissible limits |
AC_UNDER_VOLT | 11 | Mains voltage too low |
HW_TEST_FAILURE | 15 | Device defect |
This model corresponds to a digital rating plate. The following values can be read:
Name | Bit | Description |
|---|---|---|
MAX_W | 0 | Effective power limit |
FIXED_W | 1 | Effective power setting |
FIXED_VAR | 2 | Reactive power setting |
FIXED_PF | 3 | Power factor setting |
VOLT_VAR | 4 | Q(U) function |
FREQ_WATT | 5 | P(f) function |
DYN_REACT_CURR | 6 | Dynamic reactive current function |
LV_TRIP | Shutdown due to AC under-voltage | |
HV_TRIP | 8 | Shutdown due to AC over-voltage |
WATT_VAR | 9 | Q(P) function |
VOLT_WATT | 10 | P(U) function |
LF_TRIP | 12 | Shutdown due to AC over-frequency |
HF_TRIP | 13 | Shutdown due to AC under-frequency |
This model corresponds to a digital rating plate. The following values can be read:
Name | Bit | Description |
|---|---|---|
MAX_W | 0 | Effective power limit |
FIXED_W | 1 | Effective power setting |
FIXED_VAR | 2 | Reactive power setting |
FIXED_PF | 3 | Power factor setting |
VOLT_VAR | 4 | Q(U) function |
FREQ_WATT | 5 | P(f) function |
DYN_REACT_CURR | 6 | Dynamic reactive current function |
LV_TRIP | Shutdown due to AC under-voltage | |
HV_TRIP | 8 | Shutdown due to AC over-voltage |
WATT_VAR | 9 | Q(P) function |
VOLT_WATT | 10 | P(U) function |
LF_TRIP | 12 | Shutdown due to AC over-frequency |
HF_TRIP | 13 | Shutdown due to AC under-frequency |
This model controls the conditions for connection and feed-in of the inverter with the following parameters:
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Inverter feed-in not permitted |
ENABLED | 1 | Inverter feed-in permitted |
This model controls the conditions for connection and feed-in of the inverter with the following parameters:
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Inverter feed-in not permitted |
ENABLED | 1 | Inverter feed-in permitted |
This model contains the control of the inverter. The following parameters can be used to set the effective power, a constant power factor, or a constant reactive power:
Power factor
Name | Value | Description |
|---|---|---|
ON | 1 | Function active |
OFF | 0 | Function inactive |
Name | Value | Description |
|---|---|---|
OVER_EXCITED | 0 | Over-excited (capacitive) |
UNDER_EXCITED | 1 | Under-excited (inductive) |
Effective power limit
These registers limit the effective power of the inverter:
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Reactive power
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model contains the control of the inverter. The following parameters can be used to set the effective power, a constant power factor, or a constant reactive power:
Power factor
Name | Value | Description |
|---|---|---|
ON | 1 | Function active |
OFF | 0 | Function inactive |
Name | Value | Description |
|---|---|---|
OVER_EXCITED | 0 | Over-excited (capacitive) |
UNDER_EXCITED | 1 | Under-excited (inductive) |
Effective power limit
These registers limit the effective power of the inverter:
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Reactive power
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
The behavior of the function Q(U) (reactive power over voltage) can be controlled with this model. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
The behavior of the function Q(U) (reactive power over voltage) can be controlled with this model. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model can be used to control the behavior of the function P(U) (effective power over voltage). A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model can be used to control the behavior of the function P(U) (effective power over voltage). A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Models 707 and 708 are used to set the mains voltage limits. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Models 707 and 708 are used to set the mains voltage limits. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Models 709 and 710 are used to set the mains frequency limits. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
Models 709 and 710 are used to set the mains frequency limits. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model is used to control the function P(f) (effective power over mains frequency). A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model is used to control the function P(f) (effective power over mains frequency). A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
The function Q(U) (reactive power over mains voltage) is controlled with this model. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
The function Q(U) (reactive power over mains voltage) is controlled with this model. A graphical overview of the function is shown in the document "SunSpec Modbus IEEE 1547-2018 Profile Specification and Implementation Guide".
Name | Value | Description |
|---|---|---|
DISABLED | 0 | Function active |
ENABLED | 1 | Function inactive |
This model provides information on a connected battery storage system.
This model provides information on a connected battery storage system.
The register number of the two model types is different!
The Modbus device ID of the energy meter is configurable (default = 200).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
There are 4 different meter locations, which are described by the location number (see table). Depending on where the Smart Meter is located and whether the inverter is producing or consuming, the signs of the PowerReal values and the Energy values change. These are shown in the following table:
Meter_Location | 0 (grid) | 1 (load) | 3 (ext. generator) | 256-511 (subload) |
|---|---|---|---|---|
PowerReal_P_Sum (+ positive) | consuming from grid | producing power | generation | load is producing power |
PowerReal_P_Sum (- negative) | feeding in to grid | normal consumption | consumption | normal consumption |
energy plus (absolute counter) | import from grid = energy consumed | producing power* = energy produced | generation = energy produced | producing power* = energy produced |
energy minus (absolute counter) | export to grid = energy produced | consumption = energy consumed | consumption = energy consumed | consumption = energy consumed |
The register number of the two model types is different!
The Modbus device ID of the energy meter is configurable (default = 200).
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .
There are 4 different meter locations, which are described by the location number (see table). Depending on where the Smart Meter is located and whether the inverter is producing or consuming, the signs of the PowerReal values and the Energy values change. These are shown in the following table:
Meter_Location | 0 (grid) | 1 (load) | 3 (ext. generator) | 256-511 (subload) |
|---|---|---|---|---|
PowerReal_P_Sum (+ positive) | consuming from grid | producing power | generation | load is producing power |
PowerReal_P_Sum (- negative) | feeding in to grid | normal consumption | consumption | normal consumption |
energy plus (absolute counter) | import from grid = energy consumed | producing power* = energy produced | generation = energy produced | producing power* = energy produced |
energy minus (absolute counter) | export to grid = energy produced | consumption = energy consumed | consumption = energy consumed | consumption = energy consumed |
The register tables can be found on the Fronius website or opened using the link:
http://www.fronius.com/QR-link/0024 .