Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of AutomationElements by
Revision 2:a45cbb512c99, committed 2017-11-25
- Comitter:
- tgw
- Date:
- Sat Nov 25 02:03:00 2017 +0000
- Parent:
- 1:b9e11da0f2eb
- Commit message:
- test
Changed in this revision
diff -r b9e11da0f2eb -r a45cbb512c99 AutomationElements.h --- a/AutomationElements.h Thu Jan 22 12:44:37 2015 +0000 +++ b/AutomationElements.h Sat Nov 25 02:03:00 2017 +0000 @@ -4,7 +4,7 @@ #include "DT1.h" #include "I.h" #include "PDT1.h" -#include "PI.h" +#include "PI1.h" #include "PT1.h" #include "PT2.h" #include "PT2cc.h"
diff -r b9e11da0f2eb -r a45cbb512c99 PI.cpp
--- a/PI.cpp	Thu Jan 22 12:44:37 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-#include "PI.h"
-
-PI::PI() {
-    u = y = u_p1 = y_p1 = 0;
-    setParameters(1, 1, 0.1);
-    setOutputLimits(0, 1);
-    setOperationMode(automatic);
-}
-
-PI::PI(double K_R_, double T_I_, double T_d_) {
-    u = y = u_p1 = y_p1 = 0;
-    setParameters(K_R_, T_I_, T_d_);
-    setOutputLimits(0, 1);
-    setOperationMode(automatic);
-}
-
-void PI::setParameters(double K_R_, double T_I_, double T_d_) {
-    if (T_d_ > 0)
-        T_d = T_d_;
-    else
-        T_d = 0.1;
-    if (T_I_ > 0)
-        T_I = T_I_;
-    else
-        T_I = 1;
-    K_R = K_R_;
-}
-
-void PI::setOutputLimits(double lowerOutputLimit, double upperOutputLimit) {
-    if (upperOutputLimit > lowerOutputLimit) {
-        y_min = lowerOutputLimit;
-        y_max = upperOutputLimit;
-    }
-}
-
-void PI::setOperationMode(Mode newOperationMode) {
-    // Bumpless transfer from manual to automatic mode
-    if (operationMode == manual && newOperationMode == automatic) {
-        y = y_p1 = y_manual;
-        u = u_p1 = 0;
-    }
-    // Bumpless transfer from automatic to manual mode
-    else if (operationMode == automatic && newOperationMode == manual) {
-        y_manual = y;
-    }
-    operationMode = newOperationMode;
-}
-
-void PI::setOutputManually(double u_C) {
-    y_manual = u_C;
-}
-
-double PI::out() {
-    if (operationMode == automatic) {
-        y = y_p1 + K_R * u + K_R * (T_d / T_I - 1) * u_p1;
-    } else if (operationMode == manual) {
-        y = y_manual;
-    }
-    
-    if (y > y_max)
-        y = y_max;
-    else if (y < y_min)
-        y = y_min;
-    
-    y_p1 = y;    
-    u_p1 = u;
-    return y;
-}
-
-void PI::in(double u_) {
-    u = u_;
-}
\ No newline at end of file
diff -r b9e11da0f2eb -r a45cbb512c99 PI.h
--- a/PI.h	Thu Jan 22 12:44:37 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#ifndef PI_H
-#define PI_H
-
-#include "mbed.h"
-
-/** Data type for choosing the operation mode of the controller ("automatic" or "manual"). */
-enum Mode {automatic, manual};
-
-/** Transfer function of a PI controller with output limitation, anti-windup and bumpless automatic and manual mode.
- * G_C(s) = U_C(s) / E(s) = K_C ( 1 + 1 / (T_I s) ) = K_C (1 + T_I s) / (T_I s)
- *
- * K_C is the controller gain, and T_I is the controller integral time constant in seconds.
- *
- * Author(s): TVZ Mechatronics Team
- *
- */
-class PI {
-    public:
-        /** Default constructor.
-         * K_C = 1, T_I = 1 s, sampleTime = 0.1 s.
-         */
-        PI();
-        /** PI controller gain, integral time constant in seconds and sample time in seconds. */
-        PI(double K_C, double T_I, double sampleTime);
-        /** Update PI controller gain, integral time constant and sample time. */
-        void setParameters(double K_C, double T_I, double sampleTime);
-        /** Set the controller lower and upper output limit. */
-        void setOutputLimits(double lowerOutputLimit, double upperOutputLimit);
-        /** Set the operation mode to "automatic" or "manual". */
-        void setOperationMode (Mode operationMode);
-        /** Set the controller output manually. */
-        void setOutputManually(double u_C);
-        /** Calculate the controller output u_C. */
-        double out();
-        /** Set the PI controller input e = SP - PV (setpoint - process value). */
-        void in(double e);
-    private:
-        double K_R, T_I, T_d, y, y_p1, u, u_p1, y_max, y_min, y_manual;
-        Mode operationMode;
-};
-
-#endif // PI_H
\ No newline at end of file
diff -r b9e11da0f2eb -r a45cbb512c99 PI1.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PI1.cpp	Sat Nov 25 02:03:00 2017 +0000
@@ -0,0 +1,72 @@
+#include "PI1.h"
+
+PI1::PI1() {
+    u = y = u_p1 = y_p1 = 0;
+    setParameters(1, 1, 0.1);
+    setOutputLimits(0, 1);
+    setOperationMode(automatic);
+}
+
+PI1::PI1(double K_R_, double T_I_, double T_d_) {
+    u = y = u_p1 = y_p1 = 0;
+    setParameters(K_R_, T_I_, T_d_);
+    setOutputLimits(0, 1);
+    setOperationMode(automatic);
+}
+
+void PI1::setParameters(double K_R_, double T_I_, double T_d_) {
+    if (T_d_ > 0)
+        T_d = T_d_;
+    else
+        T_d = 0.1;
+    if (T_I_ > 0)
+        T_I = T_I_;
+    else
+        T_I = 1;
+    K_R = K_R_;
+}
+
+void PI1::setOutputLimits(double lowerOutputLimit, double upperOutputLimit) {
+    if (upperOutputLimit > lowerOutputLimit) {
+        y_min = lowerOutputLimit;
+        y_max = upperOutputLimit;
+    }
+}
+
+void PI1::setOperationMode(Mode newOperationMode) {
+    // Bumpless transfer from manual to automatic mode
+    if (operationMode == manual && newOperationMode == automatic) {
+        y = y_p1 = y_manual;
+        u = u_p1 = 0;
+    }
+    // Bumpless transfer from automatic to manual mode
+    else if (operationMode == automatic && newOperationMode == manual) {
+        y_manual = y;
+    }
+    operationMode = newOperationMode;
+}
+
+void PI1::setOutputManually(double u_C) {
+    y_manual = u_C;
+}
+
+double PI1::out() {
+    if (operationMode == automatic) {
+        y = y_p1 + K_R * u + K_R * (T_d / T_I - 1) * u_p1;
+    } else if (operationMode == manual) {
+        y = y_manual;
+    }
+    
+    if (y > y_max)
+        y = y_max;
+    else if (y < y_min)
+        y = y_min;
+    
+    y_p1 = y;    
+    u_p1 = u;
+    return y;
+}
+
+void PI1::in(double u_) {
+    u = u_;
+}
\ No newline at end of file
diff -r b9e11da0f2eb -r a45cbb512c99 PI1.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PI1.h	Sat Nov 25 02:03:00 2017 +0000
@@ -0,0 +1,42 @@
+#ifndef PI1_H
+#define PI1_H
+
+#include "mbed.h"
+
+/** Data type for choosing the operation mode of the controller ("automatic" or "manual"). */
+enum Mode {automatic, manual};
+
+/** Transfer function of a PI controller with output limitation, anti-windup and bumpless automatic and manual mode.
+ * G_C(s) = U_C(s) / E(s) = K_C ( 1 + 1 / (T_I s) ) = K_C (1 + T_I s) / (T_I s)
+ *
+ * K_C is the controller gain, and T_I is the controller integral time constant in seconds.
+ *
+ * Author(s): TVZ Mechatronics Team
+ *
+ */
+class PI1 {
+    public:
+        /** Default constructor.
+         * K_C = 1, T_I = 1 s, sampleTime = 0.1 s.
+         */
+        PI1();
+        /** PI controller gain, integral time constant in seconds and sample time in seconds. */
+        PI1(double K_C, double T_I, double sampleTime);
+        /** Update PI controller gain, integral time constant and sample time. */
+        void setParameters(double K_C, double T_I, double sampleTime);
+        /** Set the controller lower and upper output limit. */
+        void setOutputLimits(double lowerOutputLimit, double upperOutputLimit);
+        /** Set the operation mode to "automatic" or "manual". */
+        void setOperationMode (Mode operationMode);
+        /** Set the controller output manually. */
+        void setOutputManually(double u_C);
+        /** Calculate the controller output u_C. */
+        double out();
+        /** Set the PI controller input e = SP - PV (setpoint - process value). */
+        void in(double e);
+    private:
+        double K_R, T_I, T_d, y, y_p1, u, u_p1, y_max, y_min, y_manual;
+        Mode operationMode;
+};
+
+#endif // PI1_H
\ No newline at end of file
    