Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект [25] / отчет / мой отчет по МС.doc
Скачиваний:
55
Добавлен:
02.05.2014
Размер:
410.62 Кб
Скачать

ВВЕДЕНИЕ

Моделируемая система относится к системам массового обслуживания. Системы массового обслуживания – это класс математических схем, разработанных в теории массового обслуживания и ее приложениях для формализации процессов функционирования систем, которые по своей сути являются системами обслуживания.

Для формализации систем применяют Q-схемы. Q-схемы представляют собой объединение отдельных элементарных приборов обслуживания. Если каналы этих приборов соединены параллельно, то имеет место многоканальное обслуживание. Если приборы и их параллельные композиции соединены последовательно, то имеет место многофазное обслуживание. В разомкнутых Q-схемах поток обслуженных заявок не может снова поступить на какой-либо элемент, т.е. обратные связи отсутствуют. В замкнутых Q-схемах имеются обратные связи, по которым заявки двигаются в направлении, обратном направлению вход/выход.

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

Существует два принципа построения моделирующих алгоритмов Q-схем:

- принцип Δt;

- принцип δz;

При построения моделирующего алгоритма Q-схемы по «принципу Δt», т.е. алгоритма с детерминированным шагом, необходимо для построения адекватной модели определить минимальный интервал времени между соседними событиями Δt’=min{ui} и принять, что шаг моделирования равен Δt’.

В моделирующих алгоритмах, построенных по «принципу δz», т.е. в алгоритмах со случайным шагом, элементы Q-схемы просматриваются при моделировании только в моменты особых состояний. При этом длительность шага Δt=var зависит как от особенностей самой системы, так и от воздействий внешней среды.

Для моделирования данной системы используем детерминированный алгоритм, построенный по принципу Δt. Этот алгоритм наиболее прост с точки зрения логики его построения, т.к. при этом используется просмотр всех элементов Q-схемы на каждом шаге моделирования. Трудности возникают с машинной реализацией алгоритма вследствие увеличения затрат машинного времени на моделирование, т.к. просматриваются все элементы Q-схемы. Затраты машинного времени на моделирование существенно увеличиваются при построении детерминированных моделирующих алгоритмов Q-схем, элементы которых функционируют в различных масштабах времени.

1 Постановка задачи

Задание 25.

В машинный зал с интервалом времени 10 5 мин заходят пользователи, желающие произвести расчеты на ЭВМ. В зале имеется одна ЭВМ, работающая в однопрограммном режиме. Время, необходимое для решения задач, включая вывод результатов на печать, характеризуется интервалом 155 мин. Третья часть пользователей после окончания решения своей задачи производит вывод текста программы на печать (продолжительность перфорации - 32 мин). В машинном зале не допускается, чтобы более семи пользователей ожидали своей очереди на доступ к ЭВМ. Вывод программы на печать не мешает проведению расчетов на ЭВМ.

Смоделировать процесс обслуживания 100 пользователей. Подсчитать число пользователей, не нашедших свободного места в очереди. Определить среднее число пользователей в очереди, а также коэффициенты загрузки ЭВМ и принтера.

2 СТРУКТУРНАЯ СХЕМА ПРОЦЕССА ФУНКЦИОНИРОВАННИЯ

Структурная схема функционирования представлена на рисунке 1.

Рисунок 1 – Структурная схема процесса функционирования

Пользователи, вошедшие в комнату, в порядке очереди работаю за компьютером, затем, 1/3 пользователей оставаясь, в комнате идет на распечатку результатов программы и выходит из комнаты, освобождая место для остальных пользователей, другая часть сразу же выходит из комнаты.

3 СТРУКТУРНАЯ СХЕМА МОДЕЛИ В СИМВОЛИКЕ Q-СХЕМ

Структурная схема модели в символике Q-схем представлена на рисунке 2.

Рисунок 2 – Структурная схема модели в символике Q-схем

