mirror of
https://github.com/NickNair/Adaptive-PID-controller.git
synced 2026-02-05 17:59:42 +08:00
132 lines
2.8 KiB
Python
132 lines
2.8 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
from numpy.lib.function_base import append
|
|
|
|
from singlearea import *
|
|
|
|
import RBF
|
|
|
|
|
|
def y(yd):
|
|
|
|
rbf = RBF.RBF( aw = 0.0003, av = 0.021, au = 0.025 , asig = 0.01, gamma = 0.9)
|
|
|
|
Tg = 0.08
|
|
Tt = 0.3
|
|
M = 0.2
|
|
D = 0.01
|
|
R = 2
|
|
T = dt = 1/400
|
|
|
|
yt_1 = 0
|
|
yt_2 = 0
|
|
yt_3 = 0
|
|
|
|
System = SingleArea( Tg , Tt , M , D , R , T , yt_1 , yt_2 , yt_3 )
|
|
|
|
|
|
|
|
initial_states = [ yt_1, yt_2 , yt_3]
|
|
|
|
plot_data = {"ut":[] , "pl" : [] , "delF":[] , 'KI' : [], 'KP' : [] , 'KD' : [] , "time" : []}
|
|
|
|
|
|
Ki = 0
|
|
Kd = 0
|
|
Kp = 0
|
|
|
|
ut_1 = 0
|
|
|
|
t = 10
|
|
|
|
y=[]
|
|
x=[]
|
|
|
|
|
|
for i in range(0, int(t/dt) ):
|
|
|
|
# print(System.yt_1)
|
|
e_t = 0 - System.yt_1
|
|
del_y = System.yt_1 - System.yt_2
|
|
del2_y = System.yt_1 - 2*System.yt_2 + System.yt_3
|
|
|
|
rbf.X[:,0] = [ e_t , -del_y , -del2_y]
|
|
rbf.HiddenLayer()
|
|
rbf.OutputLayer()
|
|
|
|
|
|
# ut_1 = ut_1 + 0.00043*e_t - 0.01*del_y - 0*del2_y
|
|
ut_1 = ut_1 + rbf.K[1]*e_t - rbf.K[0]*del_y - rbf.K[2]*del2_y
|
|
|
|
plot_data["ut"].append(ut_1)
|
|
|
|
|
|
|
|
PL = 0.2 if( i*dt >= 0.2 ) else 0
|
|
plot_data["pl"].append(PL)
|
|
|
|
Ut = [ [ut_1] , [ PL] ]
|
|
|
|
System.Output(Ut)
|
|
|
|
print(rbf.K)
|
|
|
|
rbf.Update(0 ,System.Y[0,0] ,System.yt_1 , System.yt_2, System.yt_3 )
|
|
|
|
plot_data["delF"].append(System.Y[0,0])
|
|
plot_data["time"].append(i*dt)
|
|
plot_data["KI"].append(rbf.K[1])
|
|
plot_data["KP"].append(rbf.K[0])
|
|
plot_data["KD"].append(rbf.K[2])
|
|
|
|
return plot_data,initial_states
|
|
|
|
|
|
if __name__=="__main__":
|
|
|
|
|
|
yd = [0 for i in range(10*400) ]
|
|
|
|
|
|
## Generate Reference array here
|
|
|
|
plot_data,i = y(yd)
|
|
|
|
|
|
plt.subplot(2,2,1)
|
|
plt.plot(plot_data["time"],plot_data["pl"], label="Reference Signal")
|
|
plt.title( "Load vs Time")
|
|
plt.ylabel(" Output from System ")
|
|
plt.xlabel("Time (s)")
|
|
|
|
plt.subplot(2,2,2)
|
|
plt.plot(plot_data["time"],plot_data["KI"], label="KI")
|
|
plt.plot(plot_data["time"],plot_data["KP"], label="KP")
|
|
plt.plot(plot_data["time"],plot_data["KD"], label="KD")
|
|
plt.title( "KI, KP, KD vs Time")
|
|
plt.ylabel("KI, KP, KD")
|
|
plt.xlabel("Time (s)")
|
|
plt.legend()
|
|
|
|
plt.subplot(2,2,3)
|
|
plt.plot(plot_data["time"],plot_data["ut"], label="Reference Signal")
|
|
plt.title( "Control Signal vs Time")
|
|
plt.ylabel("Control Signal")
|
|
plt.xlabel("Time (s)")
|
|
|
|
plt.subplot(2,2,4)
|
|
plt.plot(plot_data["time"],yd, label="Reference Signal")
|
|
plt.plot(plot_data["time"],plot_data["delF"],label ="Output")
|
|
|
|
|
|
plt.title( " Initial States y(t-1) , y(t-2) and y(t-3) are " + str(i[0]) + ", " + str(i[1]) +" and "+ str(i[2]) )
|
|
|
|
plt.legend()
|
|
|
|
plt.ylabel(" Output from System ")
|
|
plt.xlabel("Time (s)")
|
|
|
|
|
|
plt.show()
|
|
|