summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSudhakarKuma2021-10-16 02:06:49 +0530
committerSudhakarKuma2021-10-16 02:06:49 +0530
commitf1fa6caabd9f8036c7fa0bb33f2603e9217cd2e6 (patch)
treeb39c4055d2a5142fbf7d4135054bfa84a9260055
downloadOM-OPCUA-Control-f1fa6caabd9f8036c7fa0bb33f2603e9217cd2e6.tar.gz
OM-OPCUA-Control-f1fa6caabd9f8036c7fa0bb33f2603e9217cd2e6.tar.bz2
OM-OPCUA-Control-f1fa6caabd9f8036c7fa0bb33f2603e9217cd2e6.zip
Add files for the P controller
-rw-r--r--P-Controller/tankPController.py57
-rw-r--r--P-Controller/tankRPiModel.mo8
-rw-r--r--P-Controller/tankRPiModel_res.matbin0 -> 32491 bytes
-rw-r--r--P-Controller/tankSysOMP.mo13
-rw-r--r--PI-Controller/tankRPiModel.mo8
-rw-r--r--PI-Controller/tankSysOMPI.mo16
6 files changed, 102 insertions, 0 deletions
diff --git a/P-Controller/tankPController.py b/P-Controller/tankPController.py
new file mode 100644
index 0000000..40f2d60
--- /dev/null
+++ b/P-Controller/tankPController.py
@@ -0,0 +1,57 @@
+from opcua import Client
+from opcua import ua
+import time
+import logging
+
+# Define the URL on which the server is broadcasting
+url = "opc.tcp://192.168.0.171:4841"
+
+if __name__ == "__main__":
+ client = Client(url)
+ logging.basicConfig(level=logging.WARN)
+
+ try:
+ client.connect()
+ print("Client connected!")
+
+ run = client.get_node(ua.NodeId(10001, 0))
+ run.set_value(True)
+ # print("Current state of run : {}".format(run.get_value()))
+
+ root = client.get_root_node()
+ # print("Root node is : ", root)
+
+ objects = client.get_objects_node()
+ # print("Objects\' node is : ", objects)
+
+ # Find the IDs for MV, PV
+ H_ID = 6
+ U_ID = 8
+
+ modelicaId = {}
+ modelicaId = objects.get_children()
+
+ # Desired setpoint
+ SP = 1
+
+ # Controller gain
+ Kc = 0.2
+
+ while True:
+ # Evaluate the PV and MV
+ PV = modelicaId[H_ID].get_value()
+ MV = Kc * (SP - PV)
+ time.sleep(0.1)
+ modelicaId[U_ID].set_value(MV)
+
+ # print("H value is: ", modelicaId[H_ID].get_value())
+ # print("Controller effort is: ", modelicaId[U_ID].get_value())
+ # time.sleep(0.1)
+ # print("="*40)
+
+ except KeyboardInterrupt:
+ print("Stopping sequence!")
+
+ finally:
+ print("Done!")
+ client.disconnect()
diff --git a/P-Controller/tankRPiModel.mo b/P-Controller/tankRPiModel.mo
new file mode 100644
index 0000000..c3eff19
--- /dev/null
+++ b/P-Controller/tankRPiModel.mo
@@ -0,0 +1,8 @@
+model tankRPiModel
+ parameter Real K = 1 "Plant gain";
+ parameter Real tau = 2 "Plant time const";
+ Real y(start = 0) "Plant output";
+ input Real u "Controller effort from the client";
+equation
+ tau * der(y) + y = K * u;
+end tankRPiModel;
diff --git a/P-Controller/tankRPiModel_res.mat b/P-Controller/tankRPiModel_res.mat
new file mode 100644
index 0000000..e8e5389
--- /dev/null
+++ b/P-Controller/tankRPiModel_res.mat
Binary files differ
diff --git a/P-Controller/tankSysOMP.mo b/P-Controller/tankSysOMP.mo
new file mode 100644
index 0000000..5c9a849
--- /dev/null
+++ b/P-Controller/tankSysOMP.mo
@@ -0,0 +1,13 @@
+model tankSysOMP
+ parameter Real K = 1 "Plant gain";
+ parameter Real Kc = 0.2 "Controller gain";
+ parameter Real r = 1 "Setpoint";
+ parameter Real tau = 2 "Plant time const";
+ Real y(start = 0) "Plant output";
+ Real error "Deviation from the setpoint";
+ Real u "Controller effort";
+equation
+ error = r - y;
+ Kc * error = u;
+ tau * der(y) + y = K * u;
+end tankSysOMP;
diff --git a/PI-Controller/tankRPiModel.mo b/PI-Controller/tankRPiModel.mo
new file mode 100644
index 0000000..f69ce63
--- /dev/null
+++ b/PI-Controller/tankRPiModel.mo
@@ -0,0 +1,8 @@
+model tankRPiModel
+ parameter Real K = 2 "Plant gain";
+ parameter Real tau = 2 "Plant time const";
+ Real y(start = 0) "Plant output";
+ input Real u "Controller effort from the client";
+equation
+ tau * der(y) + y = K * u;
+end tankRPiModel;
diff --git a/PI-Controller/tankSysOMPI.mo b/PI-Controller/tankSysOMPI.mo
new file mode 100644
index 0000000..a050cec
--- /dev/null
+++ b/PI-Controller/tankSysOMPI.mo
@@ -0,0 +1,16 @@
+model tankSysOMPI
+ parameter Real K = 2 "Plant gain";
+ parameter Real Kc = 0.2 "Controller gain";
+ parameter Real r = 1 "Setpoint";
+ parameter Real tau = 2 "Plant time const";
+ parameter Real Ti = 5 "Integral time const";
+ Real y(start = 0) "Plant output";
+ Real error "Deviation from the setpoint";
+ Real u "Controller effort";
+ Real x "state variable for controller";
+equation
+ error = r - y;
+ der(x) = error / Ti;
+ Kc * (error + x) = u;
+ tau * der(y) + y = K * u;
+end tankSysOMPI;