Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИЖКА_Моделювання систем у GPSS World.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.15 Mб
Скачать

5.6. Блоки для зміни послідовності руху транзактів у моделі

Для зміни маршрутів руху транзактів у моделі застосовуються блоки DISPLACE, LOOP, GATE, TEST і TRANSFER. Розглянемо застосування блоків TRANSFER, DISPLACE, LOOP. Використання блоків GATE і TEST для керування в одноканальних пристроях вже розглянуто. Застосування цих блоків у багатоканальних пристроях показано в наступних розділах.

Блок TRANSFER (Передати) є основним засобом для передавання вхід­ного в нього транзакта в будь-який інший блок моделі. Він має наступний формат:

TRANSFER [А],[В],[С],[D]

Всі режими блоку TRANSFER, крім безумовного, вибіркові, тобто відрізняються один від одного способом вибору чергового блоку, до якого спрямовується активний транзакт. Операнд А задає цей режим вибору. Існують дев'ять режимів роботи блоку TRANSFER:

  • ( ) – безумовний (за замовчуванням);

  • (.) – статистичний, випадковий вибір одного із двох блоків;

  • BOTH – послідовний вибір одного із двох блоків;

  • ALL – послідовний вибір одного з декількох блоків;

  • PICK – випадковий вибір одного з декількох блоків;

  • FN – функціональний;

  • Р – параметричний;

  • SBR – підпрограмний;

  • SIM – одночасний.

Операнд А може приймати зазначені вище значення, а також може бути назвою, додатним цілим числом, виразом у дужках, СЧА, СЧА*параметр.

Операнди В і С задають можливі значення номерів наступних блоків або їхнє положення залежно від режимів роботи. Вони можуть бути такими ж, як і операнд А. Якщо операнд В опущений, то замість нього записується номер блоку, що є наступним за блоком TRANSFER. Блок TRANSFER не може відмовити транзакту у вході.

Розглянемо роботу блоку TRANSFER у різних режимах.

У режимі безумовного передавання операнд А не використовується.

Формат блоку:

TRANSFER ,В

Операнд В вказує назву блоку, в який транзакт спробує ввійти. Наприклад:

TRANSFER ,Flag

Після входу транзакт відразу ж намагається ввійти в блок з міткою Flag. Якщо цей блок відмовляє у вході, транзакт залишається в блоці TRANSFER.

Статистичний режим роботи блоку TRANSFER полягає у передаванні транзакта в один із двох блоків випадковим чином. Операнд А використо­вується і не є зарезервованим словом.

Формат блоку:

TRANSFER А,[В],C

Значення операнда А, яке записується після крапки, визначається тризначним числом, що показує частку (у частках від тисячі) вхідних у блок транзактів, що спрямовуються у блок С. Інші транзакти направляються з ймовірністю (1–А) у блок В або до наступного за номером блоку, якщо опе­ранд В опущений. Значення А може задаватися у вигляді ймовірності – дро­бового числа з десятковою крапкою, значення якого є меншим від одиниці.

Числове значення операнда А може бути задане будь-яким СЧА. Можливі наступні випадки.

Обчислене значення операнда А менше або дорівнює нулю, тоді здійснюється безумовне передавання транзакта до блоку В. Якщо значення операнда А більше або дорівнює 1 000, то здійснюється безумовне передавання транзакта до блоку С. Якщо 0 < A < 1000, то блок TRANSFER працює у звичайному режимі.

Розглянемо приклади використання блоку TRANSFER у статистичному режимі:

TRANSFER .370,THIS,THAT

Режим вибору заданий числом 370, зокрема 37% усіх транзактів блоку TRANSFER будуть передаватися на блок з міткою THAT, а 63% - на блок з міткою THIS.

TRANSFER .15,Hid,Stop

Транзакти блоку в 15% випадків будуть спрямовані до блоку з міткою Stop, а в інших 85% випадках – до блоку з міткою Hid.

TRANSFER 250,USEL2,USEL3

