Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые по ОАУ / Простые сети Петри.doc
Скачиваний:
74
Добавлен:
15.06.2014
Размер:
165.89 Кб
Скачать

2.4 Сообщения оператору

В ходе работы с программой пользователю необходимо ввести исходные данные.

Исходными данными являются:

  1. 1. события, переходы, ребра (рис.2.1);

2. количество маркеров на событиях, вес ребер (рис.2.1);

Рисунок 2.1: Ввод данных в окно программы

«Курсовой проект по теме ”Простые сети Петри”».

Результатом работы программы является вывод на экран путь прохождения маркера (ов) по сети:(рис2.1.);

Рисунок 2.2: Вывод решения в окне программы

« Курсовой проект по теме ”Простые сети Петри ”».

Программа оснащена системой вызова помощи и руководств, благодаря которым работать с программой может даже неподготовленный пользователь.

Вывод

В результате выполнения курсовой работы была изучена одна из задач моделирования и управления – временные сети Петри, которая помогает при решении задач функциональной спецификации и верификации программного обеспечения, организации вычислительных процессов и т.д. Предложенный алгоритм реализован в виде программы, написанной на языке Delphi5.0. Программа имеет высокое быстродействие, при этом требует минимальных вычислительных ресурсов:

  • IBM-совместимый компьютер, оснащенный мышью;

  • Оперативная память - 8 Мб и не менее 1 Mbсвободного места на жестком диске;

  • Операционная система Windows 95и выше.

В программе создан удобный и понятный интерфейс, понятный как начинающему пользователю, так и к специалисту в области автоматизированных систем управления.

Список использованных источников

  1. А.А. Лескин, П.А. Мальцев, А.М. Спиридонов “ Сети Петри в моделировании и управлении ”— Л.: “Наука ”, 1989.

  2. Б.В. Никульшин, А.А. Иванчиков, О.Н.Сиверенцева “Лабораторный практикум по курсу “Основы автоматизированного управления” Мн: БГУИР, 1999.

  3. С. Бобровский “Delphi5: учебный курс ” — СПб: Издательство ”Питер”, 2000.

  4. М. Кэнту “ Delphi5 для профессионалов ” — СПб.: “Питер”, 2001.

Приложение 1 Блок-схема

Ввод исходных данных

Нет

Да

Маркер сбрасывается на переход

Нет

Да

Маркер сбрасывается на событие

Нет

Да

Приложение 2 Текст программы:

var

Form1: TForm1;

A,B,C,N,M,E:array[0..7,0..100] of integer;

D:array[0..2,0..2] of integer;

w,i,je,jr,jl,il,j1,h,l,z,f,f1,f2,f3,kl,kk,h12,k112,l111:integer;

h112,k111,p112:string;

implementation

uses Unit2, Unit3, Unit4, Unit6, Unit5;

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);

var

q:integer;

begin

q:=20;

Canvas.Pen.Color:=clBlack;

while q<=1200 do begin

Canvas.MoveTo(0,q);

Canvas.LineTo(1200,q);

Canvas.MoveTo(q,0);

Canvas.LineTo(q,1200);

q:=q+20;

end;

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

for f:=1 to f1 do

if A[1,f]<>0 then

Canvas.Ellipse(A[1,f]-10,A[2,f]-10,A[1,f]+10,A[2,f]+10);

for f:=1 to f2 do

if B[1,f]<>0 then

Canvas.Rectangle(B[1,f]-10,B[2,f]-2,B[1,f]+10,B[2,f]+2);

for f:=1 to f3 do

if C[1,f]<>0 then begin

Canvas.MoveTo(C[1,f],C[2,f]);

Canvas.LineTo(C[3,f],C[4,f]);

end

end;

procedure TForm1.ToolButton1Click(Sender: TObject);

begin

w:=1;

end;

procedure TForm1.ToolButton2Click(Sender: TObject);

begin

w:=2;

end;

procedure TForm1.ToolButton3Click(Sender: TObject);

begin

w:=3;

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

x1,x2,y1,y2,k,del,k1,l1:integer;

x3,y3,x11,y11:extended;

begin

if Button=mbLeft then begin

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

case w of

1:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

x1:=x*10-10;

x2:=x*10+10;

y1:=y*10-10;

y2:=y*10+10;

Canvas.Ellipse(x1,y1,x2,y2);

A[1,je]:=x*10;

A[2,je]:=y*10;

je:=je+1;

f1:=f1+1;

end;

2:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

x1:=x*10-10;

x2:=x*10+10;

y1:=y*10-10;

y2:=y*10+10;

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

Canvas.Rectangle(x1,y1,x2,y2);

Canvas.Pen.Color:=clBlack;

