Ostu

Untitled

Dec 10th, 2021
1,183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.51 KB | None | 0 0
  1. % aby wywolac te funkcje musimy podac PID i model np.:
  2. % obiekt=[K,T1,T2,tau,czas symulacji] - w odpowiednie miejsca podac wartosc
  3. % PID = [P,I,D]
  4. % w command window wpisac np "out=PIDOptimFun([P,I,D],[K,T1,T2,tau,czas])"
  5. function [FC, p, cr, u, I2] = PIDOptimFun(PID,obiekt)
  6.  
  7. % dane naszego regulatora
  8. P=PID(1);
  9. I=PID(2);
  10. D=PID(3);
  11.  
  12. % dane naszego modelu
  13. K=obiekt(1);
  14. tau=obiekt(4);
  15. T1=obiekt(2);
  16. T2=obiekt(3);
  17. czasSym=obiekt(5);
  18.  
  19.  
  20.  
  21. % symulacja naszego modelu w simulink
  22. options = simset('SrcWorkspace', 'current');
  23. simOut = sim('SI',czasSym ,options);
  24.  
  25. % wartosc marginesu delta wynosi od 1% do 5, my zakladamy 5, bo czemu nie:)
  26. d=5;
  27.  
  28. % przeregulowanie zgodnie ze wzorem z prezentacji
  29. p=abs(((max(simOut.y)-simOut.y(end))/simOut.y(end))*100);
  30.  
  31. % uchyb jest roznica miedzy wartoscia osiagnieta przez obiek po regulacji a
  32. % sygnalem zadanym. Abs, bo mozliwe jest otrzymanie wartosci ujemnej, czego
  33. % nie chcemy
  34. u=abs(simOut.y(end) - simOut.u(end));
  35.  
  36.  
  37. % czas regulacj wyniga z marginesu delta. Sam czas regulacji to czas po
  38. % ktorego uplywie wartosc odpowiedzi ukladu nie przekracza odchylenia od
  39. % wartosci zadanej (wynikajacej z delty)
  40. for i=length(simOut.t):-1:1
  41.     if simOut.y(i)>(1+d/100)*simOut.u(end) || simOut.y(i)<(1-d/100)*simOut.u(end)
  42.        cr=simOut.t(i);
  43.        break;
  44.     end
  45. end
  46.  
  47. % kryterium całkowe, potrzebne do funkcji celu - w tym przypadku calka
  48. % kwadratu bledu
  49. I2=trapz(simOut.t, simOut.e.^2);
  50.  
  51. % funkcja celu jak wynik funkcji
  52. FC = 0.5*p+0.1*cr+0.2*u+0.2*I2;
  53. end
Advertisement
Add Comment
Please, Sign In to add comment