dt=1e-5;%[s]
tkonec=1;
ikonec=floor(tkonec/dt);

fvz=1.5*10^1.5%vzorkovaci frekvence [Hz]
%fvz=inf;

%parametry regulatoru
kr=0.01; %orig fib=72;

Taur=1/3; %orig 1/(wRezu/10)

fp=5000;%frekvence nosne pily, Hz
urmax=1;%rozsah ridiciho napeti mustku
U=10;%napajeci napeti [V]
R=sqrt(1000);%odpor vinuti [Ohm]
L=1e-2*R;%indukcnost vinuti [H]
TauI=1e-4;
kfi=0.1;

%pocatecni podminky
t=0;i=0;sum=0;ur=0;otw=0;ot=0;
u=0;Ui=0;Mz=0;urOld=0;
vys=zeros(7,ikonec);

iVz=1; %krok simulace, ve kterem se bude vzorkovat regulator
iVzOld=1;
ticksVz=[];

%vlastni vypocetni smycka
for icas=1:ikonec
    t=(icas-1)*dt;
    %definovani pozadovaneho prubehu otacek
    if t>0.02 otw=100; end;
    %definovani prubehu poruchy
% if t>tkonec*2/3 Mz=0.1; end;
% if t>tkonec*1/3 Ui=1; end;
% Ui=kfi*ot;
    
    if icas>=iVz
        e=otw-ot; %regulacni odchylka

        %PI (P) regulator bez omezovace
        ur=urOld; %dT_vypoctu = Tvz
        sum=sum+1/Taur*e*dt*(icas-iVzOld); %integrace reg. odchylky. 
        %Krok vypoctu regulatoru v simulaci neni 1/fvz, ale je zaokrouhlen
        %na krok simulace, proto se jako krok integrace pouziva dt*(icas-iVzOld)
        urOld=kr*(e+sum); %dT_vypoctu = Tvz
        %ur=kr*(e+sum); %dT_vypoctu = 0
        iVzOld=icas;
        iVz=icas+round(1/fvz/dt);%krok simulace pro dalsi vzorek, nejmene dalsi krok simulace
        if fvz<=10^2.5
            ticksVz=[ticksVz,icas];
        end
    end
        

        
    % vypocet diference proudu (z rovnice u=R*i+L*di/dt)
    di_dt=1/L*(u-R*i-Ui);
    % vypocet diference napeti (z prenosu u/ur=U/urmax/(1+p/(2*fp)) )
    du_dt=2*fp*(U/urmax*ur-u);
    dot=i-Mz/kfi;
    % numericka integrace Eulerovou metodou
    i=i+di_dt*dt;
    u=u+du_dt*dt;
    ot=ot+1/TauI*dot*dt;
    % zapis vysledku do pole
    vys(:,icas)=[t,otw,ur,u,Ui,ot,Mz]';
end;


if isempty(findobj('type','figure','name','RT03 prechodove'))
    fh=figure('name','RT03 prechodove');
    set(gcf,'color',[1,1,1]);
    pismo=13;

    UrGraf=subplot(2,1,2);
    set(gca,'nextplot','add')
    set(gca,'outerposition',[0,0.005,1.0000,0.3])
    set(gca,'FontName','Helvetica','FontSize',pismo);

    Prechodova=subplot(2,1,1);
    set(gca,'nextplot','add')    
    set(gca,'outerposition',[0,0.3,1.0000,0.65])
    set(gca,'FontName','Helvetica','FontSize',pismo);
    xlabel('time [s]');
end

set(fh, 'currentaxes', Prechodova);
plot(vys(1,:),vys(2,:),'k','LineWidth',2);
plot(vys(1,:),vys(6,:),'LineWidth',2);
legend('w','y');
if ~isempty(ticksVz)
    set(gca,'Xtick',(ticksVz-1)*dt);
    grid on
    set(gca,'XTickLabel','')
else
    grid off
    set(gca, 'XTickMode', 'auto', 'XTickLabelMode', 'auto')
end


set(fh, 'currentaxes', UrGraf);
plot(vys(1,:),vys(3,:),'LineWidth',2);
legend('ur');
