Мне нужно сделать "Модель бензоколонки с однородными заявками", посмотрите пожалуйста вот этот код, он почему-то не работает..

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
const
MaxK=100; {максимально возможное число колонок}
M=30; {количеств
,о машин для тестирования}
type
Tbenzokolonka = class(TForm)
Label1: TLabel;
sec: TEdit;
Button1: TButton;
Panel1: TPanel;
infa: TLabel;
infa1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure secChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
benzokolonka: Tbenzokolonka;
S:integer; {время обслуживания одной машины}
Period:integer;{промежуток времени между прибытием машин для генерации случайных чисел}
Periods: array[1..M] of integer;{массив с промежутками времени между прибытием машин}
{колонки}
K:integer; {количество колонок на станции}
BusyK:array[1..MaxK] of integer;{массив с временем окончания обслуживания всех машин на заправке}
{очередь} Queue:integer; {длинна очереди }

tmp:integer;
i,j:integer; {счётчики}
MaxQue:integer; {максимальная длинна очереди для данного числа колонок}
NextArrive:integer; {период до прибытия очередной машины}
VirTime:integer; {текущее время}
implementation

uses Unit2;
{колонки}
{функция постановки на обслуживание}
Function ServCar(Now:integer):boolean; {Now-время постановки на обслуживание}
var
i:integer;
begin
{проверим, не пора ли освободить колонки}
for i:=1 to K do
if BusyK[i] <> 0 then {если колонка занята}
if BusyK[i] < Now then {если время обслуживания закончилось}
BusyK[i]:=0; {пометим колонку как свободную}
{пробуем поставить машину на обслуживание}
i:=0;
repeat
i:=i+1;
until (i=K) Or (BusyK[i] = 0) ;
if BusyK[i] = 0 then {если колонка свободна}
begin
BusyK[i]:=Now+S; {запомним время освобождения колонки}
ServCar:=True; {машина обслуживается}
tmp:=tmp+1;
end
else
ServCar:=False; {нельзя обслужить машину}
end;
{очередь}
Procedure AddCar(Qua:integer); {ставим в очередь Qua машин}
begin
Queue:=Queue+1;
end;
Procedure RemoveCar(Qua:integer); {забираем из очереди Qua машин}
begin
Queue:=Queue-1;
end;
Function QueueLen:integer; {длинна очереди}
begin
QueueLen:=Queue;
end;

{$R *.dfm}

procedure Tbenzokolonka.Button1Click(Sender: TObject);
begin
S:=strtoint(sec.Text); {время обслуживания одной машины на заправке}
Period:=70; {максимальное время между прибытием машин}
for j:=1 to M do
Periods[j]:= Random(Period); {заполним массив прибытия машин промежутками времени для M машин}
for i:=1 to MaxK do {тестируем модель для различного числа колонок}
begin
tmp:=0;
K:=i;
Queue:=0;
VirTime:=0;
MaxQue:=0;
for j:=1 to M do {освободим все колонки перед очередным опытом}
BusyK[j]:=0;
for j:=1 to M do {перебираем все прибывающие машины}
begin
NextArrive:=Periods[j];
while NextArrive > 0 do
begin
if QueueLen > 0 then {если очередь есть}
if ServCar(VirTime) then RemoveCar(1); {если ставим машину на обслуживаение, уменьшаем очередь на 1}
NextArrive:=NextArrive-1;
VirTime:=VirTime+1; {ещё прошла еденица времени}
end; {while NextArrive <> 0 do}
if not ServCar(VirTime) then AddCar(1); {если не ставим машину на обслуживаение, увеличиваем очередь на 1}
if MaxQue < QueueLen then MaxQue:=QueueLen; {запомним максимальную длинну очереди}
end; {for j:=1 to M do}
{writeln('que: ',MaxQue,' colon: ',i,' tmp= ',tmp);}
if MaxQue = 0 then {если очередь отсутствовала}
begin
infa.Caption:='Время обслуживания S: ' + inttostr(S);
infa1.Caption:='Число колонок, при которых очередь не увеличивается: ' + inttostr(Random(20));
end;
end;

end;

procedure Tbenzokolonka.secChange(Sender: TObject);
begin
if sec.Text='' then
button1.Enabled:=false else
button1.Enabled:=true;
end;

procedure Tbenzokolonka.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure Tbenzokolonka.N1Click(Sender: TObject);
begin
dialogss.ShowModal;
end;

end.