function pm
global hEd1 hEd2 hEd3 hEd4 hEd5 hEd6
global hTex2 hTex3 hTex4  hTex6  hTex8  hTex10 hTex12 
global hbp1 hbp2 hbp3 hbm1 hbm2 hbm3 hbp4 hbp5 hbp6 hbm4 hbm5 hbm6 hStop hStart hResult hPauseon
global flag
dx=1;
flag=0;

% axis('off')  
% subplot(1,1,1);
% axes('Position',[0 0.2 0.5 0.1],'XLim',[0 0.9],'YLim',[0 0.25],'Visible','off');

dev=str2num(get(hEd1,'String'));%кол-во устройств
o1=str2num(get(hEd2,'String'));%A
o2=str2num(get(hEd3,'String'));%S
E1=str2num(get(hEd4,'String'));%генератор А
E2=str2num(get(hEd5,'String'));%генератор S
E3=str2num(get(hEd6,'String'));%генератор приоритетов

if gcbo==hStart
   set(hStop,'Enable','off');
   set(hResult,'Enable','off');
   set(hStart,'Enable','off');
   
   set(hEd1,'Enable','off');
   set(hEd2,'Enable','off');
   set(hEd3,'Enable','off');
   set(hEd4,'Enable','off');
   set(hEd5,'Enable','off');
   set(hEd6,'Enable','off');
   
   set(hbp1,'Enable','off');
   set(hbp2,'Enable','off');
   set(hbp3,'Enable','off');
   set(hbp4,'Enable','off');
   set(hbp5,'Enable','off');
   set(hbp6,'Enable','off');
   
   set(hbm1,'Enable','off');
   set(hbm2,'Enable','off');
   set(hbm3,'Enable','off');
   set(hbm4,'Enable','off');
   set(hbm5,'Enable','off');
   set(hbm6,'Enable','off');
   
   set(hPauseon,'Enable','on');
   
end;

c=1000;%кол-во измерений
tA=gen2(E1,o1);
t=0;%первоначальное системное время
t=0;  %системное время
B=0;  %очередь
Q=0;  %задержка
r=1;  %кол-во заявок в очереди
delay=0; %сумма xS
for i=1:c
    tB(i)=0;  %время в очереди
    nA(i)=0;  %номер заявки поступившей в очередь 
    tAB(i)=0; %время поступление заявки в очередь
    xS(i)=0;
    pri(i)=0;
end
for i=1:dev
    s(i)=0;  %устройства
    P(i)=0;  %время обработки
    tS(i)=0;  %время окончания обработки
    bwt(i)=0;  %время начала работы устройства
    dwt(i)=0;  %время работы устр. 
    ewd(i)=0; %общее время работы
end
m=1; %индекс для s
j=1;  %индекс для xS
k=1;  %индекс для xA
sw=-0.15;
qw=0;
ji=0;
a=0;


%-------------------------------------------------------------------
while k~=c

%----определение минимального времени окончания обработки (minS)------
minS=0;
cond=0;%условие
for i=1:dev
    if tS(i)~=0
        cond=1;
        minS=tS(i);
        break;
    end;
end;
if (cond==1)
    for i=dev
        if (tS(i)~=0)&(minS~=0)&(tS(i)<minS)
            minS=tS(i);
        end;
    end;
end;
%minS=minS
AS=0;%случай когда tA=tS
if (minS==tA)
    AS=1;
end;

%-----вычисляем время обработки P(п.1)------------

if ((minS>tA)&(minS~=0))|(AS==1)
    for i=1:dev
        if (tS(i)~=0)
            P(i)=(tA-t)+P(i);
        else 
            P(i)=P(i);
        end;
    end;
else
    if (minS<tA)&(minS~=0)
    for i=1:dev
        if (tS(i)~=0)
            P(i)=(minS-t)+P(i);
        else 
            P(i)=P(i);
        end;
    end;
end;
end;

%------вычисление времени задержки Q(п.2)--------

if ((tA<minS)&(minS~=0))|(AS==1)
    Q=(tA-t)*B+Q;
else
    if (tA>minS)&(minS~=0)
        Q=(minS-t)*B+Q;
    end;
end;


%-----вычисляем системное время t(п.3)-----------
if (minS==0)
    t=tA;
else
    if ((tA<minS)&(minS~=0))|(AS==1)
        t=tA;
    else
        if (tA>minS)&(minS~=0)
            t=minS;
        end;
    end;
end;

%--------Формирование очереди B (п.4)--------------
cond=0;
for i=1:dev
    if (s(i)==1)
        cond=cond+1;
    end;
end;
 K=k;
 if ((tA<minS)&(cond==dev))|((AS==1)&(cond==dev))
     B=B+1;
     nA(B)=k;%номер заявки поступившей в очередь
     tAB(B)=t;%время поступления заявки
     E3=gen1(E3);
     pri(k)=gen4(E3);%ф-я "gen" раздаёт приоритеты
     E2=gen1(E2);
     xS(k)=gen3(E2,o2);
     delay=delay+xS(k);
 else
     if (B~=0) %не пустая очередь
         B=B;
         nA(B)=nA(B);
         tAB(B)=tAB(B);
         r=r; %кол-во заявок в очереди
     end;
 end;
 