Структурная схема модели функционирования системы управления технологическим процессом в символике Q-схем представлена на рисунке 2, где

И – источник;

Н – машинная зал;

К1 – ЭВМ;

К2 – Принтер.

Источник И имитирует процесс поступления пользователей. Система клапанов 1 и 2 с управляющими связями регулирует процесс поступления в машинный зал пользователей. Если сигнал очередь в машинном зале заполнена, то клапан 1 закрыт, клапан 2 закрыт, в противном случае клапан 1 открыт, клапан 2 закрыт.

4 Переменные и уравнения имитационной модели

Экзогенные(независимые) переменные

next_go– интервал времени (10±2 с) прибытия пользователя;

st->work – продолжительность работы пользователя за ЭВМ;

st->print – продолжительность перфорации результатов пользователя.

Эндогенные (зависимые) переменные

N – количество пользователей которые должны быть обслужены;

st->start – время начала работы за ЭВМ или печати пользователем;

Переменные состояния

time – текущее время для пользователей;

Вспомогательные переменные

st->w – ключ для знаний о пользователе

true – в данный момент времени пользователь работает за ЭВМ;

false – в данный момент пользователь не работает за ЭВМ.

st->p – ключ для знаний о пользователе(пользователь печатает);

true – в данный момент времени пользователь распечатывает результаты;

false – в данный момент времени пользователь не распечатывает результаты.

5 ОБОБЩЕННАЯ СХЕМА МОДЕЛИРУЮЩЕГО АЛГОРИТМА

Обобщенная схема моделирующего алгоритма приведена на рисунке 3.

Рисунок 3 - Обобщенная схема моделирующего алгоритма

Детальный псевдокод моделирующего алгоритма приведен в приложении А.

6 ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ

6.1 Функции программы

Программа, написанная на языке Borland С++ Builder 6, решает задачу моделирования работы системы управления технологическим процессом, имитирует 1 час работы системы. Листинг программы приводится в приложении Б.

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

6.2 Входные данные

Все входные данные, необходимые для выполнения программы, задаются как константы и поэтому не требуют ввода с клавиатуры. Так же есть возможность изменить данные, не изменяя программного кода.

6.3 Выходные данные

gap – число пользователей не нашедших место в очереди;

och – среднее число пользователей в очереди;

zagr_c – коэффициент загрузки ЭВМ;

zagr_p – коэффициент загрузки принтера.

6.4 Внешние эффекты

При запуске программы на экран выводится окно, в котором при нажатии правой кнопки мыши появляется меню, содержащее следующие пункты:

  • «Задача»;

    • Формулировка задачи

    • Q-схема

  • «Расчет»;

  • «О программе»;

  • «Выход».

Выбор нужного пункта осуществляется компьютерной мышкой.

При выборе пункта меню «Задача» -> «Формулировка задачи» на выводится условие поставленной задачи(задание 25) с возможностью изменить исходные данные.

При выборе пункта меню «Задача» -> «Q-схема» на экран выводится структурная схема модели в символике Q-схем.

При выборе пункта меню «Расчет» начинается обработка нового цикла моделирования с последующей выдачей результатов моделирования.

При выборе пункта меню «О программе» на экран выводится информация о разработчике программы.

При выборе пункта меню «Выход» программа завершает работу.

6.5 Дополнительные переменные

exe – число пользователей решивших задачу и распечатавших результаты.

free – число свободных мест в очереди.

7 РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ

Результаты процесса обработки данных

Не нашли место в очереди:63

Среднее число в очереди:6

Загрузка принтера:5%

Загрузка компьютера:99%

Не нашли место в очереди:60

Среднее число в очереди:6

Загрузка принтера:5%

Загрузка компьютера:99%

Не нашли место в очереди:47

Среднее число в очереди:6

Загрузка принтера:6%

Загрузка компьютера:99%

Не нашли место в очереди:62

