* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
29
Курсовой проект
По дисциплине « Моделирование систем »
СОДЕРЖАНИЕ
Введение 6
1 Описание задачи 8
1.1 Постановка задачи 8
1.2 Описание предметной области 8
1.3 Описание математическо го аппарата 9
1.4 Метод решения 1 1
2 Описание применения 13
2.1 Назначение и условия применения программы 13
2.2 Входные и выходные данные 13
2.3 Инструкция пользователя 14
3 Описание программы 15
3.1 Общие сведения и функциональное назначение 15
3.2 Алгоритм работы программы 17
3.3 Описание логической структуры 17
3.4 Используемые технические средства, вызов, загрузка 1 8
3.5 Контрольный пример 2 8
Заключение 2 0
Список использованной литературы 2 1
Приложение А. Текст программы 2 2
Приложение Б. Экранные формы 29
Приложение В. Блок-схема алгоритма 30
Приложение Г. Q -Схема 31
ВВЕДЕНИЕ
Системный анализ – это научная дисциплина, которая разрабатывает общие принципы исследования сложных объектов с учетом их системного характера. Под системным анализом также понимают методологию анализа объектов посредством представления их в качестве систем и исследования этих систем.
Системным анализом называется такой способ изучения сложных явлений и процессов, при котором рассматриваются их части называемые подсистемами и элементами с целью выяснения влияния связей и подсистем на свойства объектов в целом.
Существует 4 понятия:
а) системный анализ;
б) теория систем;
в) системный подход;
г) системотехника.
Инструментом системного подхода является системный анализ, который те о ретически базируется на теории систем.
Системотехника – часть системного анализа, направленная на создание авт о матизированных систем, т.е. систем, в составе которых функционируют люди и компьютеры.
Модель – есть способ существования знаний. Модель – это объект-заменитель объекта-оригинала.
Моделирование – замещение одного объекта другим с целью получения и н формации о важнейших свойствах объекта-оригинала с помощью объекта-модели путем проведения эксперимента.
Теория моделирования – теория замещения одних объектов (оригиналов) др у гими (моделями) и исследование свойств объектов на их моделях.
Машинное моделирование – это наиболее универсальный и эффективный м е тод оценки характеристик больших и сложных систем.
Машинное моделирование наиболее успешно в таких случаях, когда:
а) тяжело четко сформулировать критерии оценки качества функциониров а ния объекта;
б) цель не поддается полной формализации.
Таким образом, компьютерная модель должна сочетать программно-технические возможности ЭВМ и неформальное мышление, то есть интеллект.
Моделирование с помощью ЭВМ используется в следующих случаях:
а) для исследования объекта до того, как он спроектирован. Цель - определ е ние чувствительности характеристик к изменениям структуры, алгоритмов и пар а метров объектов и внешней среды;
б) на этапе проектирования объекта с целью анализа и синтеза вариантов об ъ екта и выбора среди альтернативных наиболее эффективного;
в) при эксплуатации объекта, т.е. после завершения проектирования и внедр е ния объекта. Цель – получение информации, дополняющей результаты натурных испытаний (эксплуатации) реального объекта и для получения прогнозов эволюции объекта во времени.
1 ОПИСАНИЕ ЗАДАЧИ
1.1 Постановка задачи
В студенческом зале размещены 2 мини-ЭВМ и устройство подготовки данных (УПД). Студенты приходят с интервалом в 8±2 минуты и треть из них хочет и с пользовать УПД совместно с ЭВМ, остальные только ЭВМ. Допустимая очередь в машинном зале составляет 4 человека, включая работающего с УПД. Работа на УПД занимает 8±1 минут, а на ЭВМ – 17. Кроме этого, 20% работающих на ЭВМ возвр а щаются для повторного использования ЭВМ.
Необходимо смоделировать работу машинного зала в течение 60 часов. Опр е делить нагрузку УПД, ЭВМ и вероятность отказа в обслуживаниив виду переполн е ния очереди. Определить соотношение желающих работать на ЭВМ и на УПД в очереди.
1.2 Описание предметной области
Одним из основных подходов, используемых при построении математических моделей процессов функционирования систем, является непрерывно-стохастический подход.
Схемы массового обслуживания представляют собой класс математических схем, разработанных в теории массового обслуживания и различных приложениях для формализации процессов функционирования систем, которые по сути своей я в ляются процессами обслуживания.
В качестве процесса обслуживания могут быть представлены разные по своей функциональной природе процессы функционирования экономических, произво д ственных, технических и других систем:
а) потоки поставок продукции предприятию;
б) потоки деталей и комплектующих изделий на сборочном конвейере цеха;
в) заявки на обработку информации ЭВМ от отдельных терминалов;
г) обслуживание покупателей в магазине или клиентов банка кассиром.
Задачи массового обслуживания возникают в тех случаях, когда условия на выполнение работы поступают в случайные моменты времени, а на выполнение этих работ, называемые обслуживанием, осуществляется одним или несколькими обслуживающими устройствами. Длительность выполнения отдельных требований предполагается случайной.
В любом элементарном акте обслуживания можно выделить две основные с о ставляющие: ожидание обслуживания и собственно обслуживание заявки.
Характерной особенностью задач массового обслуживания является возни к новение несоответствия между скоростью обслуживания, в результате чего или ок а зываются простаивающими обслуживаемые приборы или образуется очередь на о б служивание. Поэтому принципиальный интерес представляют следующие характ е ристики СМО:
а) длина очереди в различные моменты времени;
б) общая продолжительность нахождения требования в системе обслужив а ния;
в) доля времени, в течении которого обслуживающие приборы были не зан я ты.
1.3 Описание математическо го аппарата
В данной курсовом проекте рассматривается модель трехканальной системы обслуживания: три канала обслуживания – две ЭВМ и УПД . Схема модели имеет один накопитель и три канала обслуживания. (Прил о жение Б).
Обслуживание производится свободным в данный момент времени каналом. При чем, если очерелная заявка из накопителя берется по такому правилу: если з а явка не требует УПД и есть свободная ЭВМ, то заявка принимается на обработку. Если УПД занята, то заявка пропускается и обрабатывается следующая в накопит е ле.
В качестве математической модели можно представить модели всех комп о нентов моделируемой системы.
Основным элементом модели является тип-запись TUserInfo , который служит для представления обслуживаемых студентов . Этот тип лишь поле NeedPPD , кот о ры е определяет надобность в УПД .
Кроме того, в программе описаны объекты TEVM и TQueue .
Класс TEVM определяет поведение объекта ЭВМ. Он моделирует работу о т дельной ЭВМ в системе, которая имеет свои свойства и изменяет их независимо от других элементов системы. Т.е. каждая ЭВМ является отдельной независимой ч а стью всей системы.
Класс TQueue реализует модель работы накопителя. Объект отвечает за пов е дение заявок: поступление, хранение, удаление, передачу на обработку в ЭВМ.
В соответствии с условием через каждый промежуток времени на вход нак о пителя поступает новая заявка. Если накопитель может ее принять, он это делает, иначе заявка игнорируется и записывается сведение в статистику.
Каждый такт система проверяет доступность одной из ЭВМ. Попадание зая в ки на обработку регулируется с помощью правила. По окончанию выполнения зав я ки, если не требуется продлить время работы, заявка покидает ЭВМ.
Работа данной системы реализуется в соответствии с Q -схемой, которая опред е ляется следующим набором:
Q = < W , U , H , Z , R , A > (1.1)
где :
W – подмножество входящих потоков заявок на обслуживание:
U – подмножество потоков обслуживания;
H – подмножество собственных параметров;
Z – подмножество состояний элементов структуры ( Z i H , Z i K );
R – оператор сопряжения элементов структуры (каналов и накопителей);
A – оператор алгоритмов обслуживания заявок (оператор поведения заявок).
Подмножество собственных параметров H для данной схемы:
H i = L ф , L ki , L ik , L i (1. 2 )
где:
L ф – количество фаз. L ф = 2;
L ki – количество каналов. L k1 = 1, L k2 =1;
L н j – количество накопителей. L н1 = 1, L н2 = 1;
L нi – ёмкость i -го накопителя. Теоретически не ограниченна.
Подмножество состояний системы определяется выражением:
Z i =( Z i H , Z i K ) (1.3)
где – Z i H состояние накопителя (Z i = 0– накопитель пуст, Z i = 1 – в накопителе им е ется 1 заявка,..., Z i = L i – накопитель полностью заполнен);
L i – ёмкость накопителя, измеряемая числом помещаемых в нём заявок;
Z i K – состояние канала К i ( Z i = 0– канал свободен, Z i = 1– канал занят).
В курсо вом проекте имеется статистика, описанная в постановке задач.
При генерации завяки увеличивается значение счетчика AllCount . На каждом такте работы программа информирует пользователя о состоянии счетчика.
Edit1.Text := inttostr(queue.AllCount);
Также ведется подсчет количества отклоненных заявок Rejected
Edit2.Text := inttostr(queue.Rejected);
Кроме того ведется подсчет заявок, требующих УПД
Edit4.Text := inttostr(inPPD);
Для расчета соотношения
if queue.AllCount = 0 then Edit5.Text := '0%'
else Edit5.Text := floattostr(roundto((outLine/queue.AllCount*100), -2)) + '%';
Расчет соотношения заявок, требующих УПД ко всем заявкам вычисляется по такой формуле.
if queue.AllCount = 0 then Edit6.Text := '0' + '%'
else Edit6.Text := floattostr(roundto((inPPD/queue.AllCount*100), -2)) + '%';
1.4 Метод решения
Поставленная задача была реализована при помощи объектно-ориентирован-ного и структурного программирования.
Суть структурного программирования заключается в оформлении часто и с пользуемых последовательностей команд как отдельных функций и процедур и в объед и нении данных, связанных по смыслу, в сложные структуры данных.
Структурное программирование – это программирование, которое основано на основных вычислительных структурах. При использовании этого метода придерж и ваю т ся строгих правил построения алгоритма.
Всякая структурированная блок-схема может быть выражена как композиция из четырёх основных элементарных блок-схем:
- композиции, то есть последовательным решением двух задач. Если первая задача вырабатывает какую-то информацию необходимую для второй задачи, то они образуют составной блок. В такой подстановке задача разделяется на отдельные ч а сти. Объекты первой задачи могут являться глобальными для второй задачи.
- альтернативы. В такой блок-схеме вычисляется значение предиката и в ы полняется задача 1 или 2. Задача 2 может при этом отсутствовать. Эта блок-схема легко реализуется оператором IF. . . THEN. . . ELSE.
- итерации повторения, то есть производится повторения вычисления п о ставленной задачи.
Структурированное программирование состоит из этих элементарных блок-схем, образуя блоки задач, которые, в свою очередь, могут содержать в себе блок-схемы, описанные выше.
2 ОПИСАНИЕ ПРИМЕНЕНИЯ
2.1 Назначение и условия применения программы
Программа “ Моделирование работы компьютерного зала по информацио н ному обслуживанию студентов ” предназначена для удобного и наглядного модел и рования работы компьютерного зала .
Программа имеет наглядный интерфейс, который позволяет проследить виз у ально процессы, проходящие в системе.
Программа может быть использована на IBM AT совместимом компьютере, в котором установлена операционная система Windows 9 x , 2000, NT , XP , и среда пр о граммирования Delphi 6.
Общие требования к системе определяются требованиями операционной с и стемы и среды программирования Delphi 6.
2.2 Входные и выходные данные
Входными к программе являются параметры моделирования, а именно:
- объем накопителя ;
- временные параметры обработки заявок ;
- вероятностные показатели поведения заявок;
К выходным данным относятся результаты моделирования, которые отобр а жаются на экране монитора:
- количество обслуженных заявок ;
- количество отклоненных заявок .
- время работы системы;
- процент УПД заявок от общего количества;
2.3 Инструкция пользователя
Запуск программы “ Моделирование работы компьютерного зала по информ а ционному обслуживанию студентов ” осуществляется при помощи файла Pr o ject 1 . exe .
После запуска появится окно программы, в котором имеются все необход и мые средства для моделирования.
Суть моделирования заключается в том, что происходит запуск процесса на основании исходных данных, и на экране отображается ход процесса.
Кнопка « Старт » сл ужит для запуска моделирования.
Кнопка «Пауза» предназначении для временной остановки процесса модел и рования.
Информацию о моделировании отображается в окне моделирования.
Также окно содержит журнал событий. Он отображает все события, которые происходили в системе.
Визуальная модель состоит из очереди, 2 ЭВМ и УПД. Если объект свободен, он отображается зеленым цветом, иначе – красным .
3 ОПИСАНИЕ ПРОГРАММЫ
3.1 Общие сведения и функциональное назначение
Программа “ Моделирование работы компьютерного зала по информационн о му обслуживанию студентов ” представляет собой законченный программный пр о дукт, который предназначен для моделирования работы компьютерного зала .
Выполнение данной программы производилось при помощи средств языка программирования Delphi 7 .
Borland Delphi представляет собой язык программирования общего назнач е ния. Наиболее эффективно он может быть использован для быстрого создания н е больших и надежных приложений. Однако он с успехом может использоваться и при написании сложных проектов. Borland Delphi оперирует объектами, присущими типичной ЭВМ: символами, строками, целыми числами различной длины, числами с плавающей запятой.
К важнейшим достоинствам языка Borland Delphi относятся очень быстрая компиляция программ, объединение компилятора с интерактивной средой разрабо т чика, средства быстрой разработки приложений, предупреждение об ошибках на уровне исходной программы, обширная библиотека программ и полезные расшир е ния в виде компонентов.
Delphi – современный язык. Он включает в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием. Его структура пробуждает программиста использовать в своей работе структурное пр о граммирование и пошаговую разработку модулей. Результатом такого подхода я в ляется надежная и хорошо читаемая программа. Важнейшей особенностью языка является иерархическая структура программ. Она возможна благодаря наличию процедур и функций, обеспечивающих возможность практической реализации принципов структурного программирования. Ориентируясь на эти принципы, мо ж но разделить большую программу на ряд меньших, оформив их как процедуры или функции. Эти процедуры отлаживаются отдельно и независимо, а затем уже могут использоваться в главной программе как готовые и нез а висимые.
Благодаря операторам, процедурам и функциям языка возможно написание ряда сложных и разнообразных по структуре, применению и выполняемым функц и ям программ.
Данная задача является задачей обработки множества однотипных заявок, а такие задачи решаются с помощью систем массового обслуживания.
Системы массового обслуживания представляют собой класс ма тематических схем, разработанных в теории массового обслуживания и различных приложениях для формализации процессов функционирова ния систем, которая по своей сути я в ляются процессами обслужива ния.
Задачи массового обслуживания возникают в тех случаях, ког да условия на выполнение роботы поступают в случайные моменты времени, а выполнение этих работ, называемые обслуживанием, осу ществляется одним или несколькими обсл у живающими устройствами. Длительность выполнения отдельных требований пре д полагается слу чайной.
Устройство, способное в любой момент времени обслуживать лишь одно тр е бование, называется каналом обслуживания.
Характерной особенностью задач массового обслуживания яв ляется возни к новение несоответствия между скоростью поступления требований и скоростью о б служивания, в результате чего или оказы ваются простаивающими обслуживаемые приборы или образуется оче редь на обслуживание. В данной работе в накопителях возникают очере ди на обслуживание.
Исходный текст программы находится в следующих файлах: Project 1. dpr , Unit 1. pas . Исполняемый модуль под именем Kursak . exe имеет размер 401408 байт.
3.2 Алгоритм работы программы
Шаг1. Запуск процесса моделирования. Шаг 2.
Шаг2. Обработка ЭВМ. Шаг 3
Шаг3. Генерация новых заявок. Шаг 4
Шаг4. Проверка времени работы. 6 часов – шаг 5. меньше – шаг 2.
Шаг5. Генерация результатов
3.3 Описание логической структуры
Программа « Моделирование работы компьютерного зала по информационн о му обслуживанию студентов » написана в соответствии с принцип а ми объектно-ориентированного программирования. В качестве среды разработки была использ о вана программная среда Delphi 7 , которая позволяет довольно быстро создавать надежные приложения и удобный и н терфейс.
Программа состоит из следующих частей:
- Project 1 . dpr – файл проекта, содержащий сведения, необходимые для начал ь ной инициализации всего проекта.
- Unit 1. pas – основной модуль программы, который служит собственно для выполнения задания, т.е. этот модуль осуществляет непосредственно процесс мод е лирования.
- Unit 1. dfm – файл, содержащий сведения о внешнем виде формы основного модуля.
Собственно процесс моделирования описан в модуле Unit 1. Этот модуль условно можно разделить на несколько частей: заголовочная часть, в которой с о держится имя программы и указан список всех используемых модулей; часть опис а ния, в которой приведено описание всех переменных, типов, функций и процедур, используемых в программе; и основная часть, содержащая основной текст програ м мы.
Далее весь процесс моделирования определяется действиями пользователя.
Если была нажата кнопка « Старт », то в результате этого, в системе выполн я ются следующие действия: активизируется и запускается таймер – компонент, кот о рый срабатывает через определенные интервалы времени, при этом выполняя де й ствия, описанные внутри процедуры Timer 1 Timer . Процедура Timer 1 Timer выпо л няет ряд действий, меняющих состояние каждой ЭВМ, накопителя и счетчиков.
Работа таймера продолжается до тех пор, пока время моделирования не зако н чится, после чего таймер останавливается (свойство Enabled принимает значение False ), что о з начает конец моделирования.
Если во время моделирования нажать кнопку «Пауза», то выполнение таймера останавливается, а при нажатии кнопки «Продолжить» выполнение возобновляется (устанавливает свойство E n abled в значение False ).
3.4 Используемые технические средства, вызов, загрузка
Для разработки данной программы был использован IBM PC -совместимый компьютер c оперативной памятью 1024 Мбайт, жесткий диск с объемом 3 00 Гба й та, монитор SVGA 19 ”. Программа была разработана в среде программирования Delphi 7 .
Требования к системе определяются требованиями компилятора языка Delphi 7 и операционной системы. Для работы программы необходимо наличие ОС Microsoft Windows 9 x , 2000, NT или XP .
3.5 Контрольный пример
Процесс моделирования был запущен с использованием оптимальных данных, для решения задания. Были получены результаты, приведенные ниже.
Исходные данные описаны в постановке задачи.
Результаты:
- количество заявок: 400
- отклонено: 3
- время работы: 60 минут;
- заявок на УПД: 105;
- вероятность попадания в очередь: 0,75%
- соотношение УПД к ЭВМ: 26,25%
ЗАКЛЮЧЕНИЕ
Целью данного проекта было приобретение, и закрепление навыков модел и рования систем, теоретические основы которого были изложены в курсе «Основы системного анализа объектов и процессов компьютеризации». Результатом разр а ботки проекта является программа, моделирующая работу компьютерного зала . М о делируемая система была реализована на основе математической модели, называ е мой Q -схемой.
Программа « Моделирование работы компьютерного зала по информационн о му обслуживанию студентов » позволяет успешно промоделировать изучаемую с и стему, и получить конкретные результаты, которые можно подвергнуть анализу с целью улучшения работы сист е мы, если это необходимо.
В программе реализован механизм выдачи статистических данных. Таким о б разом, можно фиксировать результаты работы системы в любой момент времени. Программа имеет удобный интерфейс, который позволяет ориентироваться в пр о цессе фун к ционирования системы.
Программа была написана на объектно-ориентированном языке программир о вания Delphi 7 . При необходимости ее можно легко усовершенствовать, для реал и зации более сложных процессов.
В общем, исходя из перечисленного выше, можно сделать вывод, что цель курсового проекта была достигнута. Материал, изложенный в курсе «Основы с и стемного анализа объектов и процессов компьютеризации» был усв о ен и закреплен.
СПИСОК ИСПОЛЬЗОВАНОЙ ЛИТЕРАТУРЫ
1. Фаронов В. В. Delphi 5 Учебный курс. - М.: Нолидж, 2001. – 270 с.
2. Методические указания по выполнению курсового проекта по дисциплине “Основы системного анализа объектов и процессов компьютеризации”. В.О. Костин - Херсон. 2000. – 28 с.
3. Советов Б.Я., Яковлев С.А. Лабораторный практикум. - M.: Высш. шк. 1983. – 260 с.
4. Советов Б.Я., Яковлев С.А. Моделирование систем. Куpсовое пpоектиpов а ние.: М.Высшая школа, 1988. – 135 c.
5. С оветов Б.Я., Яковлев С.А. Моделирование систем.- М.: Высш. шк., 1985. – 275 с.
Приложение А
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, math;
const EVM_COUNT = 2;
MAXQ = 10;
C_QWIDTH = 40;
C_QHEIGHT = 60;
EVM_WORK = 17;
type TUserInfo = record
NeedPPD: boolean;
end;
type TEVM = object
public
Panel: TPanel;
busy: boolean;
constructor Create(p: TPanel);
procedure StartUserWork(cUser: TUserInfo);
procedure OnBusy;
procedure OnRelease;
private
iTimer: integer; //сколько тактов занят
user: TUserInfo;
end;
type TQueue = object
public
constructor Create(x, y, cnt: integer; owner: TWinControl);
destructor Destroy;
procedure EmptyField(k: integer);
procedure EmptyAll;
procedure OnBusy(k: integer);
procedure OnRelease(k: integer);
procedure OnUserAddFault;
procedure MoveQ(k: integer);
function IsEmpty: boolean;
function GenerateUser: integer; //-1 - full queue
function GetEmptyIndex: integer; //-1 full
private
Indicators: array [1..MAXQ] of TPanel;
Status: array [1..MAXQ] of boolean; //true - busy
Users: array [1..MAXQ] of TUserInfo;
Count: integer;
AllCount: integer; //все заявки
Rejected: integer;
end;
type
TForm1 = class(TForm)
Memo1: TMemo;
Panel30: TPanel;
Panel1: TPanel;
Panel2: TPanel;
Panel20: TPanel;
Button1: TButton;
Button2: TButton;
Panel3: TPanel;
Edit1: TEdit;
Label1: TLabel;
Timer1: TTimer;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
Edit6: TEdit;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
function GetEmptyEVM: integer;
procedure Button1Click(Sender: TObject);
procedure OnPPDBusy;
procedure OnPPDRelease;
procedure Button2Click(Sender: TObject);
private
Private declarations
public
Public declarations
end;
var
Form1: TForm1;
mach: array [1..EVM_COUNT] of TEVM;
queue: TQueue;
iLastUserTime: integer; //when last came
iPDDTime: integer;
bPDDBusy: boolean;
minutes: integer;
inPPD, outLine: integer;
implementation
$R *.dfm
constructor TQueue.Create(x, y, cnt: integer; owner: TWinControl);
var i: integer;
begin
if cnt > MAXQ then
begin
Exception . Create ('Слишком большая очередь');
exit;
end;
Count := cnt;
for i := 1 to cnt do
begin
Indicators[i] := TPanel.Create(owner);
Indicators[i].Height := C_QHEIGHT;
Indicators[i].Width := C_QWIDTH;
Indicators[i].Left := x + (i-1)*C_QWIDTH;
Indicators[i].top := y;
Indicators[i].Caption := inttostr(i);
Indicators[i].BevelInner := bvLowered;
Indicators[i].Parent := owner;
end;
EmptyAll;
end;
destructor TQueue.Destroy;
var i: integer;
begin
for i := 1 to Count do
Indicators[i].Free;
end;
procedure TQueue.OnUserAddFault;
begin
inc(rejected);
end;
function TQueue.GetEmptyIndex: integer;
var i: integer;
begin
result := -1;
for i := count downto 1 do
if not status[i] then
begin
result := i;
break;
end;
end;
function TQueue.GenerateUser: integer;
begin
inc(AllCount);
result := GetEmptyIndex;
if result = -1 then
begin
OnUserAddFault;
exit;
end;
OnBusy(result);
randomize;
//init user
// Users[result].NeedPPD := (random(30) mod 3 = 0);
Users[result].NeedPPD := (random(2) = 1);
end;
function TQueue.IsEmpty: boolean;
var i: integer;
begin
result := false;
for i := 1 to Count do
if status[i] then exit;
result := true;
end;
procedure TQueue.MoveQ(k: integer);
var i: integer;
begin
if k = 1 then exit;
if IsEmpty then exit;
for i := k downto 2 do
begin
//Indicators[i] := Indicators[i-1];
Status[i] := Status[i-1];
Users[i] := Users[i-1];
if Status[i] then OnBusy(i) else OnRelease(i);
end;
OnRelease(1);
end;
procedure TQueue.OnBusy(k: integer);
begin
Status[k] := true;
Indicators[k].Color := clRed;
end;
procedure TQueue.OnRelease(k: integer);
begin
Status[k] := false;
Indicators[k].Color := clGreen;
end;
procedure TQueue.EmptyField(k: integer);
begin
OnRelease(k);
Status[k] := false;
end;
procedure TQueue.EmptyAll;
var i: integer;
begin
for i := 1 to count do EmptyField(i);
AllCount := 0;
Rejected:= 0;
end;
constructor TEVM.Create(p: TPanel);
begin
panel := p;
OnRelease;
end;
procedure TEVM.OnBusy;
begin
busy := true;
panel.Color := clRed;
end;
procedure TEVM.OnRelease;
begin
busy := false;
panel.Color := clGreen;
end;
procedure TEVM.StartUserWork(cUser: TUserInfo);
begin
user := cuser;
iTimer := 0;
OnBusy;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
for i := 1 to EVM_COUNT do
mach[i].Create(TPanel(findcomponent('panel'+inttostr(i))));
//queue := TQUEUE.Create(100, 100, 4, form1);
queue.Create(100, 50, 4, Panel30);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button2.Click;
queue.Destroy;
end;
function TForm1.GetEmptyEVM: integer;
var i: integer;
begin
result := -1;
for i := 1 to EVM_COUNT do
if not mach[i].busy then
begin
result := i;
break;
end;
end;
procedure TForm1.OnPPDBusy;
begin
bPDDBusy := true;
Panel20.Color := clRed;
iPDDTime := 0;
memo1.Lines.Add('Занят ППД');
end;
procedure TForm1.OnPPDRelease;
begin
bPDDBusy := false;
Panel20.Color := clGreen;
memo1.Lines.Add('Освободилось ППД');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i, k, j: integer;
newuser: boolean;
s: string;
begin
//user from EVM
s := '';
for i := 1 to EVM_COUNT do
begin
if mach[i].Busy then inc(mach[i].iTimer);
if (mach[i].Busy) and (mach[i].iTimer >= EVM_WORK) then
begin
//user time out )
mach[i].iTimer := 0;
randomize;
if (random(4) = 1) then
begin
//20%
mach[i].iTimer := 0;
memo1.Lines.Add('Пользоваель вернулся');
end
else
begin
//empty EVM
mach[i].busy := false;
mach [ i ]. OnRelease ;
memo 1. Lines . Add ('Пользователь закончил работу на машине' + inttostr ( i ));
end;
end;
end;
//user from PPD
if (bPDDBusy) and (iPDDTime >= 8) then
begin
OnPPDRelease;
end
else inc(iPDDTime);
//user to EVM
if not queue.IsEmpty then
for i := 1 to EVM_COUNT do
if not mach[i].busy then
begin
for j := queue.Count downto 1 do
if queue.Status[j] then
begin
if ((queue.Users[j].NeedPPD = true) and (bPDDBusy = false)) or (queue.Users[j].NeedPPD = false) then
begin
//add
if queue.Users[j].NeedPPD then memo1.Lines.Add('Новый пользователь с ППД')
else memo 1. Lines . Add ('Новый пользователь без ППД');
if (queue.Users[j].NeedPPD = true) then
begin
OnPPDBusy;
end;
mach[i].user := queue.Users[j];
mach[i].iTimer := 0;
mach[i].OnBusy;
queue.MoveQ(j);
end;
end;
end;
//display values
Edit1.Text := inttostr(queue.AllCount);
Edit2.Text := inttostr(queue.Rejected);
Edit4.Text := inttostr(inPPD);
if queue.AllCount = 0 then Edit5.Text := '0%'
else Edit5.Text := floattostr(roundto((outLine/queue.AllCount*100), -2)) + '%';
if queue.AllCount = 0 then Edit6.Text := '0' + '%'
else Edit6.Text := floattostr(roundto((inPPD/queue.AllCount*100), -2)) + '%';
minutes:= minutes + 1;
j := minutes div 60;
if j = 60 then
begin
edit3.Text := '60:00';
memo1.Lines.Add('Конец работы');
Timer1.Enabled := false;
exit;
end;
if j = 0 then s := '00'
else if j < 10 then s := '0'+inttostr(j)
else s := inttostr(j);
s := s + ':';
j := minutes - j*60;
if j = 0 then s := '00'
else if j < 10 then s := s + '0'+inttostr(j)
else s := s + inttostr(j);
edit3.Text := s;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
bPDDBusy := false;
iPDDTime := 0;
queue.EmptyAll;
for i := 1 to EVM_COUNT do
mach[i].busy := false;
Timer1.Enabled := true;
minutes := 0;
inPPD := 0;
outLine := 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := false;
end;
end.
Приложение Б
Экранные формы
Рис.Б.1. Программа моделирования
Приложение В
Блок-схема алгоритма
29
Приложение Г
Q -схема