- •Конвейерных систем методом моделирования”
- •Оглавление Описание метода математического моделирования
- •Описание алгоритма работы системы по методу математического моделирования
- •Блок-схема алгоритма работы программы расчёта
- •Программа
- •Расчёт значений Ic и Iп по данному варианту
- •Наложение графиков по рассчитанным данным ic и iп.
- •Сравнение результатов метода моделирования и аналитического метода
Блок-схема алгоритма работы программы расчёта

SS=0, SP=0
























Rn=random
Po=P
Po=Po+P
a=i+1
























Pl[a,j]=1
Na[a,j]= Na[a,j]+1














SP=SP+1











Pl[i,j]=1
Na[i,j]= Na[i,j]-1















































SS=SS+1









Pl[i,r+2-j]=Pl[i,r+1-j]


Pl[i,1]=0






SS=SS/10000
SP=SP/10000

ВЫВОД
SS,SP






Программа
unit TIIK;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
btEx: TButton;
btGo: TButton;
GroupBox3: TGroupBox;
lbe_r: TLabeledEdit;
lbe_h: TLabeledEdit;
GroupBox1: TGroupBox;
ed_L_beg: TEdit;
ed_L_end: TEdit;
GroupBox2: TGroupBox;
ed_m_end: TEdit;
ed_m_beg: TEdit;
lbe_t: TLabeledEdit;
lbe_d: TLabeledEdit;
GroupBox4: TGroupBox;
st_out: TMemo;
Label1: TLabel;
procedure btExClick(Sender: TObject);
procedure btGoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btExClick(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.btGoClick(Sender: TObject);
var
SP,SS,P,Po,Rn: real; //задаём переменные типа real
i,j,L,m,t,k,r,h,d: integer; //задаём переменные целочисленного диапазона
Pl:array [1..30,1..10] of integer; //массив состояний платформ
Na:array [1..30,1..10] of integer; //массив состояний накопителей
SSstr,SPstr:string; //текстовые переменные
begin
h:=strtoint(lbe_h.text); //загружаем иисходные данные с формы
r:=strtoint(lbe_r.text);
P:=1/r;
st_out.Lines.Clear; //очищаем окно вывода
//образуем цикл для L и m
for L:=strtoint(ed_L_beg.Text) to strtoint(ed_L_end.Text) do for m:=strtoint(ed_m_beg.Text) to strtoint(ed_m_end.Text) do
begin
//Обнуляем переменные
SS:=0; SP:=0;
for i:=1 to 30 do for j:=1 to 10 do
begin
Pl[i,j]:=0; Na[i,j]:=0;
end;
//Задаём число тактов загрузочного конвейера
for t:=1 to strtoint(lbe_t.Text) do //задаём время процесса
for d:=1 to strtoint(lbe_d.Text) do //задаём производительность загрузочного конвейера
begin
for j:=1 to r do //осуществляем переход от одной загрузочной линии к другой
begin
Rn:=random; //используем генератор псевдослучайных чисел
i:=1; //присваиваем счётчику сортировочных линий значение 1
Po:=P;
if Rn>Po Then //Сравниваем значение Rn со значением Po, которое для каждой
begin //сортировочной линии равно сумме вероятностей попадания груза на предыдущие линии
Po:=Po+P;
i:=i+1;
// end;
//Таким образом выясняем, куда идет груз
//Далее узнаём, что происходит с грузом в узле
if Pl[i,j]=0 Then Pl[i,j]:=1 else if Na[i,j]=m Then SP:=SP+1 else inc(Na[i,j]);
end; //!!!
//если к узлу i,j подходит пустая платформа то она заполняется, если нет,
//то проверяем полный ли накопитель, если да то число повторов
//увеличивается на 1, если нет то в накопителе прибавляется груз
end;
//Выполняем процессы, протекающие в узлах при движении сортировочных линий
for k:=1 to L do
begin
//Производим перегрузку грузов из накопителей на сортировочные платформы
for i:=1 to h do for j:=1 to r do if Pl[i,j]=0 then if Na[i,j]>0 then
//на всех узлах проверяем состояние сортировочных платформ
begin
Pl[i,j]:=1; //если они пусты и в накопителе есть грузы, то платформа загружается
Na[i,j]:=Na[i,j]-1; //а в накопителе становится на 1 груз меньше
end;
//Осуществляем сдвиг платформ сортировочного конвейера на 1 позицию
for i:=1 to h do
begin
if Pl[i,r]=0 Then SS:=SS+1;
//если платформа в последнем узле была пуста, то число
//свободных платформ становится на 1 больше
for j:=2 to r do Pl[i,r+2-j]:=Pl[i,r+1-j]; //сдвигаем платформы на 1 позицию, начиная с конца
Pl[i,1]:=0; //платформы в первом узле пусты
end;
end;
end;
SS:=SS/strtoint(lbe_t.Text); //получаем интенсивность свободных платформ
SP:=SP/strtoint(lbe_t.Text); //получаем интенсивность повторов
//Выводим результат
st_out.lines.Add('L='+inttostr(l)+', m='+inttostr(m));
str(SS:0:0,SSstr); str(SP:0:6,SPstr);
st_out.lines.Add('Iс='+SSstr+', '+'Iп='+SPstr);
end;
st_out.Lines.Add('Готово!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
end.
