Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1070604.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
14.15 Mб
Скачать

Приложение б

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

SAL - это программа предназначенная для моделирования производственной линии с пунктами конечного контроля.

Основная задача моделирования - это проследить загруженность контролера и настройщика.

После двойного нажатия по файлу start. exe откроется программное меню. Вначале программа предложит выбрать пункт меню (смотри рис. В.1). При выборе первого пункта, программа запустит симуляцию и запросит ввести следующие значения:

шаг времени. Любая величина в диапазоне от 1 до 2;

время моделирования системы. Общее время, которое будет потраченное на моделирования. Любая величина в диапазоне от 1 до 1500;

максимальное количество телевизоров в очереди к контролерам. Любая величина в диапазоне от 1 до 15.

Во время моделирования на экран вводятся все подробности моделирования производственной линии (смотри рис. В.2).

В конце на экран будут выведены требуемые статистические данные, которые и являются целью моделирования системы:

  • время, затрачиваемое на обслуживание каждого телевизора на последнем этапе производства. Данные сведенья представлены в виде списка, который отображает все результаты симуляции в реальном времени;

  • загрузка контролеров. Данное значение показывает, на сколько во время симуляции, были загружены контроллеры;

  • загрузка настройщика. Данное значение показывает, на сколько во время симуляции, был загружен настройщик;

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

Приложение в

ЭКРАННЫЕ ФОРМЫ

На рисунке В.1 начальное меню.

Рисунок В.1 - Меню

Рисунок В.2 - Моделирование

Приложение г

ЛИСТИНГ ПРОГРАММЫ

#include <iostream>

#include <stdio. h>

#include <stdlib. h>

#include <conio. h>

using namespace std;

// Simulator assembly line. Симулятор сборочной линии

float current_time = 0; // текущее время

float TIME_STEP; // шаг времени

float MODELING_TIME; // время моделирования

float MAX_TV_ON_CONTROLER; // макс. количество телевизоров в очереди у контролера

float tested_time=0; // время работы настройщика

float servicecon_time=0; // время работы, двух контролеров

float get_current_time () // функция получающая текущее время

{

return current_time; // возвращает значение времени

}

float frand (float a, float b) // функция генерирующая числа на определенном промежутке

{

return float (rand ()) /RAND_MAX* (b-a) +a; // возвращает случайные числа на промежутке

}

class Queue // класс Очередь

{

public:

Queue (size_t in_id): id (in_id) // конструктор по умолчанию

{

TV_count = 0; // количество TV

}

size_t Id () // идентификатор

{

return id;

}

void AddTV () // Добавление телевизора на проверку

{

if (TV_count == MAX_TV_ON_CONTROLER) // условие добавление TV

return;

printf ("%.1f: Телевизор на контроллере\n", get_current_time (), id);

TV_count++;

}

void RemoveTV () // извлечение TV

{

if (! TV_count) // условие извлечения TV

return;

printf ("%.1f: Телевизор в рабочем состоянии \n", get_current_time (), id);

TV_count--;

}

void RemoveTVAd ()

{

if (! TV_count)

return;

TV_count--;

}

bool IsFull () // проверка на переполнение

{

return TV_count == MAX_TV_ON_CONTROLER;

}

bool IsEmpty () // проверка на пустоту

{

return TV_count == 0;

}

private:

size_t TV_count; // количество TV

size_t id; // идентификатор TV

};

class TV // класс Телевизор

{

public:

TV () // конструктор по умолчанию

{

tv_generation_next_time = 0;

}

void Process (Queue& queue1, Queue& queue2) // функция заполнения очередей

{

if (get_current_time () <tv_generation_next_time)

return;

Queue* q;

Queue* q1;

q = &queue1;

q1 = &queue2;

if (! q->IsFull ()) // условие добавления в очередь 1

q->AddTV ();

else if (! q1->IsFull ()) // условие добавления в очередь 2

q1->AddTV ();

tv_generation_next_time = get_current_time () + frand (3.5, 7.5); // время между поступлениями телевизоров в пункт контроля

}

private:

float tv_generation_next_time; // время поступления нового TV

};

class Controler // класс Контролер

