Explainer

One controller between the BMS, the PCS and the market

A battery site normally needs two brains: a BESS controller that keeps the battery's own management system and the power converter in step, and an energy management system that decides what the battery should be doing and when. The ThingsLog TLCTL edge controller does the first job on site, and takes the second from the VPP platform — so the plan the market was sold is what the converter is actually told to do.

ThingsLog · September 2026 · 7 min read

Two jobs, one box

Inside every battery container there is a BMS — the battery management system that knows the cells' state of charge, temperatures, voltages and the limits it will tolerate — and a PCS, the power conversion system that actually moves energy between the DC cells and the AC grid. They come from different vendors more often than not, and something has to translate between them: read the BMS limits, keep its heartbeat alive, and tell the PCS how many kilowatts to push, in which direction, right now.

The BESS controller's job

Keep BMS and PCS synchronised. Watch SoC, temperature and alarms. Never command the converter past what the cells allow. Keep the heartbeat the BMS insists on, every second, or the battery trips.

The EMS's job

Decide what the battery should do: charge from cheap hours or surplus solar, discharge into the peak, stay inside export limits, follow the day-ahead schedule, and prove afterwards that it did.

Vendors usually sell these as separate products — a site controller from the battery integrator, an EMS from someone else, and a cloud on top. The TLCTL edge controller fulfils the site role directly: it speaks Modbus TCP and RTU to the BMS and the PCS, enforces the limits in its own dispatch loop, and executes the setpoints the VPP platform plans. One box, one vendor, one loop to audit.

How the loop actually runs

  1. The platform plans Every day before the auction closes the VPP engine builds tomorrow's schedule from the price forecast: charge windows in the cheapest hours, discharge into the evening peak, nothing exported under your price floor
  2. The controller reads the battery Over Modbus it polls the BMS — state of charge, health, cell temperatures, allowed charge and discharge current — and the PCS — measured power, mode, faults
  3. Limits are clamped before anything moves Every setpoint is cut to the SoC band, the C-rate, the PCS rating and the curtailment floor. That clamp lives in the dispatch loop itself, so it applies whether the command came from the plan, from an operator override or from the AI advisor
  4. The PCS is told, then checked The controller writes the setpoint and then reads measured power back. If the plant did not move, the command is re-sent and the platform is told — a converter that says "OK" and does nothing is the most common failure we see
  5. The heartbeat never stops BMS units that require a register toggled every second get it from a dedicated fast loop with its own persistent connection, decoupled from the slower read poll and from the uplink
  6. Telemetry is buffered and uplinked Readings are stored locally and sent over LTE or Ethernet with acknowledgement; a watchdog restarts the radio if the link goes quiet. Nothing is lost when the network blinks
  7. The platform settles Delivered power is compared to the schedule at quarter-hour resolution, and the imbalance is yours to see before your trader tells you

What happens when the cloud is gone? The controller keeps the heartbeat, keeps the last safe limits, keeps buffering, and lets the plant sit in its own safe state. It does not invent a schedule of its own. When the link returns, the buffer drains and the plan resumes.

What the controller does

BMS to PCS integration

  • Modbus TCP and Modbus RTU over RS-485 to both sides; register maps are configuration, not firmware, so a new BMS or PCS brand is a register map away
  • Multi-master RS-485: the controller sits on the existing bus next to the site's own logger without disturbing it
  • Reference site runs a Kehua PCS with a Hithium BMS; SunSpec-style inverters are read the same way
  • Remote plants behind a firewall: Modbus over an SSH tunnel, no inbound port on your network

BESS control

  • Charge and discharge setpoints with closed-loop verification
  • SoC band, C-rate and PCS rating enforced on the controller, independent of the platform
  • Curtailment floor: solar is held at a minimum rather than driven to zero, so the site keeps covering its own load
  • Kill-switch and manual override from the portal, with the same hardware limits

Multi-asset site

  • PV inverters, grid and sub-meters, and dry-contact loads over two relays share the controller with the battery
  • Export-limit windows per site; zero-export where the grid connection demands it
  • Every reading lands in the same platform as the rest of your fleet

Market link

  • Day-ahead schedule from the platform's three-method price forecast; replan when the auction publishes
  • Intraday quarter-hour prices and live national grid data beside the plan
  • Quarter-hour settlement, plan versus delivered

How it compares

TLCTL edge + VPP platformIntegrator's BESS controllerCloud-only EMS
ScopeBESS + solar + meters + loads, and the market scheduleThe battery, sometimes the PVScheduling; needs someone else's box on site
BMS linkDirect, Modbus TCP / RTU, heartbeat kept locallyDirect, usually one brandNone — through the vendor cloud
PCS linkDirect, setpoint verified against measured powerDirectVendor API, fire and forget
Physical limitsClamped in the dispatch loop, whoever sent the commandYesOnly what the vendor API refuses
Cloud outageHeartbeat and limits held, telemetry bufferedRuns, but blind to the marketNothing moves
Multi-brandRegister maps, any Modbus BMS or PCSVendor's own listWhatever has a cloud API
Where the data livesYour plant, your tenant, EU hostingIntegrator's portalForeign cloud

Where it fits

  • A 1 MW / 2 MWh battery with a third-party PCS and BMS, trading through a balance-responsible party and wanting a day-ahead schedule — the classic case, and the one our reference plant mirrors
  • A solar park adding storage, where the new battery must respect the park's export limit and the existing logger must not be touched
  • Multi-PCS sites — one controller coordinates several converters against one BMS view and one schedule
  • Small batteries under 100 kW usually do not need the box at all: we read and, where the vendor allows, steer them through the inverter cloud

What it is not

There is no machine learning running on the controller, and we do not think there should be: the planning belongs in the platform, where the forecast, the prices and the fleet are, and the controller's job is to execute exactly and refuse what the battery cannot do. We are not a licensed trader — the schedule goes to your market seat, not to the exchange. And the platform is built for balancing services but is not yet prequalified for them; when it is, it will say so here.

Request a demo