Canvas.MoveTo(x2+10,y1+10);

Canvas.LineTo(x1-10,y1+10);

Canvas.MoveTo(x1+10,y2+10);

Canvas.LineTo(x1+10,y1-10);

x1:=x*10-10;

x2:=x*10+10;

y1:=y*10-2;

y2:=y*10+2;

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

Canvas.Rectangle(x1,y1,x2,y2);

B[1,jr]:=x*10;

B[2,jr]:=y*10;

jr:=jr+1;

f2:=f2+1;

end;

3:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

if j1=1 then begin

C[1,jl]:=x*10;

C[2,jl]:=y*10;

end;

if j1=2 then begin

C[3,jl]:=x*10;

C[4,jl]:=y*10;

C[6,jl]:=1;

k112:=jl

end;

D[1,j1]:=x*10;

D[2,j1]:=y*10;

if j1-1>0 then

if D[1,j1]<>0 then begin

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

Canvas.MoveTo(D[1,j1-1],D[2,j1-1]);

Canvas.LineTo(D[1,j1],D[2,j1]);

k1:=strtoint(floattostr(int((D[1,j1-1]+3*D[1,j1])/4)));

l1:=strtoint(floattostr(int((D[2,j1-1]+3*D[2,j1])/4)));

Canvas.Ellipse(k1-3,l1-3,k1+3,l1+3);

if j1=2 then begin

jl:=jl+1;

for il:=1 to 2 do

for j1:=1 to 2 do

D[il,j1]:=0;

j1:=0;

end;

end;

j1:=j1+1;

f3:=f3+1;

end;

4:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

if j1=1 then begin

M[1,jl]:=x*10;

M[2,jl]:=y*10;

end;

if j1=2 then begin

M[3,jl]:=x*10;

M[4,jl]:=y*10;

C[6,jl]:=1;

end;

D[1,j1]:=x*10;

D[2,j1]:=y*10;

if j1-1>0 then

if D[1,j1]<>0 then begin

for kk:=1 to 100 do

if M[1,jl]=C[1,kk] then

if M[2,jl]=C[2,kk] then

if M[3,jl]=C[3,kk] then

if M[4,jl]=C[4,kk] then begin

kl:=kk;

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

k1:=strtoint(floattostr(int((D[1,j1-1]+3*D[1,j1])/4)));

l1:=strtoint(floattostr(int((D[2,j1-1]+3*D[2,j1])/4)));

k112:=k1;

l111:=l1;

Form5.Show;

end;

if j1=2 then begin

jl:=jl+1;

for il:=1 to 2 do

for j1:=1 to 2 do

D[il,j1]:=0;

j1:=0;

end;

end;

j1:=j1+1;

end;

5:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

x1:=x*10-10;

x2:=x*10+10;

y1:=y*10-10;

y2:=y*10+10;

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

Canvas.Rectangle(x1,y1,x2,y2);

Canvas.Pen.Color:=clBlack;

Canvas.MoveTo(x2+10,y1+10);

Canvas.LineTo(x1-10,y1+10);

Canvas.MoveTo(x1+10,y2+10);

Canvas.LineTo(x1+10,y1-10);

for del:=1 to f1 do begin

if A[1,del]=x*10 then

if A[2,del]=y*10 then begin

A[1,del]:=0;

A[2,del]:=0;

A[3,del]:=0;

end;

if B[1,del]=x*10 then

if B[2,del]=y*10 then begin

B[1,del]:=0;

B[2,del]:=0;

B[3,del]:=0;

B[4,del]:=0;

end;

end;

end;

end;

end;

if Button=mbRight then

case w of

1:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

x1:=x*10;

y1:=y*10;

for h:=1 to f1 do begin

if A[1,h]=x1 then

if A[2,h]=y1 then begin

h12:=h;

Form6.Show;

end;

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

end;

end;

2:

begin

x3:=int(x/10);

y3:=int(y/10);

if x3/2<>int(x3/2) then

x11:=(x3+1) else x11:=x3;

if y3/2<>int(y3/2) then

y11:=(y3+1) else y11:=y3;

x:=strtoint(floattostr(x11));

y:=strtoint(floattostr(y11));

x1:=x*10-10;

x2:=x*10+10;

y1:=y*10-10;

y2:=y*10+10;

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

Canvas.Rectangle(x1,y1,x2,y2);

Canvas.Pen.Color:=clBlack;

Canvas.MoveTo(x2+10,y1+10);

Canvas.LineTo(x1-10,y1+10);

Canvas.MoveTo(x1+10,y2+10);

Canvas.LineTo(x1+10,y1-10);

x1:=x*10-2;

x2:=x*10+2;

y1:=y*10-10;

y2:=y*10+10;

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

