From 52bf6d1014f944a1477b6139207fcf90be5af910 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Thu, 16 Dec 2021 12:01:07 +0100
Subject: [PATCH] added constrain to pid integral

---
 .../com/ardublock/translator/block/operators/PidBlock.java | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

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 a306296..34089fa 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" 
-- 
GitLab