Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 19
Текст из файла (страница 19)
Средства Апу1 одГс дпя имитационного моделирования систем через порт сообщений. В данной главе мы не будел~ строить дискретную модель счетчика сами. Вместо этого мы подробно рассмотрим уже разрабатанную модель с именем соппеес, находящуюся в папке Мог!с! Ехаптр1ез~рап 11. Наша задача — объяснить различия между этой моделью и моделью сопелппоиесоипсес. 6.1.1. Рассматриваемые вопросы В результате обсуждения модели соппсес будут рассмотрены новые средства: лз порты и.сообшения; П действия при получении сообщений. 6.1.2. Структура модели Сзруктура модели соспеег совпадает со структурой модели сопелппопесоппсет. Их внешнее поведение также одинакова. Откройте модель соппсет и запустите ее.
В этой модели определены три класса активных объектов: аеп (генератор импульсов), ссппеес (одноразрядный десятичный счетчик) и костел (корневой объект, включающий генератор и три разряда счетчика). 6.1.3. Представление сиГнала как сообщения Генератор должен посылать сигналы с заданной частотой.
Сигнал можно представить как сообщение, передаваемое между объектами через явно определенный интерфейс — порт. В качестве сообщения в Апу(.ая(с можно передавать любой объект, фактически, экземпляр любого класса. Сообщения в Апу(.оя(с (как и любой класс 3ата) должны наследоваться от базового класса аь)есе, В нашей модели счетчика важен только сам факт передачи или приема сообщений, а содержимое сообщений не важно.
В таких случаях сообщения модели можно считать просто экземплярами базового класса аьбесе, поскольку это базовый класс 5аиа и нам его не надо расширять специальными переменными. Событие приема такого сообщения будет вызывать выполнение действия по изменению состояния системы (в нашем случае это просто увеличение значения счетчика). Генератор Активный объект сеп должен посылать сообщения первому разряду счетчика с заданной частотой. Новым элементом структуры активного объекта сеп в модели дискретного счетчика является порт.
Порт — это основной низкоуровневый механизм Апу(.ай(с в коммуникации объектов модели с помощью Глава 6. Разработка моделей дискретно-событийных систем передачи сообщений. Сообщения посылаются и передаются через порты. Порты являются двунаправленными, через них сообщения могут и посылаться, и приниматься. Через порт, помегценный на границе прямоугольника, ограничивающего активный обьект, этот объект может посылать и принимать сообщения от других активных объектов.
У генератора определен порт с именем еъск. Для того чтобы создать такой порт, нужно щелкнуть мышью на кнопке Я панели инструментов, а затем на границе прямоугольника, представляющего активный объект пеп. Вслед за этим в окне свойств порта нужно установить его параметры. Все параметры порта пъск, кроме имени, оставлены неизменными так, как они определены по умолчанию. Генератор нашей модели периодически с частотой т!гсечпепсу должен выдавать сообщения (т. е. экземпляры класса оь)ест) через порт и'ск.
Внутри прямоугольника аеп помещена иконка ['Я статического таймера (рис. 6.1). Рис. 6.т. Структура генератора Справа в окне свойств таймера указано его предопределенное имя степ-, а также параметры таймера: то, что он циклический, что он не срабатывает на старте и что период его срабатывания ранен гт г -еч епсу. В поле Действие при срабатывании указывается, что при кажлом срабатывании таймера должен делать генератор. Здесь это дейстние — посылка нового сообщения типа оьбесп через выходной порт с именем пгсю Это выражается в АпуЕорс следующей строкой: пгск.еепгт( пее Оьбесп( 1 ); Именно эта строка записана в поле Действие ири срабатывании окна снойств таймера (рис.
6.1). Часть И. Средства Аоф одю для имитационного моделирования систем Разряд счетчика Разряд десятичного счетчика представляется как и в модели сосстпиоиесосесет активным объектом соессек. Однако здесь он кроме целой переменной сч хранящей состояние разряда, включает не две интерфейсные переменные, а два порта: сьск и очетг1ои. Каждый раз, когда происходит событие получения сообщения в порте сток, переменная и должна увеличиваться на единицу по модулю 1О с извещением по порту очетс1ои о переполнении, если оно наступило. Это значит, что если значение и есть 9 и пришло новое сообщение по порту сьск, то переменная и примет значение О, а через' выходной порт будет послан сигнал. В противном случае разряд счетчика увеличивает значение своей переменной и на К Именно это записано в поле Действие при получении вкладки Код порта сасх (рис.
б.2). Рис. 6.2. Структуре разряда счетчика В полях окна свойств порта любое пришедшее в этот порт сообщение доступно по имени мед. В соответствии с данной записью, через порт очесс1о ~, таким образом, будет передаваться каждое десятое сообщение, полученное в порт ссск. Приведенная запись в окне Действие при получении окна свойств порта т ьск — это, в действительности, фрагмент программного кода на языке 5ауа, выражающий логику нужных лействий разряда счетчика при получении им сообщения по данному порту.
Такую логику невозможно выразить с помощью только графических визуальных средств. Объединение визуальной разработки модели с фрагментами кода является очень удобным приемом, неизмеримо увеличивающим гибкость и мощность среды разработки моделей Апу) оя1с. Глава б. Разработка моделей дискретно.событийных систем Корневой обьект Нос(е/и анимация модели Этот объект аналогичен соответствуюгдему объекту модели ссссъпссиесссссет.
Он включает один экземпляр генератора и три экземпляра разряда счетчика. Соединение портов включенных обьектов выполняется точно так же, как и соединение интерфейсных переменных в модели сссссет. Чтобы связать интерфейсные переменные и порты не прямой линией„используется иконка ~Я панели инструментов. Строить связь с помощью этого графического элемента нужно так, как строился переход в стейтчарте (рис. 4.1б). Анимация модели ссисее - построена точно так же, как анимация модели сосеъсиоиесоипеес.
6.2. Реагирующие системы (геасМче зуз$еез) и стейтчарты Реааярующую систему (геасйуе аувер) А. Пнуэли в [Р8б1 определил как систему, постоянно ожидающую внешних или внутренних событий и реагирующую на них. Реагирующие системы являются типичными системами дискретно-событийного типа: события происходят в дискретныс моменты времени, реакция системы на события состоит в изменении переменных состояния этих систем и формально такая реакция является мгновенной. При задании реагирующих систем оказалось удобным использовать стейтчарты (или карты состояний), простейший вариант которых был использован нами в главе 4. Стейтчарты представляют собой графический язык диаграмм (фактически, расширение обычных графов переходов). Язык стейткчпртов, впервые введенный Д. Харелом (Н871, в настоящее время широко применяется для спецификации, моделирования, верификации и прототипирования протоколов коммуникации, встроенных систем управления в авиации, на транспорте, в бытовой и научной электронике.
Они также являются средством определения поведения объектов в ЫМЬ. Стейтчарты строятся из состояний и переходов между ними. Система может находиться в каждый момент только в одном состоянии. Переходы из состояния в состояние случаются, если происходит событие. связанное с этим переходом, и условие, связанное с переходом (если оно есть), выполнено.
На диаграмме рис. б.З. система из состояния л переходит в состояние в, если наступит событие е и при этом условие г будет выполнено. Событием может быть, например, истечение таймаута, переключение в истину предиката (условия), определенною на переменных модели и т. п. Графически состояния представляются прямоугольниками или овалами, а переходы— дугами. Короткая стрелка-указатель, входящая в состояние л, говорит о том, что это состояние начальное: в начальный момент времени система будет находиться именно в этом состоянии. Очевидно, что у системы может быть Часть д Средства Апу~одк для имитационного моделирования систем ровно одно начальное состояние. С каждым переходом может быть связано некоторое действие — изменение переменных, посылка сигнала и т.
и. С каждым состоянием также могут быть связаны действия. Одно дейстние выполняется н момент входа в это состояние, другое дейстние выполняется при выходе из состояния. На рис. 6.3 тт и тз условно обозначены действия, выполняемыс при срабатынании соответствующих переходов. Рис. 8.3. Простой граф переходов Рисунок 6.3 представляет простейший стейтчарт с двумя элементарными состояниями. В общем случае в стейтчартах можно дополнительно использовать расширения этой простейшей модели переходов: иерархические состояния (гиперсостояния), исторические состояния, услонные переходы и некоторые другие нозможности.
Рассмотрим их по порядку. Иерархические состояния или гиперсостояиия вводятся для того, чтобы объединить несколько состояний, имеющих одну и ту же рсакпию на событие. На рис. 6,4 справа гиперсостояние р позволяет упростить граф переходон, представленный слева: переход н состояние л при наступлении события ь происходит вне зависимости от того, в каком из состояний, в или с находилась система. Иными словами, два стейтчарта на рис. 6.4 эквивалентны. Рис. В.Я. Использование гиперсостояния упрошает граФ переходов 95 Глава Б. Раз ботна моделей дискретно-событийных систем Каждое гиперсостояние требует, чтобы точно одно из включенных в него состояний было помечено как начальное.