Лабораторная работа №7


Тема: Создание имитационной модели «Моделирование клапана с таймером»

Цель: на примере имитационной модели «Моделирование клапана с таймером» реализовать задачу взаимного исключения

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

На платформу станции метро приходят пассажиры. Если поезда нет, они ждут на перроне. Когда поезд приходит, начинается посадка. Когда время посадки заканчивается, поезд уезжает. Рассматривается посадка в поезда только в одном направлении. Поездка пассажира в поезде не включается в моделируемый процесс.

Таблица 1

Параметры модели

Параметр

Среднее значение

Интервал прихода пассажиров

15 секунд

Интервал прихода поездов

1.5 минуты

Время стоянки поезда

30 секунд

Описание работы модели

Генератор 1 создает транзакты, имитирующие приходящих на станцию пассажиров. Интервал генерации распределен по экспоненциальному закону по теореме о суперпозиции потоков событий.

Очередь 2 имитирует перрон. Ключ 3 имитирует двери поезда. Если он открыт (поезд стоит на платформе), транзакты переходят в терминатор 4 (пассажиры входят в вагон). Если ключ 3 закрыт (поезда нет), транзакты остаются в очереди 2 (пассажиры ждут поезда).

Рисунок 1 — Схема модели станции метрополитена.

Как и в модели остановки маршрутного такси, здесь нужно произвести начальное закрытие ключа 3. Это делается в момент прихода первого транзакта-пассажира в очередь 2.

Основной принцип работы данной модели отражен на рисунке 2: через определенные промежутки времени ключ замыкается и снова размыкается по прошествии некоторого заданного времени.

clip_image002

Рисунок 2 — Работа клапана под управлением таймера.

Цепочка узлов Ag — Serv — Term играет роль таймера, подающего сигналы открытия и закрытия ключа. Сигналами являются вход транзакта в сервер и в терминатор. Интервал генерации равен сумме периодов нахождения ключа в открытом и закрытом состоянии (время от открытия до открытия). Время задержки в сервере равно периоду нахождения ключа в открытом состоянии (время от открытия до закрытия).

В нашей модели интервалом генерации генератора 5 является интервал прихода поездов. Время задержки транзакта в сервере 6 — это время стоянки поезда. Эти времена описаны как точные величины (на месте вида закона распределения стоит значение “none” — “никакое”). Считается, что поезда приходят и отправляются строго по расписанию, без отклонений.

Команда открытия ключа выдается после входа транзакта в сервер 6. Это событие соответствует приходу поезда. Команда закрытия ключа выдается из терминатора 7. Это событие соответствует окончанию посадки и отправлению поезда.

Текст модели

Обратите внимание, что в данном примере параметры модели заданы с помощью констант пользователя (операторы #define), а не переменных. Это значит, что их значения нельзя менять в процессе работы PILGRIM-программы.

/* Модель работы станции метрополитена */

/* Единица измерения времени — 1 секунда */

/* Врем моделирования — 8 часов */

#include <pilgrim.h>

#define T_PASS 15.0 /* Интервал прихода пассажиров */

#define T_POEZD 90.0 /* Интервал прихода поездов */

#define T_POEZD_STAND 30.0 /* Время стоянки поезда */

forward

{

modbeg("Станция метро”,7,60.0*60*8,(long)time(NULL),

none,2,none,4,2);

ag("Пассажиры",1,none,expo,T_PASS,zero,zero,2);

ag("Поезда",5,none,none,T_POEZD,T_POEZD/3,zero,6);

network(dummy,dummy)

{

top(2):queue("Перрон",none,3);

clcode

if (addr[2]->na == 1)

hold(3);

place;

top(3):key("Двери поезда",4);

place;

top(4):term("Пассажир сел в поезд");

place;

top(6):serv("Поезд стоит",1,none,none,T_POEZD_STAND,

T_POEZD_STAND/3,zero,17);

rels(3);

place;

top(7):term("Поезд ушел");

hold(3);

place;

fault(123);

}

modend("Metro.rep",1,12,page);

return 0;

}

Загрузка...