Overview
The Core Real-Time Calculations Definition is a Certified Product Point Template for Power Conversion Systems that defines required normalized real-time performance calculations that scale, or transform several of the points in the Core Real-Time Data. These points are required for the Bazefield installation to function properly across all core applications.
These calculations specifically translate OEM-specific signals into consistent indicators of operational state, availability, communication status, and event conditions. By abstracting vendor-specific complexities, the Core Real-Time Calculations enables unified fleet monitoring, reduces configuration overhead, and supports consistent reporting and alarm management across heterogeneous power conversion systems technologies.
The Core Real-Time Calculations template defines 24 calculations for Power Conversion Systems. This article is for logged-in users and includes full expression details for troubleshooting and configuration reference.
Template Definition
The Core Real-Time Calculations is defined below. Pertinent Expressions are provided for key calculations. Calculations are one of the following types:
Scale Equations — Algebraic or logical manipulations of input data done on the Bazefield edge buffer
Online Expressions — Algebraic or logical manipulations of input data done on the central Bazefield data engines (typically on a storage node). Similar to scale equations in purpose, but done in the centralized architecture.
Interval Expressions — Algebraic, logical, or advanced manipulations of input data done within a pre-defined aggregation interval (e.g. 5 minutes, 10 minutes, 1 hour, etc). These are typically done centrally on a storage node.
Details on the Point Names, Descriptions, Types, and Expressions are below.
Required for Bazefield Core Dashboard functionality
Optional for common additional data streams/sources
Calculation Definition Table
Name | Description | Type | Expression | Interval | Units | |
|---|---|---|---|---|---|---|
Available | Real time availability (1=available, 0=unavailable). | Calculation (Scale Eq) | EqualsAny($[@IEC-OperationState]:[NaN],2,3,4,5) ? 1 : 0 | Real-time | — | |
Charging | PCS is Charging. (Dictated by OEM Status or "Charging Threshold" object attribute.) | Calculation (Scale Eq) | $[@ActivePower]:[NaN] < {{getObjectAttribute(chargingThreshold)}} ? 1 : 0 | Real-time | — | |
ChargingPower | Power drawn by PCS battery container(s) while it is charging. (Dictated by "Charging Threshold" object attribute.) | Calculation (Scale Eq) | $[@ActivePower]:[NaN] < {{getObjectAttribute(chargingThreshold)}} ? ABS($[@ActivePower]:[NaN]) : 0 | Real-time | kW | |
CommunicationState | PCS communication state (0=connected, 1=No reply from server, 2=Session could not be created, 3=One of Baze core items failed, 4=Baze core items in flatline, 5=Baze core items in bad quality) | Calculation (Scale Eq) | SetQuality(192, IsNan($V) || (IsInfinity($V) && ($V_PREV == 1)) ? 1 : (IsInfinity($V) ? 4 : ($Q < 192 ? 5 : 0))) | Real-time | — | |
Discharging | PCS is Discharging. (Dictated by OEM Status or "Discharging Threshold" object attribute.) | Calculation (Scale Eq) | $[@ActivePower]:[NaN] > {{getObjectAttribute(dischargingThreshold)}} ? 1 : 0 | Real-time | — | |
DischargingPower | Power provided by PCS battery container(s) while it is discharging. (Dictated by "Discharging Threshold" object attribute.) | Calculation (Scale Eq) | $[@ActivePower]:[NaN] > {{getObjectAttribute(dischargingThreshold)}} ? ABS($[@ActivePower]:[NaN]) : 0 | Real-time | kW | |
EVENT-BadActivePower | Data quality flag if the Active Power measurement has not reported or is reporting bad/invalid data while charging or discharging. 0=good, 1=disconnected/null, 4=stale data, 5=bad quality | Calculation (Scale Eq) | $[@Standby]:[0] = 1 ? 0 : SetQuality(192, ($[@Charging]:[NaN] != 1 && $[@Discharging]:[NaN] != 1) ? 0 : (IsNan($[@ActivePower]) || (IsInfinity($V) && $V_PREV = 1)) ? 1 : IsInfinity($V) ? 4 : Q_INT("{{@}}-ActivePower")<192 ? 5 : 0) | Real-time | — | |
EVENT-BadStateOfCharge | Data quality flag if the State of Charge measurement has not reported or is reporting bad/invalid data. 0=good, 1=disconnected/null, 4=stale data, 5=bad quality | Calculation (Scale Eq) | $[@Standby]:[0] = 1 ? 0 : SetQuality(192, IsNan($[@StateOfCharge]) || (IsInfinity($V) && $V_PREV = 1) ? 1 : IsInfinity($V) ? 4 : Q_INT("{{@}}-StateOfCharge")<192 ? 5 : 0) | Real-time | — | |
EVENT-Charged | Boolean indicating that the PCS has reached its maximum charge capacity limit. (Dictated by "Fully Charged Threshold" object attribute.) | Calculation (Scale Eq) | $[@StateOfCharge]:[NaN] >= {{getObjectAttribute(fullyChargedThreshold)}} ? 1 : 0 | Real-time | — | |
EVENT-Charging | Boolean indicating that the PCS is charging for the last 5 minutes. Used to drive PCS events. | Calculation (Interval Exp.) | {TagTimeAvg([@Charging],Double.NaN) > 0.5 && TagEnd([@EVENT-Discharging]:[0]) == 0 ? 1 : 0} | 5 min | — | |
EVENT-Discharged | Boolean indicating that the PCS has reached its minimum charge capacity limit. (Dictated by "Fully Discharged Threshold" object attribute.) | Calculation (Scale Eq) | $[@StateOfCharge]:[NaN] <= {{getObjectAttribute(fullyDischargedThreshold)}} ? 1 : 0 | Real-time | — | |
EVENT-Discharging | Boolean indicating that the PCS is discharging for the last 5 minutes. Used to drive PCS events. | Calculation (Interval Exp.) | {TagMax([@Status]:[0]) == 5 || TagTimeAvg([@Discharging],Double.NaN) > 0.5 ? 1 : 0} | 5 min | — | |
EVENT-Idle | Boolean indicating that the PCS is neither charging nor discharging for the last 5 minutes. Used to drive PCS events. | Calculation (Interval Exp.) | {TagTimeAvg([@Standby],Double.NaN) > 0.5 && TagEnd([@EVENT-Charging]:[0]) == 0 && TagEnd([@EVENT-Discharging]:[0]) == 0 ? 1 : 0} | 5 min | — | |
EVENT-NotChargingWithSetpoint | Boolean indicating that the PCS has a negative (-) setpoint, but is not charging power | Calculation (Scale Eq) | ($[@SetpointActivePower]:[NaN] < 0 && $[@ActivePower]:[NaN] > 0) ? 1 : 0 | Real-time | — | |
EVENT-NotDischargingWithSetpoint | Boolean indicating that the PCS has a positive (+) setpoint, but is not discharging power | Calculation (Scale Eq) | ($[@SetpointActivePower]:[NaN] > 0 && $[@ActivePower]:[NaN] < 0) ? 1 : 0 | Real-time | — | |
IEC-OperationState | PCS high-level Operation State. (1=Stop, 2=Standby, 3=Starting, 4=Run, 99=Unknown.) To be configured per OEM. | Raw Data | — | Real-time | — | |
Mode | PCS Mode usually dictated by the EMS. (E.G., Grid support, VAR support, frequency support, arbitrage, black start) To be configured per OEM. | Raw Data | — | Real-time | — | |
Reporting | Boolean describing if the PCS is communicating based off of CommunicationState tag, 0=bad comms, 1=good comms | Calculation (Scale Eq) | $[@CommunicationState]:[NaN] > 0 ? 0 : 1 | Real-time | — | |
Running | PCS is running (IEC-OperationState = 4) | Calculation (Scale Eq) | EqualsAny($[@IEC-OperationState]:[NaN],3,4,5) ? 1 : 0 | Real-time | — | |
Standby | PCS is in Standby (IEC-OperationState = 2) | Calculation (Scale Eq) | $[@IEC-OperationState]:[NaN]=2 ? 1 : 0 | Real-time | — | |
Status | Single tag returning the current status of the PCS. (5 = Ancillary Services, 4 = Discharging, 3 = Charging, 2 = Standby, 1=Stopped, 99 = Unknown.) To be configured per OEM. | Raw Data | — | Real-time | — | |
Stopped | PCS is stopped (IEC-OperationState = 1) | Calculation (Scale Eq) | $[@IEC-OperationState]:[NaN]=1 ? 1 : 0 | Real-time | — | |
Unavailable | Boolean describing if the PCS is unavailable (IEC-OperationState = 1) 1=unavailable, 0=available. | Calculation (Scale Eq) | $[@IEC-OperationState]:[NaN]=1 || $[@IEC-OperationState]:[NaN]=6 ? 1 : 0 | Real-time | — | |
Unknown | Boolean describing if the PCS state is unknown (IEC-OperationState = 99) 1=unknown state, 0=known state. | Calculation (Scale Eq) | $[@IEC-OperationState]:[NaN]=99 ? 1 : 0 | Real-time | — |