diff --git a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java index a3062964a6118a328242a35b2a73d70670aab6f4..34089fa89e8190e5343b45ab2216bb25b11581de 100644 --- a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java +++ b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java @@ -59,8 +59,11 @@ public class PidBlock extends TranslatorBlock + " long error = setpoint - input; // get error\n" + " out = kp * error; //P output\n\n"; if(integrative) { - functionCode +=" long cumError = cumError + error * elapsedTime; // compute integral\n" - + " out = out + ki * cumError; //I output\n\n"; + functionCode +=" long cumError = cumError + error * elapsedTime; // compute integral\n"; + if(limited) { + functionCode += " cumError = constrain(cumError, limitLow, limitHigh); //limit integral against windup"; + } + functionCode += " out = out + ki * cumError; //I output\n\n"; } if(derivative) { functionCode +=" long rateError = (error - lastError) / elapsedTime; // compute derivative\n"