{

public:

Controler () // конструктор по умолчанию

{

TV_next_time = 0;

}

void Process (Queue& q,Queue& q_ad) // процесс прохождениятелевизором контроля

{

if (get_current_time () < TV_next_time)

return;

q. RemoveTV ();

if (frand (0, 100) <15) // процент возращаемых TV

{

printf ("%.1f: Телевизоров не работает\n", get_current_time ());

q. RemoveTVAd ();

q_ad. AddTV ();

}

else

q. AddTV ();

float c=frand (6,12); // среднее время необходимое на проверку одного TV

TV_next_time = get_current_time () +c;

servicecon_time+=c;

}

void Delay (float dt) // задержка

{

TV_next_time = get_current_time () + dt;

}

private:

float TV_next_time; // значение задержки

};

class Adjuster // класс Настройщик

{

public:

Adjuster () // конструктор по умолчанию

{

TV_next_time = 0;

}

void Process (Queue& q_ad)

{

if (get_current_time () < TV_next_time)

return;

else

{

printf ("%.1f: Телевизоров настроен\n", get_current_time ());

}

q_ad. RemoveTVAd ();

float C=frand (20,40); // среднее время настройки

TV_next_time = get_current_time () + C;

tested_time+=C;

}

private:

float TV_next_time; // значение задержки

};

class Conveyor // класс Конвеер

{

public:

Conveyor (): queue1 (1), queue2 (2), queue3 (3) // заполнение очередей

{

}

void Process () // процесс работы конвеера

{

tv_generator. Process (queue1, queue2); // процесс генерации TV с использованием очередей 1 и 2

controler1. Process (queue1,queue3); // провера TV контроллером 1 с использованием очередей 1 и 3

controler2. Process (queue2,queue3); // провера TV контроллером 2 с использованием очередей 2 и 3

adjuster1. Process (queue3); // настройка TV с использованием очереди 3

}

private:

TVtv_generator; // генератор TV

Queue queue1; // очередь 1

Queue queue2; // очередь 2

Queue queue3; // очередь 3

Controler controler1; // контроллер 1

Controler controler2; // контроллер 2

Adjuster adjuster1; // настройщик

};

int main ()

{

setlocale (LC_ALL,"Russian");

int ch;

do

{

cout<<"-----------------------------"<<endl;

cout<<"| SAL v0.21 |"<<endl;

cout<<"| 1 - Старт моделирования |"<<endl;

cout<<"| Esc - Выход |"<<endl;

cout<<"-----------------------------"<<endl;

ch=getch (); // ввод пункта меню

switch (ch)

{

case '1':

{

system ("cls"); // функция очистки экрана

cout<<"----Старт симуляции----\n";

cout<<"Введите шаг времени (от 0.1 до 2): ";

cin>>TIME_STEP; // ввод значения шага времени

if (TIME_STEP<=0.1||TIME_STEP>2) TIME_STEP=0.1;

cout<<"Введите время моделирования (от 1 до 1500): ";

cin>>MODELING_TIME; // ввод значения времени моделирования

if (MODELING_TIME<=1||MODELING_TIME>1500) MODELING_TIME=1000;

cout<<"Введите максимальное значение очереди контроллера (от 1 до 15): ";

cout<<endl;

cin>>MAX_TV_ON_CONTROLER; // ввод значения максимального количества TV на контроллере

if (MAX_TV_ON_CONTROLER<=1||MAX_TV_ON_CONTROLER>15) MAX_TV_ON_CONTROLER=5;

Conveyor conveyor1;

while (get_current_time () <MODELING_TIME)

{

conveyor1. Process ();

current_time += TIME_STEP;

}

cout<<"----Конец симуляции----\n";

cout<<"\n\n";

cout<<"Статистика: "<<endl;

cout<<"Загрузка контроллеров = "<< ( ( (servicecon_time) *100) / (2*get_current_time ())) <<"%"<<endl; // статистика загрузки контроллеров

cout<<"Загрузка настройщика = "<< ( (tested_time*100) /get_current_time ()) <<"%"<<endl; // статистика загрузки настройщика

cout<<"\n\n";

break;

}

case 27: // выход из программы

return 0;

}

}

while (1);

getch ();

return 0;

}

Размещено на Allbest.ru

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]