Canvas.Rectangle(x1,y1,x2,y2);

end;

end;

end;

procedure TForm1.ToolButton5Click(Sender: TObject);

begin

w:=4;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if Button1.Caption='Start' then Button1.Caption:='Stop'

else Button1.Caption:='Start';

Timer1.Enabled:=Not(Timer1.Enabled);

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var

t,v,x1,x2,y1,y2,z,z5,z6,z7,z8,z9,z11:integer;

begin

Label1.Caption:=inttostr(strtoint(Label1.Caption)+1);

for z5:=1 to 100 do begin

for z6:=1 to 100 do begin

if C[1,z6]=A[1,z5] then begin

if C[2,z6]=A[2,z5] then begin

if C[6,z6]>A[3,z5] then begin

C[7,z6]:=2;

end;

end;

end;

end;

end;

for z6:=1 to 100 do begin

for z7:=1 to 100 do begin

if C[3,z7]=C[3,z6] then begin

if C[4,z7]=C[4,z6] then begin

if C[7,z6]=2 then begin

if C[7,z7]=0 then C[7,z7]:=1;

end;

end;

end;

end;

end;

for z8:=1 to 100 do begin

for z9:=1 to 100 do begin

if A[1,z9]=C[1,z8] then begin

if A[2,z9]=C[2,z8] then begin

if C[6,z8]<=A[3,z9] then begin

if C[7,z8]=2 then begin

C[7,z8]:=0;

for z11:=1 to 100 do begin

if C[3,z11]=C[3,z8] then begin

if C[4,z11]=C[4,z8] then begin

C[7,z11]:=0;

end;

end;

end;

end;

end;

end;

end;

end;

end;

for t:=1 to f1 do begin

if A[3,t]>=1 then begin

for v:=1 to f3 do

if C[6,v]<=A[3,t] then begin

if C[1,v]=A[1,t] then

if C[2,v]=A[2,t] then begin

if C[7,v]=0 then begin

x1:=A[1,t]-10;

x2:=A[1,t]+10;

y1:=A[2,t]-10;

y2:=A[2,t]+10;

Canvas.Brush.Color:=clRed;

Canvas.Pen.Color:=clRed;

Canvas.Ellipse(x1,y1,x2,y2);

x1:=A[1,t];

y1:=A[2,t];

C[5,v]:=C[6,v];

A[3,t]:=A[3,t]-C[6,v];

h112:=inttostr(A[3,t]);

Canvas.Brush.Color:=clBtnFace;

Canvas.Pen.Color:=clBtnFace;

Canvas.TextOut(x1-3,y1-5,h112);

end;

end;

end;

end;

end;

for t:=1 to f3 do

if C[5,t]>=1 then begin

for v:=1 to f2 do

if B[1,v]=C[3,t] then

if B[2,v]=C[4,t] then begin

B[3,v]:=B[3,v]+C[5,t];

C[5,t]:=0;

end;

end;

for t:=1 to f2 do

if B[3,t]>=1 then begin

z:=0;

for v:=1 to f3 do begin

if C[1,v]=B[1,t] then begin

if C[2,v]=B[2,t] then begin

if B[3,t]>=C[6,v] then begin

C[5,v]:=C[6,v];

if C[5,v]>z then z:=C[5,v];

end;

end;

end;

end;

B[3,t]:=0;//B[3,t]-z;

B[4,t]:=E[1,t]+1;

end;

for t:=1 to f3 do

if C[5,t]>=1 then begin

for v:=1 to f1 do

if A[1,v]=C[3,t] then

if A[2,v]=C[4,t] then begin

A[3,v]:=A[3,v]+C[5,t];

C[5,t]:=0;

x1:=C[3,t];

y1:=C[4,t];

Canvas.Pen.Color:=clBtnFace;

Canvas.Brush.Color:=clBtnFace;

h112:=inttostr(A[3,v]);

Canvas.TextOut(x1-3,y1-5,h112);

end;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

i:=1;

je:=1;

jr:=1;

jl:=1;

j1:=1;

f1:=0;

f2:=0;

f3:=0;

label1.Caption:='0';

end;

procedure TForm1.ToolButton8Click(Sender: TObject);

begin

w:=5;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

new,ne:integer;

begin

for new:=1 to 7 do

for ne:=1 to 100 do begin

A[new,ne]:=0;

B[new,ne]:=0;

C[new,ne]:=0;

N[new,ne]:=0;

M[new,ne]:=0;

E[new,ne]:=0;

end;

for new:=1 to 2 do

for ne:=1 to 2 do

D[new,ne]:=0;

label1.Caption:='0';

Form1.Repaint;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form3.Show;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Form4.Show;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Form1.Close;

end;

end.

28