%-------определение работающих устройств S (п.5)---------------
  for i=1:dev
      in(i)=0;%для определения работы устройства
  end;
  
  bn=0;
  if (minS==0)
      s(1)=1;
      bwt(1)=t;%время начала работы устройства
      in(1)=1;
  else
      if ((tA<minS)&(minS~=0))|(AS==1)
          for i=1:dev
              if (s(i)==0)&(bn~=1)
                  s(i)=1;
                  bwt(i)=t;
                  in(i)=1;
                  bn=1;
              end;
          end;
      end;
      for i=1:dev
          if (tS(i)==t)
              s(i)=0;
              bwt(i)=bwt(i);
              dwt(i)=t-bwt(i);%device work time(время работы устройства)
              ewd(i)=ewd(i)+dwt(i);%общее время работы устройства
              dwt(i)=0;
              bwt(i)=0;
              tS(i)=0;
          else
              s(i)=s(i);
          end;
      end;
  end;
  
%------вычисляем tS(п.6)-----------------------
if (B==0)
    for i=1:dev
        if (in(i)==1)
            E2=gen1(E2);
            xS=gen3(E2,o2);
            delay=delay+xS;
            tS(i)=t+xS;
        end;
    end;
else
    for j=1:dev
    mp=1;%высший приоритет
    if (B>1)
        m=1;
        num=pri(nA(1));
        for i=2:B
            if pri(nA(i))>num;
                num=pri(nA(i));
                m=i;
            end;
        end;
        mp=m;
    end;
    if (B~=0)&(s(j)==0)
        tS(j)=t+xS(nA(mp));
        tB(r)=t-tAB(mp);%время в очереди
        r=r+1;
        if (mp~=B)
            for i=mp:(B-1)
                nA(i)=nA(i+1);
                tAB(i)=tAB(i+1);
            end;
        end;
        tAB(B)=0;
        nA(B)=0;
        B=B-1;
        s(j)=1;
        bwt(j)=t;
    end;
end;
end;

%--------------Вычисляем tA(п.7)--------------------
if (minS==0)
    E1=gen1(E1);
    xA=gen2(E1,o1);
    tA=tA+xA;
    k=k+1;
else
    if ((tA<minS)&(minS~=0))|(AS==1)
        E1=gen1(E1);
        xA=gen2(E1,o1);
        tA=tA+xA;
        k=k+1;
    else
        tA=tA;
    end;
end;
%----------------------------------------------------------------------
%end; % для while        
%===========================================================================
M=0;
M=Q/t %среднее число требований в очереди
masM(k)=M;
cus=0; %коэффициент использования системы
for i=1:dev
    cus=cus+ewd(i);
end;
cus=cus/(dev*t)
mascus(k)=cus;
tib=0; %время в очереди
u=0;
for i=1:r-1
    tib=tib+tB(i);
    u=u+1;
end;

szvo=0; %средняя задержка в очереди
if (r~=1)
    szvo=tib/(r-1)
end;
masszvo(k)=szvo;
sto=delay; %среднее время ожидания
for i=1:r
    sto=sto+tB(i);
end;
sto=sto/c;
massto(k)=sto;
L=(sto/o1)/t;
masL(i)=L;
%----------------------------------------------------------------------


set(hTex4,'String',cus);
set(hTex6,'String',szvo);
set(hTex8,'String',sto);
set(hTex10,'String',M);
set(hTex12,'String',L);
axis('off')
pause(0.2)
while flag
    pause(1);
    if flag==1
        set(hStop,'Enable','on');
    end;
    if flag==0
        set(hStop,'Enable','off');
    end;
end;

% end;%для While


cla;
sw=-0.15
axis('off')
subplot(1,1,1);
axes('Position',[0 0.2 0.5 0.1],'XLim',[0 0.9],'YLim',[0 0.25],'Visible','off')
for ji=1:dev
if (s(ji)==1)
    sw=sw+0.15;
rectangle('Position',[sw 0.1 0.13 0.13],'Curvature',[0,0],'FaceColor','r')
else
    if (s(ji)==0)
        sw=sw+0.15;
        rectangle('Position',[sw 0.1 0.13 0.13],'Curvature',[0,0],'FaceColor','b')
    end;
end;
end;
 
%Очередь
a=0
if B~=0
      axes('Position',[0 0 0.5 0.2],'XLim',[0.02 0.6],'YLim',[0.05 0.2],'Visible','off') 
      for qw=1:B
      a=a+0.03;
   rectangle('Position',[a 0.1 0.03 0.03],'Curvature',[1,1],'FaceColor','b')
      end
else 
   axes('Position',[0 0 0.5 0.2],'XLim',[0.02 0.6],'YLim',[0.05 0.2],'Visible','off') 
    if B==0
     rectangle('Position',[0.03 0.1 0.03 0.03],'Curvature',[1,1])
    end
 end 

end;%while

set(hStop,'Enable','on');
set(hResult,'Enable','on');
set(hStart,'Enable','on');

   set(hEd1,'Enable','on');
   set(hEd2,'Enable','on');
   set(hEd3,'Enable','on');
   set(hEd4,'Enable','on');
   set(hEd5,'Enable','on');
   set(hEd6,'Enable','on');
   
   set(hbp1,'Enable','on');
   set(hbp2,'Enable','on');
   set(hbp3,'Enable','on');
   set(hbp4,'Enable','on');
   set(hbp5,'Enable','on');
   set(hbp6,'Enable','on');
   
   set(hbm1,'Enable','on');
   set(hbm2,'Enable','on');
   set(hbm3,'Enable','on');
   set(hbm4,'Enable','on');
   set(hbm5,'Enable','on');
   set(hbm6,'Enable','on');

