Приложение 1 Object GPSS. Конвертор.

 

   Модель состоит из следующих разделов:

1. Раздел описаний личных переменных и объектов модели. Он заканчивается строкой

  {/sh}  //end_var

2.  Раздел  описаний личных процедур и функций, которые используются разработчиком  именно в этой модели. Он заканчивается строкой

  {/sh}  //end_proc_func

3.  Раздел  инициализации (процедура Initial).   Здесь создаются нужные объекты, и задаются начальные значения переменным. Здесь же может быть выполнена любая другая подготовительная работа для начала моделирования. Он заканчивается строкой.

  {/sh}  //end_init

4.  Раздел закрытия объектов (их очистки)   (procedure closeallobj) Здесь  удаляются все объекты, созданные в Initial. Он начинается строкой.

  {/sh}  //begin_close

   Удаление его объектов идет в порядке, обратном их созданию. Содержимое этого раздела лучше не менять.

5.  Раздел  сброса статистики (процедура  ResetAll). Здесь выполняется сброс накопленной статистики по всем объектам. Он заканчивается строкой

  {/sh}  //end_reset

   Содержимое этого раздела лучше не менять.

6.  Раздел  описания собственно модели (процедура  Modeltxt). Здесь последовательно располагаются блоки модели. (фактически вызовы процедур GPSS). Они размещаются  после строки

  {/sh}  case _next_numb of

 Блоки модели должны иметь вид:

 ::метка  *: блок;  или *: блок;

   В файле модели,  в ее комментариях, категорически запрещены фрагменты вида ::метка и *: они непременно помешают нормальной работе модели.

Категорически запрещается  удаление или редактирование строк с комментарием   {/sh} . Любая модификация этих строк может разрушить работоспособность модели!! Эти строки изначально должны быть в модели. Если модель испорчена, то нужно  строить ее заново.

   В коде модели, ссылки на метки указываются непосредственно, и могут входить в корректные выражения целого типа. После конвертирования, метки представляются как константы целого типа, а конструкции *: - как номера блоков. Вместо метки следующего блока можно указывать конструкцию *! . Она также может участвовать в выражениях.

   Если блок модели является составным, то есть, составлен из нескольких операторов языка Pascal, то он обрамляется ключевыми словами Begin End, и должен работать так, чтобы непременно пройти ровно один блок GPSS, лучше всего блок Nop.  Раздел  собственно модели заканчивается двумя завершающими ключевыми словами end;end; .

7. Раздел формирования отчета (процедура report). Здесь выполняется формирование выходной статистики по результатам моделирования. Раздел завершается строкой

  {/sh}  //end_report

8. Раздел манипуляций с моделью (процедура Modeling). Здесь  указаны конкретные команды манипуляции с моделью. Здесь можно управлять моделью, и готовить ее к новому моделированию. В частности, можно менять значения X – параметров, функций, многоканальных устройств, таблиц, и переменных, выводить графики и гистограммы и делать многое другое.  Раздел завершается строкой

  {/sh}  end;

   При определении объектов, для   упрощения заполнения разделов  1,3,4,5,7 лучше использовать пункт меню "Insert obj". Тогда имя объекта должно вводиться в соответствующем поле, а тип объекта выбирается из списка. В принципе, можно использовать автоматически сгенерированное имя переменной или объекта. Все нужные вызовы процедур для работы с объектом автоматически размещаются в соответствующих разделах. Часть вызовов процедур из процедуры Initial  нуждаются в дополнительном редактировании, тогда это сразу видно по их виду.

   В процедуре Initial нуждаются в редактировании вызовы процедур для объектов, следующих типов:

Tgenerate;

Tfunction;

   Вообще не нуждаются в редактировании вызовы процедур для объектов, следующих типов:

Tfacility;

Tqueue;

Tuser;

Tgroup;

TIgroup;

TSgroup;

TTgroup;

   В процедуре Initial допускается редактирование вызовов процедур для объектов, следующих типов:

Tstorage;

Ttable;

Var Integer;

Var Double;

Var Boolean;

Var String;

   Особый случай представляют собой заготовки для блоков Generate, и заготовки для личных процедур и функций на языке Pascal. Они будут вставляться в текущую строку. Тип функции  можно выбрать из дополнительного списка, появляющегося после выбора функции.

   Вставка блока Generate создает в разделе инициализации вызов процедуры  Init, которую непременно нужно согласовать с Generate.

   Для удаления всех вызовов процедур работы с объектом и его описания, вставленных с помощью пункта "Insert obj", удобно воспользоваться пунктом "Delete obj". Для этого нужно поместить курсор в строку, содержащую сгенерированный для объекта код, и щелкнуть по "Delete obj". За счет комментария в начале строки, будут удалены все строки кода, сгенерированные для объекта пунктом " Insert obj". Фактически, при использовании пунктов "Insert obj" и  "Delete obj" ваши затраты времени на построение модели сравнимы, с временем на ввод собственно кода модели в разделе 6.

   При определенных навыках, можно заметно упростить набор кода модели, используя возможности самой системы Delphi. Действовать при этом следует так.

   В программе – конвертер описываются все нужные для модели переменные и объекты, а также все нужные генераторы заявок.

   Далее, полученный код конвертируется, то есть переносится в файл Model.pas .

   В открытом файле, ModelUnit, в процедуре TMP набирается код модели ( содержимое процедуры ModelTxt ) в следующем виде.

 метка    блок;  или  блок;  

   Аналогичным образом можно набирать код процедуры управления моделью (содержимое процедуры Modeling).  При наборе кода всплывают подсказки, как это всегда бывает при работе с Delphi. Эти подсказки можно вызывать и принудительно, нажав Ctrl+’ ‘ .

   Набранные коды следует переместить, (то есть удалить и вставить) из процедуры TMP в нужные места модели в программе – конвертер, что гораздо проще, чем полностью набирать нужный код вручную.

   Далее, можно выделить нужную часть кода в процедуре ModelTxt и выполнить пункт “Convert Selected ”. Выделенная часть будет оформлена в соответствии с требованиями оформления кода в этой процедуре, то есть будет выглядеть следующим образом.

 ::метка  *: блок;  или  *: блок;

   Таким образом, используя совместно возможности программы – конвертера и Delphi, можно заметно упростить себе работу по созданию кода модели.

   Когда  вы будете завершать сессию по работе с Delphi, и вам будет предложено сохранить изменения в файле ModelUnit, лучше ответить отказом, так как, в принципе, вы не должны были бы менять код в этом файле, и, скорее всего, он действительно останется прежним. 

 
назад

вперед