Активний транзакт з ймовірністю 250/1000 = 0,25 скеровується до блоку з міткою USEL3, а з з ймовірністю 0,75 – до блоку USEL2.

TRANSFER .95,,BOX20

Активний транзакт з ймовірністю 0,95 скеровується до блоку з міткою BOX20 і з ймовірністю 0,05 скеровується за замовчуванням до наступного блоку згідно порядку.

Блок TRANSFER працює в режимі BOTH, якщо в операнді А викорис­товується ключове слово BOTH (Обоє). У цьому режимі кожний транзакт, що ввійшов у блок TRANSFER, перевіряє два шляхи. Спочатку перевіряється можливість увійти в блок В. Якщо транзакт не може ввійти в цей блок, він намагається ввійти в блок С.

Якщо транзакт не може ввійти у блоки, вказані операндами В і С, то він затримується в блоці TRANSFER. Опитування блоків В і С повторю­ється для кожної зміни поточного модельного часу доти, поки транзакт не отримає можливість увійти в який-небудь блок. Якщо не використовується операнд В, то перевіряється можливість увійти в наступний блок.

Розглянемо приклад використання блоку TRANSFER в режимі ВОТН.

TRANSFER ВОТН,SAM1,SAM2

. . . . . .

SAM1 SEIZE PR52

SAM2 SEIZE PR84

Транзакт блоку TRANSFER намагається ввійти у блок з міткою SAM1. Якщо відповідний пристрій PR52 зайнятий, то транзакт скеровується у блок з міккою SAM2. Якщо пристрій PR84 теж зайнятий, то транзакт залишається у блоці TRANSFER. Зі зміною поточного стану моделювання спроби виходу транзакта, затриманого у блоці TRANSFER, повторюються.

Таким чином, блок TRANSFER у режимі BOTH виконує роль “диспетчера”, тобто розподіляє транзакти між двома ОКП.

Розглянемо роботу блоку TRANSFER у режимі ALL. Тоді в полі операнда А використовується ключове слово ALL. У цьому режимі транзакт, який увійшов у блок TRANSFER, перевіряє можливість увійти в будь-який блок, починаючи із блоку, зазначеного операндом В, і закінчуючи блоком, зазначеним операндом С. Операнд D визначає крок d зміни номера блоку, що перевіряється. Значення кроку дає можливість опитувати певні блоки, розташовані між тими, які задані операндами В і С. Далі транзакт, що ввійшов у блок TRANSFER, намагається ввійти в блок В. Якщо блок В зайнятий, транзакт намагається ввійти в блоки з номерами v + d, v + 2d, ..., z, де v – номер блоку В, z – номер блоку С. При цьому z = v + nd, де п – деяке ціле додатне число.

Якщо транзакт не може увійти ні в один з даних блоків, то він залишається у блоці TRANSFER і зі зміною поточного часу моделювання повторює вищеописану процедуру.

Зазвичай в операндах В і С записуються мітки блоків. Тому блоки варто розташовувати таким чином, щоб під час присвоєння різниця між номерами блоків, зазначених в операндах В і С, була кратна кроку, визначеному в операнді D. Наприклад:

TRANSFER ALL,Met1,Met2,5

Тут режим ALL допустимий, якщо різниця між номерами блоків Metl і Met2 є кратною 5. У моделі це може виглядати так: нехай вимоги розподіляються за трьома ОКП, а чергова вимога обслуговується першим ОКП, який звільнився (рис. 5.3).

Рис.5.3. Імітаційна модель з використанням блоку TRANSFER, що працює в режимі ALL

Вхід транзакта в блок TRANSFER зумовлює послідовну перевірку мож­ливості входу спочатку в блок SEIZE з міткою Metl. Якщо цей блок не дозво­ляє ввійти, то перевіряється другий блок SEIZE без мітки, тому що різниця між номером цього блоку й блоку з міткою Metl дорівнює 5. Якщо другий блок SEIZE зайнятий, то перевіряється третій блок SEIZE з міткою Met2. Якщо й у нього транзакт не може ввійти, він залишається в блоці TRANSFER. З кожною зміною поточного модельного часу процедура повторюються спочатку, тобто з входженням транзакту в блок SEIZE з міткою Metl.

