AnyLogic
Развернуть
Размер шрифта

Порты

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

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

Чтобы добавить в объект порт

  1. Перетащите элемент Порт из палитры Агент в то место графического редактора, где вы хотите его нарисовать.

Свойства

Основные

Имя — Имя порта. Имя используется для идентификации порта и доступа к нему из кода.

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

Исключить — Если опция выбрана, то порт будет исключен из модели.

Отображается на верхнем агенте — Если опция выбрана, то порт будет виден на презентации типа агента, в который будет вложен данный объект.

Видимость — Если опция выбрана, то порт будет отображаться на презентации во время выполнения модели.

Действия обработки сообщений

Действие при получении — Код, выполняемый при получении сообщения (при вызове пользователем метода receive() этого порта, или при поступлении в порт сообщения из порта вложенного объекта). Только что полученное сообщение доступно здесь как msg (локальная переменная типа Object).*

Действие при отправке — Код, выполняемый при отправке сообщения (при вызове пользователем метода send() этого порта, или при поступлении в порт сообщения из порта агента, находящегося выше или на том же уровне иерархии, что и агент-владелец этого порта). Сообщение доступно здесь как msg (локальная переменная типа Object).*

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

Специфические

Порт пользовательского класса — Если опция выбрана, то порт будет экземпляром пользовательского класса порта, вызов конструктора которого должен быть написан в поле Код конструктора.Такая возможность требуется в том случае, если у вас в модели(моделях) несколько портов с одинаковой нестандартной функциональностью (например, одинаковое Действие при получении сообщений), и вы хотите задать эту функциональность только один раз с помощью своего класса порта, а в дальнейшем просто создавать экземпляры этого класса.

Тип входящего сообщения — Тип сообщений, которым разрешено поступать в этот порт. Сообщения, которые не смогут быть приведены к указанному типу, будут проигнорированы и удалены. Если вы оставите в поле Object, то фильтрация сообщений по типу производиться не будет и портом смогут приниматься сообщения всех типов.

Тип исходящего сообщения — Тип сообщений, которым разрешено отсылаться через этот порт. Сообщения, которые не смогут быть приведены к указанному типу, будут проигнорированы и удалены. Если вы оставите в поле Object, то фильтрация сообщений по типу производиться не будет и через порт смогут посылаться сообщения всех типов.

Создание портов с нестандартной функциональностью

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

Чтобы создать класс порта

  1. В панели Проекты, щелкните правой кнопкой мыши по модели и выберите Создать > Java класс… из контекстного меню.
  2. Откроется диалоговое окно Новый Java класс.
  3. Введите имя нового класса в поле Имя.
  4. Задайте имя базового класса. Введите Port в поле Базовый класс. Класс Port является базовым классом для всех классов портов в AnyLogic. Этот класс обеспечивает основную функциональность по отправке и приему сообщений, и если вы хотите изменить заданное по умолчанию поведение порта, создав свой собственный класс порта, то вам нужно будет унаследовать его от класса Port.
  5. Щелкните мышью по кнопке Готово.
  6. Вы увидите окно редактора кода только что созданного класса. Здесь вы можете редактировать код вашего класса порта, например, переопределить какие-то функции базового класса Port.
  7. Когда вы закончите, нужно будет сделать те порты, которые должны обладать функциональностью созданного класса, экземплярами этого класса.

Вы можете создать класс порта не только так, как это описано здесь, с помощью Java класса, но и во внешнем файле или в библиотеке. Создавая класс в библиотеке или во внешнем файле, вы сможете в дальнейшем использовать этот класс и в других моделях.

Чтобы сделать порт экземпляром созданного класса порта

  1. Выделите порт на диаграмме.
  2. Перейдите в секцию Специфические панели свойств порта и установите флажок Порт пользовательского класса.
  3. В поле Код конструктора добавьте вызов конструктора созданного класса порта, например, MyPort(this)
Как мы можем улучшить эту статью?