Среднее число в очереди:6

Загрузка принтера:6%

Загрузка компьютера:99%

Не нашли место в очереди:48

Среднее число в очереди:6

Загрузка принтера:6%

Загрузка компьютера:99%

Не нашли место в очереди:58

Среднее число в очереди:6

Загрузка принтера:5%

Загрузка компьютера:99%

Не нашли место в очереди:53

Среднее число в очереди:6

Загрузка принтера:6%

Загрузка компьютера:99%

Не нашли место в очереди:57

Среднее число в очереди:6

Загрузка принтера:5%

Загрузка компьютера:99%

Не нашли место в очереди:47

Среднее число в очереди:5

Загрузка принтера:6%

Загрузка компьютера:99%

Не нашли место в очереди:61

Среднее число в очереди:6

Загрузка принтера:5%

Загрузка компьютера:99%

Среднее значение пользователей не нашедших места в очереди: 55

Среднее значение числа пользователей в очереди: 6

Среднее значение загрузки принтера: 5,4%

Среднее значение загрузки компьютера: 99%

ЗАКЛЮЧЕНИЕ

Полученные результаты моделирования отражают основные особенности работы машинного зала и позволяют количественно оценить эффективность его функционирования. Среднее значение пользователей не нашедших места в очереди: 55, среднее значение числа пользователей в очереди: 6, среднее значение загрузки принтера: 5,5% и среднее значение загрузки компьютера: 99%.

На основе полученных результатов можно сделать вывод об удовлетворительной работе машинного зала.

СПИСОК ЛИТЕРАТУРЫ

1. Советов Б.Я., Яковлев С.А., Моделирование систем. – М.: Высшая школа, 2001.- 343 с.

2. Советов Б.Я., Яковлев С.А., Моделирование систем. Практикум. – М.: Высшая школа, 1999. 224 с.

ПРИЛОЖЕНИЕ А

(обязательное)

Псевдокод моделирующего алгоритма

Начало

Скаляр

int N=Form2->n->Text.ToInt(), next=Form2->next->Text.ToInt(), next_int=Form2->next_int->Text.ToInt(), work=Form2->work->Text.ToInt(), work_int=Form2->work_int->Text.ToInt(), print=Form2->print->Text.ToInt(), print_int=Form2->print_int->Text.ToInt(),stack=Form2->stack->Text.ToInt();

int time=0,i=0;

int next_go=0,free=stack,gap=0,exe=0;

double och=0,zagr_p=0,zagr_c=0;

room *st,*st0,*beg;

randomize();

st0=beg->next=beg=new room;

beg->p=false;

Memo1->Lines->Clear();

Пока (exe<N)

Начало

Если beg->p то

Начало

Если time>=beg->print+beg->start то

Начало

beg->p=false;

free++;

exe++;

Конец

zagr_p++;

Конец

Если beg->next!=beg то

Начало

st=beg->next;

Если st->w то

Начало

zagr_c++;

Если time>=st->work+st->start то

Начало

Если (exe+1)%3==0 то

Начало

beg->p=true;

beg->print=print-print_int+rand()%(2*print_int);

beg->start=time;

Конец

Иначе

Начало

beg->p=false;

free++;

exe++;

Конец

beg->next=st->next;

delete st;

st=beg->next;

st->w=true;

st->start=time;

st->work=work-work_int+rand()%(2*work_int);

Конец

Конец

Иначе

Начало

st->w=true;

st->start=time;

st->work=work-work_int+rand()%(2*work_int);

Конец

Конец

Если next_go<=time то

Начало

Если free>0 && i<N то

Начало

st=new room;

st->next=beg;

st0->next=st;

st0=st;

Если time==0 то

Начало

st->work=work-work_int+rand()%(2*work_int);

st->w=true;

Конец

free--;

i++;

Конец

Иначе

Начало

gap++;

Конец

next_go=time+next-next_int+rand()%(2*next_int);

