Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИМ -лабораторные_работы.doc
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
5.01 Mб
Скачать

4.4.10Окно Многоканальных устройств Storages Window

Storages Window — Окно многоканальных устройств. Это многоканальные устройства обслуживания, у которых все каналы идентичные. Вместо них можно использовать соответствующее количество одноканальных Обслуживающих устройств, но, во-первых, при большом количестве каналов (десятки, сотни, тысячи) получится необозримая программа; во-вторых, чтобы собирать и обрабатывать информацию в этих каналах, придётся писать дополнительные фрагменты программы большого размера. Поэтому для Многоканальных устройств используется специальный оператор STORAGE. Если в программе такие операторы отсутствуют, то окно Многоканальных устройств будет пусто. Если они есть, то в окне Многоканальных устройств появится таблица. В первой колонке содержится список Многоканальных устройств из программы, а рядом с ним — некоторая информация.

Внешний вид Окна многоканальных устройств () типичен для GPSS World.

4.4.11Окно гистограмм Table Window

Table Window — Окно гистограмм. Гистограмма — это график, на котором отражена зависимость частоты встречаемости какого-то параметра от величины этого параметра. Например, гистограмма может отражать, как много транзактов находились в очереди от 0 до 5 минут, от 5 до 10 минут, от 10 до 15 минут, от 15 до 20 минут и т. д. Чтобы построить гистограмму, необходимо предварительно собрать такую информацию. Для этого существуют специальные операторы: Table (для любых указанных данных) и Qtable (для данных об очередях). Очереди выделены потому, что именно время нахождения в них транзактов часто представляет интерес для исследователя. Поэтому использование специализирующего оператора Qtable предусматривает минимальное число настроек. Универсальный оператор Table требует для заполнения специального оператора tabulate. Каждая таблица гистограмм имеет своё название. Поэтому при открытии Окна гистограмм предлагается выбрать конкретную гистограмму из их списка — GPSS World знает, какие именно таблицы собираются в модели (Рисунок 4 .48).

Рисунок 4.48 — Выбор имени выводимой на экран гистограммы в Окне гистограмм Table Window

Если работа модели завершилась, то гистограмма отражает конечную статистику исследуемого процесса. Если запустить программу далее, то в процессе её работы будет меняться и выводимая гистограмма, что позволяет наблюдать динамику процесса. Для управления моделированием используются кнопки на панели Окна гистограмм, аналогичные таковым в других Окнах.

4.5Совместное использование нескольких окон

Цель моделирования может быть как в определении средних показателей процессов, так и наблюдение за отдельными процессами при их пошаговом моделировании. В последнем случае удобно открыть сразу несколько окон и расположить их рядом на экране дисплея (Рисунок 4 .49).

Рисунок 4.49 — Расположение окон для одновременного наблюдения при пошаговом моделировании

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

5Некоторые приёмы программирования в gpss World

5.1Общая характеристика программирования

GPSS World позволяет одни и те же задачи решать разными способами, но при этом проявляются различные ограничения или дополнительные возможности.

Необходимо помнить, что блоки в GPSS World — это фактически подпрограммы (процедуры), которые выполняют много различных функций (поэтому их и не называют операторами, как в других языках). Их последовательное выстраивание представляет собой краткую запись многих операций, скрытых от программиста. Поэтому, хотя некоторые из них на первый взгляд имеют схожие основные функции, второстепенные операции могут быть существенно разными.

Например, существуют различные возможности задавать блоки — с помощью имён или с помощью номеров, а также добавлять к ним метки. Задание номеров позволяет выполнять с их помощью арифметические операции, например, вычислять номер какого-либо блока через номера других блоков или номера транзактов и т. д. Метки также можно задать с помощью имён, а затем имена перенумеровать, и тогда уже метки можно вычислять с помощью арифметических операций. Вообще, в GPSS World предусмотрено много возможностей перехода от имён к числам и наоборот. В то же время, необходимо помнить об основной особенности программ на GPSS World: все блоки "срабатывают" только тогда, когда в них входят активные транзакты. В этом как раз проявляется отличие блоков от операторов. Фактически, перед каждым блоком как бы располагается условный оператор, который проверяет наличие активного транзакта. Это существенно усложняет написание программы, так как транзакты должны обеспечивать "срабатывание" в том числе таких блоков, как запись в файл или чтение из файла, которые прочно ассоциируются с обычными операторами универсальных языков программирования. Это приводит к тому, что для работы некоторых блоков приходится генерировать отдельные транзакты, не имеющие физического смысла, а затем их уничтожать. В связи с такой существенной ролью транзактов, в GPSS World имеется несколько блоков, позволяющих задавать условие для их прохождения — TEST, transfer, GATE и др. Каждый из них имеет особенности в выполнении своих функций, но в некоторых случаях их применение оказывается практически эквивалентным.

Особые проблемы возникают при написании больших программ, содержащих тысячи блоков. В универсальных языках программирования предусмотрена возможность структурирования программного кода с помощью подпрограмм (процедур) пользователя. В этом случае воздаётся библиотека подпрограмм, которые вызываются в основной программе, что существенно уменьшает её объём. В GPSS World такая возможность частично также предусмотрена в рамках использования встроенного алгоритмического языка PLUS. Но для кода, состоящего собственно из блоков GPSS World, такой возможности нет. Структурирование выполняется с помощью включения в текст одной программы текста другой оператором include. Но это — совершенно другая технология. В данном случае включаемый программный код представляет собой фрагмент программы и необходимо учитывать основной код до него и после него. Фактически, можно представить себе единый текст программы, из которого вырезаны фрагменты, сохранены в отдельных файлах, а затем вновь вставлены в программу оператором include. Здесь сложно в разных местах включать одну и ту же последовательность строк, так как необходимо тщательно следить за тем, чтобы включаемый текст был инвариантен относительно места включения (т. е. во всех местах включения выполнял свои функции).