summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py')
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py b/macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py
new file mode 100644
index 0000000000..ebcea45cf4
--- /dev/null
+++ b/macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import print_function
+import time
+from Model import Model
+from PlantOPC import PlantOPC
+import OpenOPC
+import numpy
+import matplotlib.pyplot as plt
+
+opc = OpenOPC.client() # Cria o cliente OPC; o servidor é o RSLinx
+opc.connect('RSLinx OPC Server') # Essa string não muda; conecta ao RSLinx
+
+pC = numpy.array([0.5, 0.6, 0.7, 0.5 + 0.4j, 0.5 - 0.4j])
+Ki = 0.183111320328469
+Kp = numpy.array([0.007993734748865, 0.009705988539721, -0.004630469582507, -0.000426479250745])
+
+t = numpy.array(range(0, n_t)) * Ts
+# time = linspace(0,10,n_t)
+# instantiate the plant that will be used, it should be a subclass of Plant
+
+plant = PlantOPC(opc,'[CLP_AB]position','[CLP_AB]speed',init_pos)
+model = Model(n, A, B, C, D, Ak, Bk, Ck, Q, R, Kp, Ki, epsilon, Ts, plant)
+
+start = time.clock()
+t_old = start
+times_p = []
+for i in range(0, n_t):
+ y_out[i] = model.closed_loop(y_topo[i],y_fundo[i])
+ #time.sleep(0.1)
+plant.kill()
+print("Total simulation time: {}s".format(time.clock() - start))
+
+y_out_phased = y_out[5:n_t]
+t_out_phased = t[0:n_t-5]
+##plt.plot(t, y_out[0:n_t], label='out')
+plt.plot(t_out_phased,y_out_phased, label='out_n')
+plt.plot(t, y_fundo[0:n_t], label='ref fundo')
+plt.plot(t, y_topo[0:n_t], label='ref topo (in)')
+plt.legend(loc=4)
+plt.xlabel('time (s)')
+plt.ylabel('position (m)')
+plt.title('Position of cart - close loop')
+plt.grid(True)
+# plt.show()
+plt.savefig("resultados/closed_loop_trajetoria_rafael.png", format='png', dpi=200)
+File = open('resultados/trajetoria_rafael.npz','wb')
+numpy.savez(File, t=t, y_topo=y_topo, y_fundo=y_fundo, y_out=y_out, pC=pC, Ki=Ki, Kp=Kp)
+File.close()
+
+opc.close() # Encerra a sessão