У блоці TRANSFER операнди В і С також можуть бути номерами бло­ків, а не мітками. Тоді для наведеного прикладу блок TRANSFER має вигляд:

TRANSFER ALL,5,15,5

Результат моделювання буде той самий.

Варто зазначити, що транзакт, затриманий у блоках TRANSFER BOTH або TRANSFER ALL, просувається, починаючи із блоку В. Отже, у режимі BOTH, коли можливий перехід до обох блоків В і С, блок В має деяку перевагу. Аналогічно й у режимі ALL, коли можливий перехід до декількох блоків, блоки з меншими номерами мають деяку перевагу над блоками з більшими номерами. Підтвердимо це результатами моделювання розглянутого прикладу (рис. 5.4).

Рис. 5.4. Результати моделювання системи з використанням блоку TRANSFER, що працює в режимі ALL

Результати моделювання показують, що найбільший коефіцієнт використання має ОКП KAN1, а найменший – ОКП KAN3. Це незважаючи на те, що середній час обслуговування ОКП KAN3 менший, ніж ОКП KAN1 і він за той самий час міг би обслужити більше число транзактів.

Блок TRANSFER у режимі ALL також виконує роль “диспетчера”, але на відміну від режиму BOTH він розподіляє транзакти між декількома ОКП.

Робота блоку TRANSFER у режимі PICK передбачає використання ключового слова PICK в операнді А. У цьому режимі з послідовності блоків з номерами v, v + 1, v + 2, ..., п випадковим чином вибирається номер одного блоку, до якого спрямовується транзакт (v – номер блоку, зазначеного операндом В, а п – номер блоку, зазначеного операндом С). Всі блоки, включаючи й ті, що зазначені операндами В і С, вибираються з рівною ймовірністю 1/[п - v + 1]. Транзакт намагається перейти тільки до обраного для нього блоку. Якщо транзакт не може відразу перейти до наступного блоку, то він буде чекати в блоці TRANSFER доти, поки не буде знята умова блокування. Номер блоку С повинен бути більшим або рівним v + 1.

У функціональному режимі блок TRANSFER працює тоді, коли замість операнда А використовується ключове слово FN. Із входом транзакта в блок TRANSFER обчислюється значення функції, назва якої задана операндом В. Якщо результат не цілий, то від нього береться ціла частина. Для визначення номера наступного блоку отримане ціле значення додається до операнда С (значення операнда С може бути рівне нулю). Якщо блок з обчисленим номером зайнятий, тоді транзакт залишається в блоці TRANSFER доти, поки не зможе перейти саме до блоку з обчисленим номером. Наприклад:

TRANSFER FN,Kref,P1

TRANSFER FN,9,Р1

У першому прикладі транзакт скеровується до блоку, номер якого є результатом додавання обчисленого й округленого до цілого значення функції з назвою Kref і значення параметра 1 транзакта, що ввійшов. Робота блоку TRANSFER у другому прикладі є аналогічною, тільки функція задана не назвою, а номером.

Для задання параметричного режиму роботи блоку TRANSFER необхідно в операнді А вказати ключове слово Р. У цьому режимі активний транзакт скеровується до блоку, номер якого визначається як сума значення параметра й значення операнда С. Якщо операнд С не використовується, значення параметра і є номером нового блоку. Наприклад:

TRANSFER P,Kid,6

У даному прикладі транзакт скеровується до блоку, номер якого дорів­нює сумі значення параметра з назвою Kid і значення операнда С, тобто 6.

Для задання підпрограмного режиму роботи блоку TRANSFER необхідно в операнді А вказати ключове слово SBR. У режимі SBR активний транзакт завжди скеровується до блоку, номер якого зазначений операндом В. Номер блоку TRANSFER потрапляє в параметр, зазначений операндом С. Наприклад:

TRANSFER SBR,Post,Hid