Конец

time++;

och+=stack-free;

Конец

ПРИЛОЖЕНИЕ Б

Листинг программы

Файл unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

#include "math.h";

TForm1 *Form1;

struct room

{

int work, print, start;

bool w,p;

room *next;

};

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N1Click(TObject *Sender)

{

int N=Form2->n->Text.ToInt(), next=Form2->next->Text.ToInt(), next_int=Form2->next_int->Text.ToInt(), work=Form2->work->Text.ToInt(), work_int=Form2->work_int->Text.ToInt(), print=Form2->print->Text.ToInt(), print_int=Form2->print_int->Text.ToInt(),stack=Form2->stack->Text.ToInt();

int time=0,i=0;

int next_go=0,free=stack,gap=0,exe=0;

double och=0,zagr_p=0,zagr_c=0;

room *st,*st0,*beg;

randomize();

st0=beg->next=beg=new room;

beg->p=false;

Memo1->Lines->Clear();

do

{

if(beg->p)

{

if(time>=beg->print+beg->start)

{

beg->p=false;

free++;

exe++;

}

zagr_p++;

}

if(beg->next!=beg)

{

st=beg->next;

if(st->w)

{

zagr_c++;

if(time>=st->work+st->start)

{

if((exe+1)%3==0)

{

beg->p=true;

beg->print=print-print_int+rand()%(2*print_int);

beg->start=time;

}

else

{

beg->p=false;

free++;

exe++;

}

beg->next=st->next;

delete st;

st=beg->next;

st->w=true;

st->start=time;

st->work=work-work_int+rand()%(2*work_int);

}

}

else

{

st->w=true;

st->start=time;

st->work=work-work_int+rand()%(2*work_int);

}

}

if(next_go<=time)

{

if(free>0 && i<N)

{

st=new room;

st->next=beg;

st0->next=st;

st0=st;

if(time==0)

{

st->work=work-work_int+rand()%(2*work_int);

st->w=true;

}

free--;

i++;

}

else

{

gap++;

}

next_go=time+next-next_int+rand()%(2*next_int);

}

time++;

och+=stack-free;

}

while((exe<N) && (time<10000));

delete beg,st0,st;

och=floor(och/time);

zagr_p=floor(100*zagr_p/time);

zagr_c=floor(100*zagr_c/time);

Memo1->Lines->Add(AnsiString()+"Время моделирования:"+time);

Memo1->Lines->Add(AnsiString()+"Не нашли место в очереди:"+gap);

Memo1->Lines->Add(AnsiString()+"Среднее число в очереди:"+och);

Memo1->Lines->Add(AnsiString()+"Загрузка принтера:"+zagr_p+"%");

Memo1->Lines->Add(AnsiString()+"Загрузка компьютера:"+zagr_c+"%");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N7Click(TObject *Sender)

{

Form2->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)

{

AboutBox->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Q1Click(TObject *Sender)

{

AboutBox1->Show();

}

//---------------------------------------------------------------------------

Файл Unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Buttons.hpp>

#include <Menus.hpp>

#include <ExtCtrls.hpp>

#include <Graphics.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPopupMenu *PopupMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMemo *Memo1;

TImage *Image1;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N7;

TMenuItem *N8;

TMenuItem *N9;

TMenuItem *Q1;

void __fastcall BitBtn1Click(TObject *Sender);

void __fastcall N1Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall N7Click(TObject *Sender);

void __fastcall N5Click(TObject *Sender);

void __fastcall Q1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

ПРИЛОЖЕНИЕ В

Экранные формы программы

Рисунок 4 – Главное окно

Рисунок 5 – Окно для представления Q-схемы

Рисунок 6 – Окно для представления задания

Рисунок 7 – Окно для представления сведений о разработчике программы

Рисунок 8 – Окно для представления результатов моделирования процесса работы АСУ ТП

Соседние файлы в папке отчет