Energy 5 min read
State of charge (SoC)
Also known as: SoC, battery state of charge, state of charge
Definition
State of charge (SoC) is the energy available in a battery, expressed as a percentage of its rated capacity. The battery management system estimates it, and energy software uses it to decide when a battery may charge, discharge or hold a reserve.
Cite this entry
Text
"State of charge (SoC)". Order Group, Software glossary, 10 October 2026. https://ordergroup.co/glossary/state-of-charge/
HTML
<a href="https://ordergroup.co/glossary/state-of-charge/">State of charge (SoC)</a> - Order Group
How state of charge works
Article 3(1), point (27), of the EU Battery Regulation (EU) 2023/1542 defines state of charge as "the available energy in a battery expressed as a percentage of its rated capacity as declared by the manufacturer". Zero percent is empty and 100% is full. In practice many battery management systems report SoC against the capacity the battery has today, which shrinks as it ages, so the same percentage can mean a different number of kWh on two batteries with the same nameplate.
SoC cannot be measured directly. The battery management system estimates it, usually by counting the current that flows in and out (coulomb counting) and correcting that count with cell voltage when the battery rests, often with a model of the cells on top. The count drifts over time. Lithium iron phosphate cells also have a flat voltage curve across most of their range, so the estimate can be several points off until the battery reaches a full charge or another known point and recalibrates. A sudden jump in the reported SoC is usually that correction, not a real change in stored energy.
Three related quantities are often confused with SoC. State of health (SoH) describes how much capacity the battery has left compared with new. Depth of discharge (DoD) describes one cycle: discharging from 90% to 20% is a 70% depth of discharge. Usable energy is what lies between the minimum and maximum SoC the operator allows, and it is the number an energy system plans with.
| Term | What it describes | Usual source |
|---|---|---|
| State of charge (SoC) | Energy available now, as a percentage of capacity | BMS, read in every control cycle |
| State of health (SoH) | Remaining capacity compared with a new battery | BMS, changes over months |
| Depth of discharge (DoD) | How far one cycle drains the battery | Calculated from SoC at the start and end of a cycle |
| Minimum and maximum SoC | The window the battery is allowed to work in | Battery or inverter model, installer or operator setting |
| Usable energy | kWh between the minimum and maximum SoC | Calculated by the EMS |
What state of charge means for your software
For an energy management system (EMS), SoC is the main state variable of the battery. Every decision to charge, discharge, sell or hold depends on it, and so does every promise the site makes to a grid operator or a trading partner. The BMS owns the estimate and the hard cell limits. The software above it owns the operating window and what happens inside it. Requirements worth writing into the specification:
- Limits come in two layers. Hard limits come from the battery or inverter model and protect the cells. Operating limits for the strategy sit inside them and should be editable per installation, with validation that rejects a minimum above the maximum or a value outside the hardware limits.
- Decision thresholds need a margin. If the EMS discharges whenever SoC is above the minimum, the battery will cross the minimum within one control interval. A decision threshold needs a buffer at least as large as the energy the battery can move in one interval.
- Reserved energy is planned ahead. Peak shaving windows, backup reserve and committed trading or balancing volumes all need energy at a set time, so the planner has to keep SoC high enough before each of them. These goals cannot be optimized one at a time.
- Implausible values are flagged. A SoC reading that changes faster than the battery's power allows (for example, a jump of 15 points within a minute), or stays frozen while power flows, usually points to a communication or calibration problem. The control logic should ignore such a value and raise an alert.
- Protection settings survive configuration changes. Adding a controller must not silently remove the deep discharge protection settings. In a real project adding the trading controller did exactly that (see below), so it deserves a regression test.
- SoC is stored with every decision. To explain a deep discharge or a missed peak shaving window later, you need the SoC the system saw, the limits in force and the decision it took.
Rules and standards
Article 14 of the Battery Regulation requires that, from August 18, 2024, the BMS of stationary battery energy storage systems, light means of transport batteries and electric vehicle batteries holds up-to-date data for the parameters that determine state of health and expected lifetime, listed in Annex VII. For stationary storage the Annex VII parameters include the remaining capacity (Part A, state of health) and, for expected lifetime, the tracking of harmful events such as the number of deep discharge events (Part B). The person who legally bought the battery, and third parties acting on their behalf, get read-only access to that data, among other purposes to make the battery available to independent aggregators.
For software this has two consequences. SoC limits are also a lifetime and warranty question, because every deep discharge is recorded. And BMS data can no longer be treated as a private interface of the battery vendor: an EMS or an aggregator platform has a legal basis to read it.
From our projects
In the EMS we build for Zeronest, the minimum and maximum SoC come from the inverter model and can be overridden for each installation. In 2026 we changed how the charge and discharge decisions use them. The decision no longer reads fixed SoC values. It takes the installation's limit and adds or subtracts a threshold, and the discharge threshold equals the maximum energy the battery can discharge in one interval divided by its capacity. The battery therefore stops discharging before it reaches the minimum. In the same year owners got the option to edit their minimum and maximum SoC themselves in the mobile app and on the web platform.
The EMS we built for Skyfri has a SoC maintenance mode among its operating modes, next to peak shaving and trading. For Global Green's battery storage sites we built a separate deep discharge protection controller in 2026. In testing, adding the trading controller removed the deep discharge protection settings. The defect was found and fixed. Protection limits need their own test every time the set of controllers changes.
Read more on the blog
Sources
FAQ
-
It depends on the chemistry, the warranty and the use case. The manufacturer sets the hard limits, and the operating window inside them is a trade-off between usable energy and cell aging, so the software should let each installation set it instead of hard-coding one value.
-
No. SoC says how full the battery is now, while state of health says how much capacity it has left compared with new. A battery at 100% SoC and 80% state of health holds less energy than it did when new.
-
The BMS estimates SoC and recalibrates when the battery reaches a known point, such as a full charge. A jump after a full charge is usually a correction of accumulated drift, and the EMS should absorb it without taking a rash decision.
-
Both, at different levels. The BMS enforces the hard safety limits and disconnects the battery if they are crossed. The EMS keeps the battery inside a narrower operating window, so that the BMS limits are never the ones that stop it.
Building a system that depends on State of charge (SoC)?
See how we build software for this domain, with case studies and the stack we use.