diff --git a/src/specificClass.js b/src/specificClass.js index 7dcc278..0499b49 100644 --- a/src/specificClass.js +++ b/src/specificClass.js @@ -1281,6 +1281,25 @@ class MachineGroup { return; } + // Skip abort + redispatch when the demand hasn't changed beyond a + // small tolerance. PS ticks every 1 s and re-fires the same demand + // while the basin level evolves slowly; without this guard, every + // PS tick aborted in-flight pump moves before they could finish + // (move duration ~0.4 s, abort cycle 1 s, but each abort + // immediately re-issued the same setpoint, so pumps got stuck + // ramping from the same starting position to the same target + // forever). Tolerance is 0.5 % — small enough that real demand + // changes still propagate, big enough to filter PS hysteresis + // float jitter. + const prev = this._lastDemandQ; + const unchanged = Number.isFinite(prev) + && Math.abs(demandQ - prev) < Math.max(0.5, Math.abs(prev) * 0.005); + if (unchanged) { + this.logger.debug(`Demand ${demandQ} unchanged from ${prev}; skipping abort+redispatch`); + return; + } + this._lastDemandQ = demandQ; + //abort current movements await this.abortActiveMovements("new demand received");