From f1fa6caabd9f8036c7fa0bb33f2603e9217cd2e6 Mon Sep 17 00:00:00 2001 From: SudhakarKuma Date: Sat, 16 Oct 2021 02:06:49 +0530 Subject: Add files for the P controller --- P-Controller/tankPController.py | 57 ++++++++++++++++++++++++++++++++++++++ P-Controller/tankRPiModel.mo | 8 ++++++ P-Controller/tankRPiModel_res.mat | Bin 0 -> 32491 bytes P-Controller/tankSysOMP.mo | 13 +++++++++ PI-Controller/tankRPiModel.mo | 8 ++++++ PI-Controller/tankSysOMPI.mo | 16 +++++++++++ 6 files changed, 102 insertions(+) create mode 100644 P-Controller/tankPController.py create mode 100644 P-Controller/tankRPiModel.mo create mode 100644 P-Controller/tankRPiModel_res.mat create mode 100644 P-Controller/tankSysOMP.mo create mode 100644 PI-Controller/tankRPiModel.mo create mode 100644 PI-Controller/tankSysOMPI.mo 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 Binary files /dev/null and b/P-Controller/tankRPiModel_res.mat 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; -- cgit