I am working on a relatively simple model for a natatorium, based on an AirLoopHVAC and a PlantLoop. The air temperature setpoint is around 82 F with nighttime setback +/- 3 F for cooling/heating, and the pool temperature setpoint is around 80 F. The air humidity setpoint is around 50%, with nighttime setback +/- 10% for cooling/heating. I don't know if I will need the setbacks in the end, but for now, they conveniently mark the days in DVIEW. I have dehumidifying and humidifying setpoints, but am only doing dehumdification in the AirLoopHVAC. The PlantLoop seems to work just fine, but the AirLoopHVAC is giving me trouble once I enable dehumidification.
The AirLoopHVAC includes an AirLoopHVACOutdoorAirSystem (with HeatExchangerAirToAirSensibleAndLatent and FanConstantVolume), a CoilCoolingDXTwoStageWithHumidityControlMode, a CoilHeatingDesuperheater (inserted by simple Python script), a CoilHeatingElectric, a FanConstantVolume and a SetpointManagerSingleZoneReheat. The latter references the ThermalZone with the SwimmingPoolIndoor, which in turn is part of the PlantLoop. This works well as such, and while the ThermalZone humidity is not controlled (actively), the cooling coil brings humidity down to about 65% or so whenever it runs.
Now, when I add a SetpointManagerSingleZoneHumidityMaximum right behind the cooling coil, referencing that same ThermalZone, and I also add the EnergyPlus measure that adds "CoolReheat,Yes,Yes" to the CoilSystemCoolingDX which the translator generates, the trouble starts.
I have included below images of the AirLoopHVAC and the PlantLoop for clarification, and then images of the temperatures and cooling and heating rates (blue = cooling, brown = desuperheater, orange = electric) for a week in January and a week in July. As you can see, the ThermalZone temperature exceeds setpoint at almost all times where one expect it to follow setpoint. Somewhere I read that the cooling coil stops as soon as the humidity setpoint is set, but not even that seems to be true here because the humidity rarely touches 60%, let alone 50% at daytime.




So, I am just looking for any advice on humidity control with this type of cooling coil, without loosing temperature control. There is a good YouTube out there, but it is for a CoilCoolingWater, which by comparison is easy and really works as advertised. Is there a magic trick, another measure to run, another setting to be checked? It seems to me this is such a common requirement, it ought to be easy.
By the way, the fact that I could get the CoilHeatingDesuperheater to kick in at all is pure accident. I had done that successfully once before in an experimental model, but it never worked again thereafter in my actual model, until I deleted all HVAC components and reinserted them, including setpoint managers. It was an all-day affair to debug that.
.>>> Update <<<.
I spent many hours looking into this further. The following are some additional thoughts I developed.
1) I moved CoilCoolingDXTwoStageWithHumidityControlMode into an AirLoopHVACUnitarySystem and it seems to work well without adding any SetpointManagers, leaving control on Load, rather than Setpoint. So, AirLoopHVACOutdoorAirSystem and AirLoopHVACUnitarySystem are the only components in AirLoopHVAC.
2) Though Google AI is very much hit and miss when it comes to OpenStudio/EnergyPlus, it does seem to suggest that CoilCoolingDXTwoStageWithHumidityControlMode is not even meant to be in an AirLoopHVAC because it is too complicated to control, and only AirLoopHVACUnitary System knows how to do that.
3) I don't know that CoilHeatingDesuperheater adds any value to this. It seems to be an uncontrolled coil that just runs whenever the associated cooling coil runs and in this configuration seems to simply reduce the cooling capacity of the CoilCoolingDXTwoStageWithHumidityControlMode. Maybe there are other applications for CoilHeatingDesuperheater, but I doubt this is it. Maybe CoilCoolingDXTwoStageWithHumidityControlMode even does some desuperheating behind the scenes on its own, though the BigLadder documentation is not obvious on this to me.
4) Under 1) I therefore abandoned CoilHeatingDesuperheater and used CoilHeatingElectric. I do think AirLoopHVACUnitarySystem does need both a heating coil and a supplemental heating coil to make this dehumidification work properly. So that is why I would like to know whether CoilCoolingDXTwoStageWithHumidityControlMode does some internal desuperheating for reheating after subcooing, because this is important in natatorium dehumidifiers.
.>>> Update <<<.
I believe my efforts have met with success, using Coil:Cooling:DX, based on the Lixing Gu paper from 2023 in IBPSA and the EnergyPlus example file UnitarySystem_SubcoolReheatDX.idf. The file uses 0.76, 0.66 and 0.16 for the critical SHR values, but I ended up adjusting them to 0.6, 0.5 and 0.15 at first and then even 0.4, 0.2 and 0.1 in the end.
My model Unitary System has Coil:Cooling:DX, Coil:Heating:DX:SingleStage and Coil:Heating Electric, the latter being the supplemental heating coil. I use all fixed capacities and flow rates, so no auto-sizing was used. With that, I get the following, with temperature and humidity in the top plot and cooling and heating rates in the bottom plot. In the summer, temperature and humidity are controlled as desired, in the winter there is trouble.

After some experimentation, I increased Coil:Heating:Electric from 55 kW to 112.5 kW, and I get the following. All seems well, as far as I can tell.

Then, after some more experimentation, I arrived at the last set of the SHR values mentioned above, and with that, I could go back to 55 kW, so that all capacities now are as found during the site visit to the natatorium.