|
|

Артем — 04.03.08
Из объектов Enterprise Library создал такую цепочку: (Sourse - BatchQ - SelectOutput) - Lane
- (Queue - Unbatch - Delay ) - Sink. Во время выполнения модели происходит
следующее: заявки генерируются, собираются в партию, разделяются
по условию, перемещаются, а на этапе извлечения из партии
происходит остановка работы предыдущих блоков, затем извлечение
и обработка заявок (включаются таймеры для каждой заявки) и лишь
затем блоки (Sourse - BatchQ - SelectOutput) - Lane продолжают свою работу.
Подскажите пожалуйста, каким образом сделать так, чтобы процессы
генерации, сбора заявок в партию, их разделения по условию и
транспортировка происходили одновременно с извлечением заявок
из партии и т.д.?
Виктор Глейм — 04.03.08
Артем, поясните, что значит "происходит остановка работы"? Вы
сами определяете процесс таким образом, чтобы работа
останавливалась, или именно это вам и мешает?
Артем — 04.03.08
Все дело в блоке Unbatch, ведь в процессе выполнения модели, когда
начинается извлечение заявок из партии, останавливаются
процессы генерации, сбора заявок в партию, их разделения по
условию и транспортировки. Не могу понять, как сделать так чтобы
все происходило одновременно? Ведь транспортировка
останавливается, соответственно, и на анимации!
А идея модели проста: на первом этапе происходит генерация
заявок (вагонов), сбор их в партии (маршрутные поезда) и разделение
на 2 направления, на втором этапе собранные партии (маршрутные
поезда) перемещаются в другое место, на третьем - партии
разделяются опять на отдельные заявки и обрабатываются.
Артем — 04.03.08
Кстати, на этапе, когда заявки извлекаются из партии, происходит в
прямом смысле остановка: время модели останавливается,
происходят лишь изменения по шагам...
Артем — 05.03.08
и еще вопрос: можно ли размер партии, генерируемой BatchQ сделать
динамическим и подчинить, например, нормальному распределению?
Павел Лебедев — 06.03.08
Скорее всего, причина в обработке заявок в коде 'onEnter' и 'onExit' блока
'unbatch'. До тех пор пока она не завершится, модель не продолжит
работу, так как выполнения кода "onExit" - это один модельный step.
Если у Вас много заявок в партии, и обработка сложна (занимает
заметное время), то это вполне может быть причиной описанного
поведения.
Размер партии, генерируемой блоком 'batchQ', возможно сделать
динамическим. Для этого необходимо в поле 'onEnter' записать,
например, следующий код: 'batchQ.set_size(uniform_discr(x,y));', где uniform_discr(x,y) -
равномерное распределение, x и y - минимальное и максимальное
значения размера партии соответственно. Также, вы можете
использовать любое другое распределение, но при этом необходимо
контролировать, чтобы размер партии был больше единицы.
Артем — 06.03.08
Павел, спасибо за Ваши ответы!
Код, динамически меняющий размер партии работает отлично!
Но по блоку 'unbatch' вопрос так и остается. 'onEnter' и 'onExit' не содержат
никакого кода, т.е., в принципе, там нечему выполняться. Но в
момент, когда партия заявок поступает в этот блок, работа
предыдущих блоков останавливается (как видно в окне отображения
структуры, последовательно включаются таймеры) и, пока все заявки
из партии не извлекутся, их состояние так и остается неизменным.
В итоге же хочется получить, чтобы процессы формирования,
доставки партий и расформирования их происходили одновременно!
Виктор Глейм — 06.03.08
Артем!
Блок Unbatch последовательно разделяет заявку на несколько заявок и
в соответствующем порядке выпускает их через порт к следующему
блоку. Каждый выход заявки из блока - событие. С точки зрения
моделирования процессы разделения и доставки партии происходят
одновременно, потому как разделение партии занимает нулевое
модельное время и в вашем случае, пожалуй, последовательность
событий не так важна.
Что касается торможения модели в момент разделения партии, то
здесь, скорее всего, дело в большом количестве заявок внутри
партии. Также, возможно, у вас включена опция "Обновлять окна
автоматически" (Auto Refresh Views).
Артем — 07.03.08
Виктор, спасибо за ответы!
Формируемая партия состоит из, порядка, 40-50 заявок.
Действительно, операция извлечения заявок из партии занимает
нулевое модельное время, но т.к. в реальном времени на это уходит
несколько секунд, то информативность анимации сильно страдает.
Вот и хочу разобраться, может есть какой-то выход?
С опцией "Обновлять окна автоматически"
поэкспериментировал, все равно происходит остановка работы
блоков, расположенных перед блоком Unbatch, на время извлечения
заявок из партии.
Виктор Глейм — 07.03.08
Артем!
Опция "Обновлять окна автоматически" необходима для того,
чтобы включить/выключить постоянное обновление анимации и
данных на структурных диаграммах модели. Обычно отключение этой
опции решает подобные проблемы, однако, видимо, не в вашем случае.
Я так понимаю, что под остановкой блоков понимается то, что
заявки из партии извлекаются разом и между извлечением отдельных
заявок не может происходить других событий. Такова реализация
библиотеки. Впрочем, если вас беспокоит не этот факт, а то, что
происходит замедление модели, я советую отправить модель в
службу поддержки XJ.
Артем — 14.03.08
Виктор!
Большое спасибо за Ваши пояснения, постараюсь отправить модель в
службу поддержки, как только она примет какие-то очертания
законченности!
|
|
|