Add Plant Manager dynamic operating capacity calls to Chiller:Electric:EIR - #11727
Add Plant Manager dynamic operating capacity calls to Chiller:Electric:EIR#11727rraustad wants to merge 8 commits into
Conversation
| Real64 capacityModifierFuncTemp = Curve::CurveValue(state, this->ChillerCapFTIndex, loadSideOutletSetpointTemp, sourceInletTemp); | ||
| return this->RefCap * capacityModifierFuncTemp; | ||
| } | ||
|
|
There was a problem hiding this comment.
I added this new function, wrote a unit test that tested this function, and then tried to prove the value using a test file. I found no changes at all between develop and this branch and then realized that the Plant Manager was not calling the getDynamicMaxCapacity function in places that mattered. The new calls were added to PlantCondLoopOperation such that the plant manager now knows the dynamic capacity of the EIR chiller.
| "Curve:Biquadratic, Air cooled CentCapFT, 0.257896, 0.0389016, -0.00021708, 0.0468684, -0.00094284, -0.00034344, 5, 10, 24, 35, , , , , ;", | ||
| "Curve:Biquadratic, Air cooled CentEIRFT, 0.933884, -0.058212, 0.00450036, 0.00243, 0.000486, -0.001215, 5, 10, 24, 35, , , , , ;", | ||
| "Curve:Biquadratic, Air cooled CentCapFT, 0.257896, 0.0389016, -0.00021708, 0.0468684, -0.00094284, -0.00034344, 5, 10, 5, 35, , , , , ;", | ||
| "Curve:Biquadratic, Air cooled CentEIRFT, 0.933884, -0.058212, 0.00450036, 0.00243, 0.000486, -0.001215, 5, 10, 5, 35, , , , , ;", |
There was a problem hiding this comment.
The minimum input limit for OAT in these curves was not providing the change expected when calling getDynamicMaxCapacity, because OAT was 12C and 5C in this unit test, so the minimum OAT limit for the curve object was expanded.
|
A test file shows the impact of this change. Starting with test file ElectricEIRChiller, the plant components were changed to have 2 equally sized chillers but the CAPFT curve was adjusted for 1 of the chillers so that chiller had slightly higher capacity. The plant loop was set to use UniformPLR as the Load Distribution Scheme: ElectricEIRChiller_2Chillers.idf.txt The results show that this branch dispatches the chillers in a uniform manner based on PLR. In develop, the Plant Manager believes the chillers are the same size and so dispatches the load equally between the chillers (top row). This results in different PLRs for the chillers because they have different real time capacities. In this branch the Plant Manager knows a more accurate representation of instantaneous chiller capacity such that the chillers can be dispatched correctly to yield the same PLR (UniformPLR) for each chiller.
|
|
|
|
@mitchute there were 2 integration failures. Neither of these files have Chiller:Electric:EIR yet both were calling the new function (actually these 2 flles were calling getDynamicMaxCapacity in PlantLoopHeatPumpEIR and ElectricChillers, respectively). in ChillerElectricEIR.cc when I think they should not have (wrong plant component type). I am not sure what is causing that so am asking for some guidance. |
|
|
|
Ah, so this is the reason. Maybe this is OK as-is since it appears to return the correct RefCap (both test files) which is what it was doing before this new function was added. I am just not sure how to calculate a CapFT for this chiller type, or how to discern what chiller type is calling (e.g., Chiller:Electric:ASHRAE205 or Chiller:Electric:EIR). The CapFT index being 0 for these 2 files that failed is a clue to something that needs fixing, I'm just not sure what that is although the same answer as before is being passed back to the plant so this issue does not pose an immediate problem. |
|
|
Preserve known zero capacity across all plant load distribution schemes. Limit optimal and setpoint-based dispatch to the dynamic maximum. Account for EIR chiller MaxPLR, fouling, setpoints, and condenser temperature while preserving ASHRAE 205 behavior.
964634b to
aa691a9
Compare
|
|
Preserve component design maximum capacity so Optimal dispatch can scale its target load while maintaining the configured optimum PLR. Treat known dynamic zero capacity as a valid operating condition in UniformPLR and SequentialUniformPLR without emitting repeated warnings. Add unit coverage for zero capacity, restored capacity, optimum-load scaling, redistribution, and warning suppression.
| ChangeInLoad = min(ChangeInLoad, dynamicMaxLoad); | ||
| } | ||
| } else if (hasDynamicMaxLoad) { | ||
| ChangeInLoad = min(dynamicMaxLoad, std::abs(RemLoopDemand)); |
There was a problem hiding this comment.
We need to discuss this on the call tomorrow.
- calculate variable-speed tower capacity without altering warning state - use the maximum-range fallback when the tower root is outside model bounds - exclude known-zero dynamic capacities from UniformLoad allocation - add coverage for quiet tower queries and zero-capacity load sharing
Preserve design minimum PLR when available component capacity changes, and apply the scaled minimum to uniform PLR and component-setpoint dispatch. Add tests for reduced and known-zero dynamic capacity.
|
|

Pull request overview
Description of the purpose of this PR
The plant loop Plant Manager dispatches load to plant components according to the PlantLoop Load Distribution Scheme. In order for the Plant Manager to accurately dispatch plant components the Plant Manager must have accurate knowledge of instantaneous operating capacity. For equipment that changes operating capacity based on, for example, leaving water temperature or outdoor air conditions, the instantaneous operating capacity changes as operating conditions change. Fro this reason, a worker function was added to reports back to the Plant Manager the instantaneous operating capacity of the Chiller:Electric:EIR object.
Pull Request Author
Reviewer