Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. import math
  2. import matplotlib.pyplot as plt
  3. def Nalej(tp, a, beta, setpoint, no_of_steps):
  4. Kp = 5
  5. Td = 0.2
  6. Ti = 0.2
  7.  
  8. data = []
  9. data_to_second = []
  10. result = 10 #h0 - poziom przy starcie regulacji
  11. errorList = []
  12. for i in range(no_of_steps):
  13. error = setpoint - result
  14. errorList.append(error)
  15. sumOfError = sum(errorList)
  16. result = tp * ((1 / a) * PID(Kp, Td, Ti, 0.7, error, sumOfError, errorList[-1]) - (beta / a) * math.sqrt(result)) + result
  17. data.append(result)
  18.  
  19. result = 0;
  20. for i in range(no_of_steps):
  21. error = setpoint - result
  22. errorList.append(error)
  23. sumOfError = sum(errorList)
  24. result = tp * ((1 / a) * PID(0.5*Kp, 0.5*Td, 0.5*Ti, 0.7, error, sumOfError, errorList[-1]) - (beta / a) * math.sqrt(result)) + result
  25. data_to_second.append(result)
  26.  
  27. plt.plot(data,label='Nastawy')
  28. # plt.plot(data_to_second,label='Nastawy/2')
  29. plt.legend(loc='best')
  30. plt.title('Nastawy: P: %s | I: %s | D: %s ' % (Kp,Td,Ti))
  31. plt.axhline(setpoint,linewidth=0.5,color='r')
  32. plt.show()
  33.  
  34. def PID(kp, td, ti, tp, error,errorSum, prevError):
  35. signal = kp * ((error + (tp / ti) * errorSum + (td/ti) * (error - prevError)))
  36. return signal * 0.1
  37.  
  38. Nalej(0.2, 2, 0.25, 1, 100)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement