14 ноября 2005 г.

Сравнение команд и блоков GPSS- World и Object GPSS.

А. Г. Королев

Резюме.

В статье приводится сравнение команд и блоков для GPSS –World и Object GPSS.

Object GPSS – это средство для написания моделей в стиле GPSS непосредственно на языке Object Pascal. Каждая модель на Object GPSS представляет собой Include –файл (Model.pas), содержащий описание всех объектов модели и набор из 5 процедур: Initial, ModelTxt, Modeling, Report, CloseAllObj. Практически все части модели, кроме «начинки» процедуры ModelTxt, создаются программой – конвертером. Для создания исполняемой модели следует скомпилировать модель вместе с остальными стандартными частями проекта. Полученный .EXE – файл является моделью конкретной системы и с ней можно проводить эксперименты. В этой системе моделирования легко расширять набор команд и блоков для моделирования и набор средств визуализации.

Введение.

Имитационное моделирование, как и моделирование вообще – мощное средство для изучения сложных систем. Для имитационного моделирования используется целый спектр языков, в частности язык GPSS. Лучше всего он описан в известной книге Шрайбера Т. Дж. «Моделирование на GPSS» , которая также известна, как «красная книга». Эта книга является фундаментальным самоучителем по языку GPSS и прекрасно описывает как проблематику задач моделирования систем массового обслуживания, так и методы их решения с помощью данного языка.

Язык GPSS существует более 40 лет, и за время своего существования многократно подвергался нападкам как недостаточно гибкий и устаревший. Тем не менее, сам дискретно – событийный подход, заложенный в его основу, был достаточно прочен, чтобы обеспечить его жизнеспособность в течение всех этих десятилетий. Язык GPSS был и остается весьма эффективным при решении множества простых задач, посвященных исследованию систем массового обслуживания. Очень негативно на языке GPSS отразилось то, что в восьмидесятых годах фирма IBM прекратила его поддержку. Поэтому, его дальнейшая история связана c работой таких его энтузиастов, и даже можно сказать подвижников, как Thomas J. Schriber, Springer Cox, Julian Reitman, James O. Henriksen, Peter Lorenz, Ingolf Stahl и целый ряд других.

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

Конкретные предложения.

Попытка осмыслить эту проблему в целом, привела к пониманию, что начинать все нужно с погружения возможностей языка GPSS в один из хороших языков программирования, обеспечивающих эффективную работу с Windows. Естественно, что в первую очередь рассматривались возможности таких языков, как Object Pascal, С++ и C# . Очевидно, что реализация основных блоков GPSS не так уж и сложна. Она включает в себя работу со списками заявок и работу с такими объектами, как очереди, устройства, таблицы, и так далее.

Вопрос о том, как реализовать порядок выполнения блоков, управляемый заявками, имеет свое очевидное решение. Нужно чтобы все блоки модели были оформлены как вызовы процедур и находились в операторе Switch для языка C++, или в операторе Case для языка Object Pascal. Тогда выбор нужного блока (вызова процедуры) можно выполнять на основе номера следующего блока активной заявки, которая продвигается в данный момент.

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

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

Рассмотрим, например простейшую модель обслуживания заявок в одноканальном устройстве, реализованную на языке GPSS World.

Generate 100,90

Queue que

Seize fac

Depart que

Advance 95,90

Release fac

Terminate 1

Тогда, базовая процедура собственно моделирования на языке Object Pascal может выглядеть, например следующим образом:

{~mtb}procedure ModelTxt;begin with SYS do case NextBlock of

{/Gen} ::Gen_ 1:Gen.Generate(100,90));

2:Que.Queue;

3:Fac.Seize;

4:Que.Depart;

5:Advance (95,90));

6:Fac.Release;

7:Terminate (1);

{~mte} else modelerror;end;end;

В процессе моделирования каждая заявка будет выбирать для выполнения процедуры с номерами 1..7 в зависимости от того, в каком блоке находится заявка, и куда она собирается идти.

Пока мы не будем обращать внимания на остальные строки этого текста, смысл которых будет разъяснен позднее.

Развитие такой идеи построения моделей, привело к тому, что была создана система Object GPSS, в которой текст модели оказывается написанным на языке Object Pascal. При этом в предлагаемой системе доступны все основные возможности базового языка. В частности, в такой модели можно легко использовать файлы для ввода и вывода данных, можно просто и естественно, отображать ход моделирования в виде графиков или изменения размеров компонентов. Можно описывать массивы и матрицы любых объектов модели, в частности, многоканальных устройств, списков пользователей, таблиц, числовых функций, и многого другого.

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

Здесь просто и естественно создаются исполнимые файлы (программы) – являющиеся моделями конкретных систем массового обслуживания. Нет никаких проблем в создании новых блоков для построения модели, в том числе и блоков, которые нужны только для конкретной модели. Фактически, возможности разработчика модели более не ограничены набором имеющихся блоков GPSS, а определяются только его потребностями.

Именно такая система для построения моделей в стиле GPSS и названа автором Object GPSS. Некоторое увеличение времени набора кода модели и несколько большее процессорное времени моделирования, в сравнении, например, с GPSS World, с избытком компенсируется расширенными возможностями системы.

В рассматриваемой системе, GPSS – модель представляет собой Include –файл, который вставляется в программу с помощью указания компилятору вида:

{$INCLUDE model}

Файл Model.pas содержит описание конкретной модели на Object Pascal в стиле GPSS.

Весь проект ObjectGPSSProject вместе с моделью, компилируется с получением конкретной модели, с которой уже можно проводить эксперименты.

Все файлы проекта, кроме файла Model.pas , в принципе, не зависят от конкретной модели и вместо их кодов можно использовать DCU – файлы, то есть они могут быть представлены в виде уже откомпилированных частей, которые нуждаются только в сборке в единую программу. Правда, так как в модуль ModelUnit включается файл Model.pas , то для компиляции всего проекта нужен его код, то есть файл ModelUnit.pas.

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

Пример полного файла Model.pas для приведенной выше модели, выглядит следующим образом.

{~cb} Const

// model description auto.

modelname='E:\work\Object Client\ObjectGPSS\models\tmp.rtf' ;

Gen_=1;

num_bl=7;

{~ce}

{~vb} Var

{/Fac} Fac:TFacility;

{/Que} Que:TQueue;

{/Gen} Gen:TGenerate;

{~ve}

{~pfe}

{~ib} procedure Initial;begin

setstart(1000);

{/Fac} TFacility.Init(Fac,’Fac’);

{/Que} TQueue.Init(Que,’Que’);

{/Gen} TGenerate.Init(Gen,’Gen’,Gen_,100,90));

{~ie}end;

{~mtb}procedure ModelTxt;begin with SYS do case NextBlock of

{/Gen} {::Gen_} 1:Gen.Generate(100,90);

2:Que.Queue;

3:Fac.Seize;

4:Que.Depart;

5:Advance (95,90);

6:Fac.Release;

7:Terminate (1);

{~mte} else modelerror;end;end;

{~mb} procedure Modeling; begin

start(GetTg1);

{~me}end;

{~rb} procedure Report;begin

{~re} end;

{~cab} procedure CloseAllObj;begin

{~cae} end;

Этот файл содержит следующие части:

1. Описание констант, переменных и объектов модели.

2. Процедуру Initial, в которой выполняется инициализация всех переменных и объектов модели.

3. Процедуру ModelTxt, в которой и описывается собственно модель системы.

4. Процедуру Modeling, в которой указаны конкретные команды манипуляции с моделью.

5. Процедуру Report, в которой выполняется формирование выходной статистики по переменным и выражениям модели. Обычно процедура пуста.

6. Процедуру CloseAllObj, в которой выполняется уничтожение всех динамических массивов модели. Обычно процедура пуста.

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

на кажущуюся громоздкость описания модели, практически все ее части, кроме «начинки» процедуры ModelTxt, создаются программой – конвертером, по сути дела, автоматически в процессе вставки объектов модели.

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

Созданная при компиляции модель обеспечивает следующие возможности проведения экспериментов.

o Запуск модели, то есть вызов процедуры Modeling с указанным значением счетчика TG1.

o Временную, точнее досрочную остановку процесса моделирования, с возможностью продолжения текущего моделирования.

o Полную очистку модели с возвратом ее в начальное состояние.

o Сброс собранной статистики по модели.

o Формирование полного или частичного отчета по моделированию.

o Настройку перечня выводимой в отчет информации.

o Просмотр выводимой в ходе моделирования, или выведенной по окончании моделирования графической информации.

o Завершение моделирования.

Созданная программа может быть переименована и перенесена в другую папку, правда вместе с файлом Model.pas. Этот файл нужен для формирования отчета по модели.

Модель, в той форме, в какой она представлена в файле Model.pas, не удобна для разработки и модификации, поэтому ее лучше сохранять и создавать в некоторой промежуточной форме. В этой форме вместо номеров блоков используется комбинация двух символов *: , а метки блоков, которые используются для построения модели, должны начинаться с пары символов :: . Конвертер выполняет подстановку номеров блоков, определяет численные значения для меток блоков, а также определяет общее число блоков. Эти сведения автоматически попадают в файл Model.pas при конвертировании модели.

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

Так как Object GPSS создает модели на основе классов объектов, то при работе с объектами вначале должно указываться имя объекта, затем точка, а затем, имя процедуры или функции из класса. Например, fac1.Seize – означает «занять устройство с именем fac1», fac1.Report('fac1') – «вывести отчет по устройству с именем fac1» и так далее.

Система Object GPSS содержит следующие классы объектов:

Класс TSYS, который содержит основные функции и блоки системы GPSS. Фактически это класс нужен только потому, что функции GPSS имеют слишком простые имена, которые могут понадобиться разработчику модели. Так, например, в GPSS – World есть параметры M1 – текущее время жизни заявки, TG1 – текущее значение счетчика завершений. Аналогичные функции в Object GPSS будут выглядеть так SYS.M1 и SYS.TG1. Функции этого класса, в основном, совпадают с теми, которые есть, в GPSS World. К существенным изменениям набора функций можно отнести замену параметров P и X на функции RP, IP, BP, SP, RX, IX, BX, SX, которые выдают значения вещественных, целых, логических и строковых P и X параметров соответственно. Эти функции позволяют определить значения не только параметров активной заявки, но и любой другой заяки, если известен ее номер. Хотя X и P - параметры задаются номерами, вместо номеров всегда можно использовать целые именованные константы, тогда текст модели становится более наглядным. Для класса TSYS всегда создается объект SYS, который и используется в моделировании.

Набор блоков, которые используются без объектов, в основном, совпадает с теми, которые есть в обычном GPSS. Формально, все они отнесены к классу TSYS. Однако здесь возможно присваивание значений переменным, в том числе элементам массивов. Для этого используется блок LET для вещественных, целых, логических и строковых переменных.

P и X - параметры – типизированы, а поэтому вместо блоков ASSIGN и SAVEVALUE используются блоки RASSIGN, IASSIGN, BASSIGN, SASSIGN и RSAVEVALUE, ISAVEVALUE, BSAVEVALUE, SSAVEVALUE для вещественных, целых, логических и строковых P и X параметров соответственно. При этом задавать новые значения можно не только P – параметрам активной заявки, но и любой другой заявки, если известен ее номер. Значения X – параметров можно менять как при моделировании, так и при подготовке к новому моделированию. Имеются функции для проверки существования X и P параметров.

Возможна установка нового значения счетчика завершений в ходе моделирования, блок SETTG1.

Роль блоков GATE, TEST и TRANSFER взял на себя расширенный блок TEST, который обеспечивает разветвление на произвольное число направлений, в зависимости от выполнения условий, а также задержку заявки, если все условия неверны. Блок TRANSFER остался только как блок перехода на подпрограмму, блок безусловного и вероятностного перенаправления заявок.

Появился блок розыска указанной заявки FINDXN1, который определяет для нее текущий и следующий блок, а также список, в котором она находится.

В системе имеются команды и блоки для работы с текстовыми файлами.

Модель может использовать и блоки, которые предназначены для использования возможностей конкретной головной программы. Они, строятся на основе имеющихся блоков. К ним относятся блоки TOPOINT, TOSTRING, TOVALUE и CURRENBLOCKS, которые выводят очередную точку, очередную строку, очередное значение и текущую информацию о блоках.

В отличие от GPSS – World , X – параметры имеются не только у системы, но и у любого объекта, включая пустой объект, у которого ничего нет, кроме этих параметров.

Класс TGENERATE описывает генераторы заявок, то есть фактически блоки GENERATE. Каждый блок GENERATE должен быть описан и проинициализирован. Дополнительно, у блока GENERATE может указываться условие, которое определяет, будет ли выпущена из него заявка. Приход новой заявки планируется, только если предыдущая заявка вышла из блока.

Класс TTABLE описывает таблицы, предназначенные для сбора статистики. Он пополнен процедурой, которая выводят таблицы в виде гистограмм и графиков.

Класс TQUEUE описывает очереди. Его процедуры и функции, по сути, не отличаются от аналогичных блоков и СЧА GPSS– World.

Класс TSTORAGE описывает многоканальные устройства. Он пополнен блоком SETSTORAGE, который устанавливает новую предельную емкость устройства, и блоком SETGOTO, который задает перенаправление заявок с входа устройства на другой блок, или обеспечивает запрет на вход заявок в многоканальное устройство.

Класс TFACILITY описывает одноканальные устройства. Для таких устройств также имеется блок SETGOTO, и несколько иначе построена система блоков для реализации прерываний, и для реализации доступности и недоступности устройства. А именно: блоки PREEMPT, RETURN, FAVAIL и FUNAVAIL заменены блоками EXTRACT, EXTRACTPREEMPT, PREEMPT, PREEMPT0, RETURN, RETURN0, которые удаляют обслуживаемые и прерванные на устройстве заявки, прерывает обслуживание заявки с занятием и без занятия устройства, а также возвращает из прерывания заявку после обслуживания текущей заявки или принудительно, после периода недоступности устройства.

Классы TGROUP, TIGROUP, TSGROUP описывают группы для вещественных чисел, целых чисел и для строк. Их процедуры и функции, по сути, мало отличаются от аналогичных блоков и параметров GPSS World.

Класс TTGROUP описывает группы заявок. Его набор функций и процедур заметно расширен, во-первых, за счет типизации данных, то есть в данном случае P – параметров, а во-вторых, за счет обеспечения доступа к параметрам заявок из списка группы при отборе нужных заявок. Отбор нужных заявок и изменение значений их P – параметров ведется с помощью отдельно описанных функцию выбора и функций вычисления значений. Эта особенность повышает возможности блоков работы с группами заявок. В этом классе блоки SCAN и ALTER заменены блоками RSCAN, ISCAN, BSCAN, SSCAN и RALTER, IALTER, BALTER, SALTER, которые отыскивают и изменяют значения вещественных, целых, логических и строковых P параметров соответственно.

Класс TUSER описывает списки пользователя. Его набор функций заметно расширен за счет доступа к параметрам заявок из списка пользователя при выборе удаляемых заявок. Отбор нужных заявок ведется с помощью отдельно описанных функцию выбора. Эта особенность повышает возможности блоков работы со списками пользователя. Имеется также возможность выбрать заявку из списка пользователя по ее номеру в списке. Это обеспечивает возможность выбора заявки для обслуживания случайным образом.

Имеется обширный набор функций, которые, в основном, совпадает с теми, которые есть в GPSS World. Однако к ним добавлены функции, которые выбирают значения по логическим условиям, или по номеру. Это функции RBYBOOL, IBYBOOL, SBYBOOL, RBYNUN,IBYNUM, SBYNUM для вещественных, целых и строковых значений соответственно. Имеются функции выбора экстремальных значений из списка. Числовые функции можно также выводить в виде графиков.

Значения функций можно получать и из диалогового окна или компонента AddMemo главного окна. Это функции RINPUT, IINPUT, BINPUT, SINPUT, INPUTITEM и RGET, IGET, BGET, SGET для вещественных, целых и строковых значений соответственно.

Имеется также ряд других блоков, процедур и функций для организации моделей и процесса моделирования.

Если возникает необходимость создания новых блоков, то это возможно сделать следующим образом.

Можно просто вместо блока, в процедуре ModelTxt, поместить составной оператор, обрамленный ключевыми словами Begin - End. Составной оператор должен содержать блоки Object GPSS, и должен быть устроен таким образом, чтобы при любых ситуациях, в нем выполнился ровно один блок, из числа описанных в системе.

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

Программа - конвертер подготовки моделей позволяет легко вставлять и удалять описания объектов модели и требуемые вызовы процедур. Она позволяет выполнить открытие, редактирование и сохранение модели в промежуточной форме, а также выполнить ее конвертирование и запуск. Файлы моделей могут быть в TXT или в RTF – формате. Имена объектов и необходимые аргументы можно оставить такими, какие они предлагаются по умолчанию, а можно ввести их вручную. Типы объектов выбираются из списка.

Работа по созданию конкретной модели требует выполнения следующих шагов.

1. Запустить приложение Converter.Exe

2. Открыть в нем имеющуюся модель, или создать новую. Если создана новая модель, то ее следует сохранить на диске.

3. Выполнить пункт «Convert and Run». Если в модели нет синтаксических ошибок, то запускается приложение с конкретной моделью и с ним можно проводить опыты.

Если модель не создана, то, выполнив пункт «Show Error» можно просмотреть сообщения об ошибках, которые следует исправить и вновь выполнить пункт 3.

Возможно сохранение в файле отчета о результатах моделирования или графиков, сформированных моделью.

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

Система содержит 12 типов объектов, 74 блока, 73 команды для процедуры Modeling и 123 функции. Естественно, что часть этих команд будет использоваться крайне редко, так что реально нужно знать и использовать не более 50- 100 команд, блоков и функций.

Выводы.

Система Object GPSS легко может быть развита или расширена в любом направлении, которое необходимо автору модели. Так как Object Pascal относится к языкам класса 4GL, то развитие системы не требует высокой квалификации. Систему можно также использовать и для обучения. Тогда ее прозрачность и легкость развития окажется особенно полезной. Хотя фактически, при работе с системой, вы пишете код программы на языке Object Pascal, однако для работы с ней достаточно знать только основы этого, или какого либо иного языка высокого уровня, и знать набор процедур и функций, используемых для моделирования. Наборы личных процедур и функций для моделирования можно записывать как непосредственно в модели, так и в дополнительном файле, который можно включать в систему.

Оценивая опыт эксплуатации Object GPSS, следует отметить, что сами модели для этой системы выглядят более естественно, чем на традиционных версиях GPSS. Логика построения моделей более прозрачна и более соответствует логики обычных программ. При этом, основные усилия разработчика моделей тратятся на саму модель, а не на борьбу с «особенностями» языка GPSS.

Развитые средства визуализации, дополнительные блоки вывода, и возможность приостановить исполнение модели в любой момент и посмотреть полные результаты моделирования, положительно сказываются на отладке моделей.

Разработанная система может быть полезна как для тех, кто начинает осваивать дискретно-событийное моделирование, и хочет, чтобы его модели выглядели профессионально, так и для тех, кто разрабатывает сложные модели «под заказ».

Те, кого заинтересовала данная разработка, могут сообщить о себе по адресу anatoliygk@hotmail.com или anatoliygk@sti.lg.ua.

Ссылки.

Minuteman Software. 2000. GPSS World Reference Manual. Holly Springs NC: Minuteman Software.

Stahl, I. 2001. GPSS – 40 years of development. In Proceedings of the 2001 Winter Simulation Conference, ed B. A. Peters et al. Piscataway, New Jersey: IEEE.

Wolverine Software Corporation. 1996. SLX: An introduction for GPSS/H users. Alexandria, Virginia: Wolverine Software Corporation.

Lorenz, P., H. Dorwarth, K.-C. Ritter, and T. J. Schriber. 1997. Towards a web based simulation environment. In Proceedings of the 1997 Winter Simulation Conference, ed. S. Andradottir, K. J. Healy, D. H. Withers, and B. L. Nelson. Piscataway, NJ: IEEE.

Приложение.

Текст в промежуточной форме для несколько улучшенной модели, в которой добавлен вывод графика и формирование таблицы.

{~cb} Const

{~ce}

{~vb} Var

{/Fac} Fac:TFacility;

{/Que} Que:TQueue;

{/Gen} Gen:TGenerate;

{\Tab} Tab:TTable;

{~ve}

{~pfe}

{~ib} procedure Initial;begin

setstart(10000);

{/Fac} TFacility.Init(Fac,'Fac');

{/Que} TQueue.Init(Que,'Que');

{/Gen} TGenerate.Init(Gen,'Gen',Gen_,100,90);

{\Tab} TTable.Init(Tab,'Tab',0,50,100);

{~ie}end;

{~mtb}procedure ModelTxt;begin with SYS do case NextBlock of

{/Gen} ::Gen_ *:Gen.Generate(100,90);

*:Que.Queue;

*:Fac.Seize;

*:Que.Depart;

*:Advance (95,90);

*:Fac.Release;

*:topoint (1,ac1,tab.b);

*:tab.tabulate (m1);

*:Terminate (1);

{~mte} else modelerror;end;end;

{~mb} procedure Modeling; begin

start(GetTg1);

show(tab,1);

{~me}end;

{~rb} procedure Report;begin

{~re} end;

{~cab} procedure CloseAllObj;begin

{~cae} end;

Выходная статистика по модели.

{/Gen} {::Gen_} 1:Gen.Generate(100,90);

2:Que.Queue;

3:Fac.Seize;

4:Que.Depart;

5:Advance (95,90);

6:Fac.Release;

7:topoint (1,ac1,tab.b);

8:tab.tabulate (m1);

9:Terminate (1);

StartTime 0.00000 EndTime 1006403.09649

Count8

BLOCK Report

Location Entries Current

1 10005 0

2 10005 5

3 10000 0

4 10000 0

5 10000 0

6 10000 0

7 10000 0

8 10000 0

9 10000 0

Report CURRENT LIST Count= 5

XN1 Assem Pr Current Next TimeStamp TimeEnter Interrupt

10001 10001 0 2 3 1005827.81200 1005827.81200 0

10002 10002 0 2 3 1006011.30498 1006011.30498 0

10003 10003 0 2 3 1006114.65524 1006114.65524 0

10004 10004 0 2 3 1006200.47669 1006200.47669 0

10005 10005 0 2 3 1006362.03312 1006362.03312 0

Report FUTURE LIST Count= 1

XN1 Assem Pr Current Next TimeStamp EndTime Interrupt

10006 10006 0 0 1 1006432.60666 1006432.60666 0

Facility Entries Current Utility AverTime NextGo XN1 XN1P NumObj

Fac 10000 0 0.94378 94.98223 0 0 0 3

Queue Entries Current Max Min Zero AverQueue AverTime AverTime(-Ze) NumObj

Que 10005 5 19 0 1070 4.17219 419.68112 469.93952 4

Table Tab Entries 10000.00000

Mean 514.72327 StdDev 404.02759 NumObj 6

Range Frequency

0.00000 0.00000

50.00000 354.00000

100.00000 600.00000

150.00000 778.00000

200.00000 907.00000

250.00000 718.00000

300.00000 676.00000

350.00000 582.00000

400.00000 468.00000

450.00000 424.00000

500.00000 453.00000

550.00000 349.00000

600.00000 342.00000

650.00000 280.00000

700.00000 258.00000

750.00000 261.00000

800.00000 248.00000

850.00000 230.00000

900.00000 222.00000

950.00000 203.00000

1000.00000 162.00000

1050.00000 174.00000

1100.00000 164.00000

1150.00000 146.00000

1200.00000 183.00000

1250.00000 132.00000

1300.00000 112.00000

1350.00000 109.00000

1400.00000 108.00000

1450.00000 74.00000

1500.00000 71.00000

1550.00000 63.00000

1600.00000 47.00000

1650.00000 27.00000

1700.00000 22.00000

1750.00000 14.00000

1800.00000 11.00000

1850.00000 6.00000

1900.00000 6.00000

1950.00000 5.00000

2000.00000 2.00000

2050.00000 3.00000

2100.00000 3.00000

2150.00000 1.00000

2200.00000 0.00000

2250.00000 2.00000

2300.00000 0.00000

Вид программы – конвертера.

Головная форма конкретной модели.

Страничка с графиком среднего времени обслуживания заявки.

Страничка с гистограммой времен обслуживания заявок.