{
  "node": {
    "id": "block:battery-ocv",
    "type": "Block",
    "label": "Battery with SOC-dependent OCV",
    "properties": {
      "id": "battery-ocv",
      "name": "Battery with SOC-dependent OCV",
      "kind": "studio",
      "summary": "Lumped battery with a linear SOC-dependent open-circuit voltage and series resistance.",
      "behavior": "The network solves terminal current and integrates charge into SOC. Positive current into the positive terminal charges the battery. Coulombic efficiency applies during charging; discharge uses unity.",
      "ports": [
        {
          "name": "p",
          "direction": "conserving",
          "unit": "V, A",
          "description": "Electrical terminal: potential and charge-conserving current."
        },
        {
          "name": "n",
          "direction": "conserving",
          "unit": "V, A",
          "description": "Electrical terminal: potential and charge-conserving current."
        },
        {
          "name": "ocv",
          "direction": "output",
          "unit": "V",
          "description": "Observed result from the solved component or sampled controller."
        },
        {
          "name": "socSignal",
          "direction": "output",
          "unit": "fraction",
          "description": "Observed result from the solved component or sampled controller."
        },
        {
          "name": "loss",
          "direction": "output",
          "unit": "W",
          "description": "Observed result from the solved component or sampled controller."
        },
        {
          "name": "voltage",
          "direction": "output",
          "unit": "V",
          "description": "Observed result from the solved component or sampled controller."
        },
        {
          "name": "current",
          "direction": "output",
          "unit": "A",
          "description": "Observed result from the solved component or sampled controller."
        },
        {
          "name": "power",
          "direction": "output",
          "unit": "W",
          "description": "Observed result from the solved component or sampled controller."
        }
      ],
      "parameters": [
        {
          "key": "emptyVoltageV",
          "label": "Empty Voltage V",
          "unit": "V",
          "default": 300,
          "min": 0.01,
          "max": 1000000,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "fullVoltageV",
          "label": "Full Voltage V",
          "unit": "V",
          "default": 420,
          "min": 0.01,
          "max": 1000000,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "resistanceOhm",
          "label": "Resistance Ohm",
          "unit": "ohm",
          "default": 0.08,
          "min": 1e-06,
          "max": 1000000,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "capacityAh",
          "label": "Capacity Ah",
          "unit": "Ah",
          "default": 100,
          "min": 1e-06,
          "max": 1000000000,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "initialSoc",
          "label": "Initial Soc",
          "unit": "fraction",
          "default": 0.2,
          "min": 0,
          "max": 1,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "coulombicEfficiency",
          "label": "Coulombic Efficiency",
          "unit": "fraction",
          "default": 1,
          "min": 0.01,
          "max": 1,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        }
      ],
      "equations": [
        "OCV = V_empty + (V_full - V_empty) * SOC",
        "I = (V_terminal - OCV) / R",
        "dSOC/dt = I * eta_charge / (3600 * Q_Ah), for I >= 0; I / (3600 * Q_Ah) otherwise",
        "P_loss = I^2 * R"
      ],
      "example": {
        "title": "Build CC–CV charging",
        "text": "An illustrative 100 Ah battery with a 420 V ceiling can use a 32 A cap. At the ceiling, current falls as OCV rises.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-home",
        "label": "Open the Studio example"
      },
      "limits": [
        "The battery uses linear OCV and fixed resistance. It does not automatically add aging, thermal dynamics or balancing.",
        "Internal model SOC is not an estimate of an unknown physical battery. OCV is linear and resistance fixed.",
        "A loss signal is not a predicted temperature. This network takes external temperature.",
        "This is deterministic policy comparison, not a forecast or economic optimum.",
        "Downstream unused capacity is not silently redistributed.",
        "All battery and converter limits still apply. A schedule is not an electrochemical law.",
        "These effective parameters are not a recipe. Lithium-ion does not use indefinite trickle or lead-acid float.",
        "This excludes AC waveforms, synchronization, communications and certification.",
        "No islanding switches, smart-panel circuits or protection coordination are simulated.",
        "The example assumes hardware compatibility; it does not establish connector or communication compatibility."
      ],
      "evidence": [
        "js/charging-control.js",
        "js/charging-scenarios.js",
        "docs/CHARGING_BLOCKS_SPEC.md",
        "js/physical-network.js",
        "rust-core/src/charging_control.rs"
      ],
      "caseIds": [
        "cccv",
        "ocv-charge-balance",
        "loss-accounting",
        "home-schedule",
        "depot-allocation",
        "opportunity-window",
        "low-current-maintenance",
        "v2g",
        "outage-support",
        "v2v"
      ],
      "type": "battery-ocv",
      "implementationId": "battery-ocv",
      "url": "https://lemonergy.com/learn/glossary/blocks/battery-ocv/",
      "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/battery-ocv/",
      "sourceFile": "block-library.json",
      "sourceRepository": "battery-design",
      "sourceRevision": "ef9802329b75bc15bb96885f8ed5d49425106696",
      "reviewed": "2026-10-27"
    }
  },
  "incoming": [
    {
      "id": "edge:usesBlock/cccv/2",
      "type": "usesBlock",
      "source": "workflow:cccv",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/depot-allocation/3",
      "type": "usesBlock",
      "source": "workflow:depot-allocation",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 3,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/home-schedule/3",
      "type": "usesBlock",
      "source": "workflow:home-schedule",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 3,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/loss-accounting/1",
      "type": "usesBlock",
      "source": "workflow:loss-accounting",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 1,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/low-current-maintenance/2",
      "type": "usesBlock",
      "source": "workflow:low-current-maintenance",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/ocv-charge-balance/0",
      "type": "usesBlock",
      "source": "workflow:ocv-charge-balance",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 0,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/opportunity-window/3",
      "type": "usesBlock",
      "source": "workflow:opportunity-window",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 3,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/outage-support/3",
      "type": "usesBlock",
      "source": "workflow:outage-support",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 3,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/v2g/2",
      "type": "usesBlock",
      "source": "workflow:v2g",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/v2v/0",
      "type": "usesBlock",
      "source": "workflow:v2v",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 0,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    },
    {
      "id": "edge:usesBlock/v2v/2",
      "type": "usesBlock",
      "source": "workflow:v2v",
      "target": "block:battery-ocv",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Battery with SOC-dependent OCV",
        "type": "battery-ocv",
        "role": "Stores charge and supplies terminal voltage",
        "settings": [
          "capacityAh",
          "initialSoc",
          "emptyVoltageV / fullVoltageV",
          "resistanceOhm",
          "Electrical ports p and n"
        ]
      }
    }
  ],
  "neighbors": [
    {
      "id": "workflow:cccv",
      "type": "Workflow",
      "label": "Build CC–CV charging",
      "properties": {
        "id": "cccv",
        "title": "Build CC–CV charging",
        "kind": "studio",
        "summary": "Native current and voltage regulation act against an explicit battery.",
        "steps": [
          "Open home charging and inspect settings.",
          "Choose immediate charging; inspect mode and completion."
        ],
        "example": "An illustrative 100 Ah battery with a 420 V ceiling can use a 32 A cap. At the ceiling, current falls as OCV rises.",
        "observe": "Completion needs current below cutoff at the CV ceiling for the configured dwell. Site-limited low current is different.",
        "limits": "The battery uses linear OCV and fixed resistance. It does not automatically add aging, thermal dynamics or balancing.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-home",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:depot-allocation",
      "type": "Workflow",
      "label": "Share a site supply",
      "properties": {
        "id": "depot-allocation",
        "title": "Share a site supply",
        "kind": "studio",
        "summary": "Multiple branches share one power cap.",
        "steps": [
          "Compare proportional and input-priority allocation.",
          "Lower the cap at fixed departure times."
        ],
        "example": "Three vehicles requesting 11 kW each under a 22 kW cap initially receive 7.33 kW each with proportional allocation.",
        "observe": "The site cap can hold while a vehicle misses its target.",
        "limits": "Downstream unused capacity is not silently redistributed.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-depot",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:home-schedule",
      "type": "Workflow",
      "label": "Compare charging policies",
      "properties": {
        "id": "home-schedule",
        "title": "Compare charging policies",
        "kind": "studio",
        "summary": "Compare authored schedules on the same hardware.",
        "steps": [
          "Set connection, tariff, window and target.",
          "Compare policies on this network."
        ],
        "example": "Connect a vehicle for eight hours with a cheaper window from hour 1 to hour 7.",
        "observe": "Compare cost, peak power and departure shortfall.",
        "limits": "This is deterministic policy comparison, not a forecast or economic optimum.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-home",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:loss-accounting",
      "type": "Workflow",
      "label": "Compare grid and battery energy",
      "properties": {
        "id": "loss-accounting",
        "title": "Compare grid and battery energy",
        "kind": "studio",
        "summary": "Separate energy and loss signals make efficiency visible.",
        "steps": [
          "Keep battery settings fixed.",
          "Change converter efficiency."
        ],
        "example": "7 kW battery-side power at 95% efficiency requires about 7.37 kW grid power and produces about 0.37 kW converter loss.",
        "observe": "Battery I²R loss differs from converter loss.",
        "limits": "A loss signal is not a predicted temperature. This network takes external temperature.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-home",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:low-current-maintenance",
      "type": "Workflow",
      "label": "Separate low current from float",
      "properties": {
        "id": "low-current-maintenance",
        "title": "Separate low current from float",
        "kind": "studio",
        "summary": "Bounded lithium charging and lead-acid maintenance are distinct.",
        "steps": [
          "Inspect the explicit chemistry setting.",
          "Observe CV taper followed by lower float voltage."
        ],
        "example": "The authored lead-acid example uses 14.4 V charging and 13.6 V float ceilings to expose different states.",
        "observe": "Precharge, completion and maintenance are different.",
        "limits": "These effective parameters are not a recipe. Lithium-ion does not use indefinite trickle or lead-acid float.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-maintenance",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:ocv-charge-balance",
      "type": "Workflow",
      "label": "Connect SOC and voltage",
      "properties": {
        "id": "ocv-charge-balance",
        "title": "Connect SOC and voltage",
        "kind": "studio",
        "summary": "The battery integrates charge and combines OCV with resistance.",
        "steps": [
          "Inspect capacity, initial SOC and OCV endpoints.",
          "Compare OCV with terminal voltage."
        ],
        "example": "OCV endpoints of 300 and 420 V give 360 V at 50% SOC. Charging at 10 A through 0.08 Ω adds 0.8 V.",
        "observe": "At unity coulombic efficiency, 10 A for 1 h adds ten percentage points to 100 Ah.",
        "limits": "Internal model SOC is not an estimate of an unknown physical battery. OCV is linear and resistance fixed.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-home",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:opportunity-window",
      "type": "Workflow",
      "label": "Charge during available stops",
      "properties": {
        "id": "opportunity-window",
        "title": "Charge during available stops",
        "kind": "studio",
        "summary": "Availability is an independent signal.",
        "steps": [
          "Inspect availability and preferred windows.",
          "Shorten a stop."
        ],
        "example": "A 15-minute stop at a 100 kW grid cap has a 25 kWh upper grid-energy bound before losses and battery limits.",
        "observe": "More power cannot recover disconnected time.",
        "limits": "All battery and converter limits still apply. A schedule is not an electrochemical law.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-opportunity",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:outage-support",
      "type": "Workflow",
      "label": "Supply an outage load",
      "properties": {
        "id": "outage-support",
        "title": "Supply an outage load",
        "kind": "studio",
        "summary": "V2H illustrates outage-triggered dispatch and reserve.",
        "steps": [
          "Set outage time, load and reserve.",
          "Compare reserve with departure target."
        ],
        "example": "An ideal 10 kWh usable budget supplies 3 kW for 3.33 h before losses and limits.",
        "observe": "Reserve can hold while departure target is unmet.",
        "limits": "No islanding switches, smart-panel circuits or protection coordination are simulated.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-v2h",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:v2g",
      "type": "Workflow",
      "label": "Model signed grid exchange",
      "properties": {
        "id": "v2g",
        "title": "Model signed grid exchange",
        "kind": "studio",
        "summary": "Explicit battery and converter exchange average power.",
        "steps": [
          "Set export window and SOC reserve.",
          "Inspect power and energy."
        ],
        "example": "−5 kW requests export; +5 kW requests import. 5 kW exported at 95% efficiency needs about 5.26 kW battery power.",
        "observe": "Reserve and converter limits can reduce export.",
        "limits": "This excludes AC waveforms, synchronization, communications and certification.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-v2g",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    },
    {
      "id": "workflow:v2v",
      "type": "Workflow",
      "label": "Transfer between two batteries",
      "properties": {
        "id": "v2v",
        "title": "Transfer between two batteries",
        "kind": "studio",
        "summary": "Conserving conversion couples donor and recipient.",
        "steps": [
          "Inspect donor reserve and recipient target.",
          "Compare energy drawn and delivered."
        ],
        "example": "5 kW delivered at 90% efficiency needs about 5.56 kW from the donor and produces about 0.56 kW loss.",
        "observe": "Both islands have references and energy flows.",
        "limits": "The example assumes hardware compatibility; it does not establish connector or communication compatibility.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-v2v",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    }
  ]
}