Транзакт, що надійшов у блок скеровується до блоку з міткою Post, а номер блоку TRANSFER записується в параметр із назвою Hid. Якщо такого параметра нема, то він створюється.

Режим SIM (одночасний) блоку TRANSFER введений для випадку, коли потрібне одночасне виконання декількох умов. Кожний транзакт має свій індикатор затримки SIM, який встановлюється в 0 або 1. У цьому індикаторі записується результат будь-якої спроби транзакта ввійти в наступний блок. Якщо існують умови, що перешкоджають входженню транзакта в блок, індикатор SIM цього транзакта встановлюється в 1. Якщо всі умови переходу до наступного блоку виконуються, то індикатор SIM залишається рівним нулю. Якщо не виконується хоча б одна з умов, індикатор SIM встановлюється рівним 1. У таких випадках операнд С вказує блок, у якому перевірялася перша умова, і транзакт виконує перевірку всіх умов, поки вони не будуть виконані одночасно.

Блок LOOP використовується для організації циклів у моделі. Формат блоку наступний:

LOOP А,В

Операнд А – параметр транзакта (зміна циклу), що визначає число повторень якої-небудь ділянки моделі. Операнд В – мітка блоку, з якого починається цикл. В цей блок переходить транзакт, коли параметр, на який здійснюється посилання операндом А, не дорівнює нулеві. Проходження транзактом одного циклу зменшує значення параметра операнда А на одиницю. Коли значення параметра в операнді А дорівнює нулеві, то транзакт переходить до наступного блоку.

Операнди А і В можуть бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*параметр. Як правило, блок LOOP застосовується у парі з блоком ASSIGN.

Роботу блоку LOOP розглянемо на прикладі:

ASSIGN Krosh,5

Start1 SEIZE PC

. . . . .

RELEASE PC

LOOP Krosh,Start1

Коли транзакт, пройшовши ділянку моделі, що починається блоком з міткою Startl, увійде в блок LOOP, значення його параметра з назвою Krosh зменшується на 1. Початкове значення цього параметра дорівнює 5. Якщо це значення не дорівнює нулю, транзакт переходить до блоку з міткою Startl, тобто цикл повторюється. Якщо ж значення параметра циклу дорівнює нулю, тоді задане число повторень виконано. Транзакт переходить до наступного блоку.

Якщо з входом транзакта в блок LOOP виявиться, що транзакта з назвою Krosh немає, тоді відбудеться зупинка процесу моделювання через помилку “Звертання до неіснуючого параметра”.

Блок DISPLACE призначений для знаходження будь-якого транзакта й переміщення його до нового блоку. Блок DISPLACE має формат:

DISPLACE А,В,[С],[D]

Операнд А – номер транзакта, який необхідно перемістити. Операнд В – мітка блоку, до якого переміщається транзакт, зазначений операндом А. Операнд С – номер параметра транзакта, що переміщується, у який записується час, що залишився до кінця його обслуговування, якщо він перебував у списку майбутніх подій. Операнд D – мітка альтернативного блоку для активного транзакта. Операнди А, В, С і D можуть бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*параметр. Наприклад:

DISPLACE (Р5+20),Теm3,Zalushok,Mit1

Операнд А зазначений виразом у дужках. Цей вираз обчислюється й заокруглюється до цілого. Отриманий результат є номером транзакта, який варто перемістити. Далі блок DISPLACE відшукує цей транзакт. При цьому можливі випадки:

  • транзакт є в моделі й не перебуває в списку майбутніх подій;

  • транзакт є в моделі й перебуває в списку майбутніх подій;

  • транзакта з потрібним номером немає в моделі.

У першому випадку транзакт переміщується до блоку з міткою Теm3. У другому випадку визначається час, що залишився до його повторного введення у процес моделювання. Він записується в параметр із назвою Zalushok. Якщо параметра з такою назвою немає, він створюється. Транзакт також переміщується до блоку з міткою Теm3. У третьому випадку активний транзакт, що ввійшов у блок DISPLACE, направляється до блоку з міткою Mit1. Якщо операнда D нема, активний транзакт переходить до наступного блоку.