Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Работа с графическим конструкторомСодержание книги
Поиск на нашем сайте
В СИСТЕМЕ PILGRIM Конструктор моделей состоит из программного файла gem.exe, файлов настроек с расширением ini, файла помощи и примеров имитационных моделей. При запуске gem.exe на выполнение перед пользователем появляется основное окно, содержащее меню, панель «горячих кнопок», панель инструментов, информационную строку (рис. 5.4). Область построения графа модели пуста, для редактирования необходимо создать новую модель либо загрузить ранее сохраненную. Рассмотрим сначала выполняемые конструктором операции с файлами. Всю информацию о модели конструктор сохраняет в файле с расширением «pgf» (Pilgrim graph file). При создании законченной версии имитационной модели пользователь может генерировать программный файл Pilgrim с расширением «срр» (с plus plus). Этот файл далее компилируется в среде Visual C++ с подключением необходимых библиотек и ресурсов Pilgrim. Создаваемый конструктором программный файл с расширением «срр» при своей генерации теряет связь с моделью, т.е. его редактирование никоим образом не отразится на модели, редактируемой с помощью конструктора. Таким образом, создание модели необходимо целиком выполнять с помощью конструктора (исключение составляют пользовательские библиотеки, используемые для расширения возможностей модели). При работе с моделью рекомендуется периодично сохранять резуль* таты работы, оставляя копии рабочих версий модели. Создание новой модели, сохранение и загрузка версий выполняются выбором соответствующих пунктов раздела «Файл» основного меню программы или через «горячие кнопки». Редактирование графа модели. В основе любой имитационной модели лежит граф взаимодействия ее процессов. Выделим типовые действия редактирования графа модели. Это добавление новых узлов, их перемещение в области построения, удаление существую- щих, определение маршрутов переходов транзактов, или ссылок. В конструкторе все перечисленные действия выполняются «перетягиванием» объекта, обозначающего тип требуемого узла или действия,, из панели инструментов в область построения графа. Панель инструментов в левой части окна редактора содержит значки, обозначающие узлы системы. В панели инструментов находится набор значков всех типов узлов системы (см. рис. 5.1). Следует заметить, что для нескольких различных типов узлов может существовать одно и то же обозначение. Например, квадратом обозначаются узлы типа queue, send и attach. Поэтому под каждым значком с изображением узла находится кнопка с текущим типом создаваемых узлов данного обозначения. Для изменения типа достаточно щелкать мышью по кнопке с именем типа до появления необходимого. ' Местоположение узла в плоскости построения графа не несет никакой смысловой нагрузки с точки зрения логики модели. Поэтому конструктор позволяет свободно перемещать узлы так, чтобы граф модели был удобен для восприятия. При перемещении узлов также используется технология перетягивания объектов. Аналогичным образом выполняется удаление узла: в панели инструментов необходимо захватить значок удаления узла и перетащить его на узел, который требуется удалить. Узел будет удален вместе со всеми входящими и исходящими ссылками. Дополнительные условия возникают при удалении узлов, содержащих переход на нижнюю плоскость. Например, если требуется удалить узел типа parent, то конструктором проверяется условие пустой детализирующей плоскости. Алгоритм конструктора не позволит удалить узел типа parent, пока на детализирующей его плоскости находится хотя бы один узел, так как это приведет к его потере. Чтобы упростить удаление множества узлов на плоскости, к которой ссылается, к примеру, parent, в меню «плоскость» существует специальный пункт «удалить все узлы текущей плоскости». Несколько по-иному, чем для parent, реализовано разрешение на удаление узлов обращения к подпрограмме, т. е. pay, rent, down. Если в модели имеется плоскость-подпрограмма для единственного узла pay, rent или down, то его нельзя удалить, пока плоскость не пуста (так же как в случае с parent). Если же к подпрограмме обращаются несколько узлов типа pay, rent или down, то конструктор позволяет удалить любой из них, так как в этом случае плоскость-подпрограмма не теряется, поскольку продолжают существовать 172 сылки, на нее указывающие. Таким образом, смысл условий удале-узлов, порождающих плоскости, крайне прост: необходимо, 5ы в модели не был потерян ни один узел. Создание ссылок, или путей переходов транзактов, происходит недующим образом: в панели инструментов захватывается значок |ваправленной в экран стрелки (перекрестие, заключенное в круг) и деремещается на узел-источник транзакта. При отпускании кнопки f мыши за курсором потянется стрелка, обозначающая ссылку с невы-. эранным узлом-приемником транзакта. Для выбора узла-приемника
необходимо щелкнуть по нему мышью, в результате чего создастся новая ссылка. Созданные ссылки отображаются на экране в виде направленных стрелок, имеющих три звена. Звенья не несут никакой смысловой нагрузки и служат для удобства отображения графа на -плоскости. Две промежуточные точки между звеньями выделены ' небольшими кругами, захватывая и перемещая которые можно придать стрелке нужную форму. Следует помнить, что некоторые типы узлов не могут иметь 1 входящие или, напротив, исходящие ссылки. Конструктором посто-| янно выполняется проверка корректности действий пользователя, I запрещающая заведомо недопустимые преобразования графа модели, в частности создание неправильных ссылок. Определение параметров узла. Каждый узел модели характеризуется множеством параметров: типом, порядковым номером, I именем, принадлежностью к плоскости, ссылками и условиями переходов, встроенным программным текстом, а также непосредственно параметрами, определяемыми спецификой типа узла, такими, как закон распределения для узла типа serv, приоритет для queue и т.п. Для просмотра или редактирования параметров узла необходимо дважды щелкнуть по нему левой кнопкой мыши либо один раз щелкнуть по узлу правой кнопкой, в результате чего отобразится всплывающее меню, и выбрать в нем пункт «параметры узла». Появится диалоговое окно, определяющее параметры. На рис. 5.5 показано окно параметров узла типа serv, номер 101, имеющего имя «Производство». Необходимо пояснить некоторые компоненты окна и способы работы с ними. Номер узла присваивается конструктором при его создании. Обычно первые 100 номеров зарезервированы для узлов send - бухгалтерских счетов. Нумерация создаваемых узлов осуществляется последовательно, с номера 101. Смена номера узла возможна с помощью соседнего с номером диалогового поля, но не рекомендуется для узлов, созданных ранее. Дело в том, что в тексте модели могут существовать привязки к номеру узла, созданные вручную. Конструктор не может их отследить, поэтому при перенумерации логика модели рушится. Поле «Имя» содержит имя узла, отображаемое на схеме и при выполнении модели. Поле доступно для редактирования. Не рекомендуется использовать имена, не умещающиеся в поле редактирования. Класс узла может быть выбран из списка. В списке приводятся только те типы узлов, которые имеют одинаковое обозначение. Например, узел типа send можно сменить на attach (но при этом изменяется набор и смысл параметров). Поэтому функция смены типа полезна и имеет смысл только при создании нового узла; I Поле «Плоскость» показывает, к какой плоскости принадлежит «ел, и доступно только для просмотра. * Модель получает дополнительную гибкость за счет использования вставок C++ кода. Панель «Общий C++ текст» позволяет пользователю включить в процедуру обработки узла произвольный текст на языке C++. Текст делится на две части: одна выполняется до вызова функции узла, другая - после нее. Смысл такого разбиения заключается в том, что программный текст, выполняющийся до вызова функции узла, может подготавливать какие-либо переменные, которые функцией будут использованы. Так, например, может быть Ьодсчитано время обслуживания транзакта перед выполнением функции узла типа serv. Программный текст, следующий после вызова функции узла, на ее выполнение уже никак не влияет и может ^пользоваться для обработки параметров выполненной функции ^яли подготовки параметров для других функций модели. Узел может содержать несколько исходящих ссылок, по которым способен переместиться транзакт. Выбор маршрута должен Осуществляться по условиям. Поэтому в правой нижней части окна шределейия параметров транзакта имеются поля, определяющие эти условия а также выполнение соответствующих им индивидуальных фрагментов программного кода. Выбор исходящей ссылки осуществляется щелчком мыши в диалоговом поле «Выходы». Как видно из рис 5 5, любой вход и выход можно удалить, нажав кнопку внизу ■списка. ! И наконец, необходимым компонентом представленного окна ^является кнопка «Определить параметры», нажатие на которую вызывает окно определения параметров самой функции обработки уз-!ла. Вид появляющегося диалогового окна зависит от типа узла. {Пример окна для узла типа serv приведен на рис. 5.6. I Итак, рассмотрена схема определения параметров узла типа serv. Аналогичным образом определяются параметры для узлов любого \ типа, но окно определения параметров функции узла (рис. 5.6) имеет * различный вид. Например, для узла типа queue окно содержит настройку единственного параметра - признака приоритета прохождения транзактов, а для узлов типа term параметров функции узла и исходящих ссылок не существует вовсе. Определение параметров инициализации/завершения модели Модель имеет параметры инициализации и завершения, зада-; ваемые функциями modbeg и modend. Определение этих параметров " производится через диалоговые окна, вызываемые нажатием кнопок «Modbeg» и «Modend»в основном окне редактора либо выбором подпунктов основного меню в разделе «Модель» Окно определения параметров функции modbeg приведено на рис. 5.7. В его правой верхней части записывается какой-либо начальный текст на C++, если он необходим. Программный текст делится на две части: начальный C++ текст используется для подключения внешних библиотек и настройки глобальных параметров; текст инициализации ресурсов подготавливает параметры конкретных узлов типов attach и send. Другие поля окна позволяют редактировать переменные, стандартные для функции modbeg. Редактирование переменных функции modend осуществляется через диалоговое окно, приведенное на рис. 5.8. Работа в плоскостях модели. При работе с большой моделью удобно пользоваться набором плоскостей построения. Для этого конструктор предлагает набор плоскостей с номерами 1 - 9, фрагменты графов которых не пересекаются на уровне маршрутов тран-зактов. В каждой из плоскостей могут находиться узлы типа parent, pay, rent, или down, в свою очередь порождающие новые плоскости. Порождаемые плоскости имеют номера, начинающиеся с 10. Возможны следующие операции перехода с уровня на уровень: переход на детализирующую плоскость, подъем на плоскость узла-родителя и переключение между корневыми плоскостями. Для каждой открытой плоскости конструктор предоставляет собственное окно построения. Переключение между корневыми плоскостями осуществляется через верхнюю панель управления. В правой части панели расположено специальное выпадающее меню, позволяющее выбирать номер корневой плоскости. При этом в информационной строке появится надпись «Корень» и номер плоскости. Для перехода на плоскость, детализирующую узел, необходимо двазкды щелкнуть мышью по узлу-родителю. При этом в рабочей области экрана будет активизирована детализирующая плоскость, в информационной строке на панели «имя плоскости» появятся имя узла-родителя, а также номер текущей плоскости. Для плоскости необходимо задать вход и выход, как номера узлов, в которые попадает транзакт при переходе на плоскость из порождающего узла и из которого происходит возврат на верхнюю плоскость. Узел-вход и узел-выход обозначены на графе входящей стрелкой из левого верхнего угла рабочей области и исходящей в правый верхний угол области соответственно. До тех пор пока вход и выход плоскости не определены, в информационной строке панели красным цветом будет выведено «Вход не назначен» и «Выход не назначен». Чтобы назначить вход и выход, необходимо на левой панели нажать кнопку «Слой». При этом будет выведено диалоговое окно (рис. 5.9). Возврат на плоскость, которой принадлежит порождающий узел (т.е. на уровень выше), выполняется нажатием кнопки «подняться на уровень вверх» в панели «горячих кнопок» или выбором аналогичного подпункта основного меню из раздела «Уровень». Для удобства навигации в многослойной модели предусмотрено диалоговое окно, отображающее иерархическую зависимость между плоскостями или узлами модели (рис. 5.10). Определение переменных модели. Конструктор обеспечивает пользователя простым блоком диалога, который позволяет задавать имя, тип и начальное значение переменных (рис. 5.11). ■1-Ув При вводе новой переменной обязательными параметрами являются имя и тип, значение пользователь может указывать по своему усмотрению. Дополнительные функции. Конструктор содержит ряд функций, позволяющих сделать работу пользователя более удобной и простой. Ниже приведен перечень сервисных функций, реализованных в конструкторе. Изменения настроек экрана. Изменение настроек экрана выполняется через диалоговое окно, изображенное на рис. 5.12 (основное меню, пункт «Настройки»). Пользователь-разработчик модели может по своему усмотрению изменять масштаб, цвет фигур и фона, показать или скрыть панель инструментов и установить признак прямых стрелок. Можно работать на мониторах с различным разрешением и размером диагонали, поэтому очевидна необходимость изменения масштаба в области построения графа (т.е. размеров фигур, обозначающих узлы, стрелок, надписей и других изображений). Разработчик может разместить на одной плоскости большое количество узлов; чтобы их увидеть на одном экране, необходимо уменьшить масштаб. Механизм масштабирования дополняют линейки прокрутки, располагающиеся по бокам рабочей области построения графа. Если признак прямых стрелок выключен, то при перемещении узла внутри плоскости промежуточные звеньевые точки стрелок, привязанных к нему, будут оставаться на месте, а при включенном признаке стрелки будут постоянно иметь прямой вид. Проверка корректности модели. Конструктор проводит проверку двумя независимыми способами: [ • не позволяет осуществлять заведомо ложные действия при редактировании пользователем модели; I • имеет возможность проверки графа в целом. I Результат проверки графа выдается в окне, приведенном на 1рис. 5.13, как список ошибок возможных и ошибок явных, не позво-[ ляющих генерировать программный Pilgrim-файл. К явным ошибкам I относятся отсутствие выходов или входов узла и неопределенные I вход/выход плоскости. Процедура проверки корректности графа вызывается автоматически при запросе пользователя сгенерировать программный Pilgrim-файл, а'также в любой момент времени из пункта «Выполнить» основного меню. При этом осуществляется проверка модели целиком, независимо от того, в какой плоскости работает пользова- тель. ь. План бухгалтерских счетов. При моделировании бухгалтерских проводок необходимо знать номер счета-приемника. Поскольку номер любого счета - это номер узла, его моделирующего, то для того, чтобы проще ориентироваться в их нумерации, существует информационное окно, отображающее номера и названия счетов. Это 5. Из панели узлов в левой части экрана перетащим в плоскость построения узлы типов parent, serv. В панели узлов также найдем узел типа ag и щелкнем мышью по узлу ag. Надпись на панели сменится на term. Добавим в плоскость построения два узла типа term. Расположим узлы в рабочей области так, как показано на рис. 5.15. «Производство». После отпускания кнопки мыши за курсором потянется стрелка. Далее необходимо щелкнуть мышью по узлу «Отчет А», в результате чего появится стрелка, символизирующая маршрут прохождения транзактов из узла «Производство» в «Отчет А». Аналогичную операцию повторим, задав маршруты из узла «Производство» в «Отчет А» и из «Object 101» в «Производство». Предостережение. Необходимо сначала указывать узел-источник и потом - узел-приемник. Последующая смена направления невозможна. При создании неверного маршрута необходимо его удалить через свойства узла и потом задать новый. По окончании этого этапа должен появиться экран, подобный приведенному на рис. 5.16.
6. Зададим имена узлов. Для этого нужно дважды щелкнуть мы 7. Определим маршруты транзактов. Для этого захватим изобра
8. Создадим плоскость формирования заявок. Дважды щелкнем 9. Можно увидеть, что в информационной строке в нижней части эхода, так как сама предназначена для генерации заявок, однако выход необходимо назначить. В левой части экрана щелкнем по кнопке «Слой». В диалоговом окне введем имя слоя «Заказы» и выход 107. Вход установим на значение «попе», т.е. отсутствующий. Результат приведен на рис. 5.18. После нажатия кнопки «ОК» одна из красных надписей в информационной строке будет заменена на «Выход: Н)7». Шаг II. Определение глобальных переменных модели. Определим переменные модели. Очевидно, для работы может понадобиться переменная времени обслуживания заявки. На левой панели щелкнем по кнопке «Переменные». Появится соответствующее диалоговое окно (рис. 5.19). В нем необходимо ввести: имя переменной procjime, тип переменной float. Значение можно не указывать, так как оно будет определяться при выполнении модели в зависимости от типа продукции. Шаг III. Определение свойств узлов. 1. Определим свойства узлов плоскости 10. Узел 105 будет фор 2. Аналогичным образом определим параметры для узла 107 очередь а соответствии с приоритетами. Поэтому заявки на производство продукции типа А будут проходить прежде заявок на продукцию типа В. 3. Определим свойства узлов плоскости 1. Начнем с узла 102 ти 4. Для узлов типа term параметров не существует. Шаг IV, Определение параметров функций modbeg и modend. 1. Определим параметры функции modbeg. В левой панели инструментов щелкнем по кнопке modbeg либо выберем соответствующий пункт меню раздела «Модель». В появившемся диалоговом окне зададим имя модели «Очередь заказов». Параметр «Узлы» обозначает порядковый номер последнего узла модели и рассчитывается автоматически. Поле «Время» подразумевает время выполнения модели, в моделируемых единицах времени. Поскольку за единицу времени взят один день, то рассмотрим модель на отрезке времени 365 единиц, т.е. один год. Параметр «ПСЧ» служит для настройки датчика случайных чисел. Значение, отображенное по умолчанию, позволяет при каждом запуске получать различные результаты моделирования. Поле «Пространство» используется при пространственном моделировании и в нашем случае не понадобится. В поле «Задержка» необходимо ввести номер узла типа queue, информация о котором будет отображаться при выполнении модели, т.е. в нашем случае это номер 107. Поля «Поток» и «Точность» оставим без изменений. Результат определения параметров в диалоговом окне приведен на рис. 5.23. 2. Определим параметры функции modend. Для нашей задачи оставим параметры modend, заданные по умолчанию. Вызов диалогового окна для ввода параметров осуществляется аналогично вызову окна modbeg. Шаг V. Генерация текста имитационной модели в операторах Pilgrim. Итак, модель готова. Для нее сформирован граф, заданы переменные, определены параметры узлов и функций. Для генерации программного файла необходимо в основном меню выбрать «Выполнить», а затем - «Генерировать C++ файл». При этом конструктором сначала будет выполнена проверка модели, в нашем случае не обнаружившая никаких ошибок или подозрительных участков на графе модели (рис. 5.24). После нажатия кнопки ОК будет выведено стандартное диалоговое окно, предлагающее сохранить файл с расширением «срр». Сохраненный конструктором файл можно далее компилировать в среде Visual C++. Программная модель, автоматически сгенерированная конструктором и помещенная в срр-файл, имеет следующий вид: #include <Pilgrim.h> forward { int fw; int proc_time; ■• о-I modbeg("Производство под заказ", 107, 365, (long) time (NULL), none, 107, none,none, 2); ag("Заказы A", 105, 1, norm, 30, 10, none, 107); адСЗаказы В"4, 106, 2, norm, 5, 2, none, 107); network(dummy, dummy) { top(102): if (t->pr ■== 1) { ■'■.-.... proG_time =10 fw=103; }..... v else { •:: ■■■ ' • -■ ■ proc_time =2 fw=104; serv("Производство", 1, abs, norm, proc_time, proc_time/2, none, fw); place; top(103): term ("Отчет А1');. place; top(104): term("Отчет В"); queue("Очередь заказов", prty, 102); fault(123); } modend("pilgrim.rep", 1, 8, page); return 0; } ' ■' ' ' ■' ■.■■' ■ ■.- ' ■ -...■■.■ ' \ -. В тексте этой модели нет ни одной строчки, написанной вручную, без использования графического конструктора. Более того, работу с конструктором вполне может освоить специалист, не очень хорошо знающий программирование. 5.5
|
||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-06; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.62.5 (0.012 с.) |