A12. Cеть пятого поколения 5g
Оглавление
ВИРТУАЛИЗАЦИЯ ИЛИ «СЕТЬ ПО ЗАПРОСУ» 17
Структура проекта
Тип агента Base является описанием базовых станций, с которыми соединяются устройства абонентов сети (звонилки,смартфоны, авто, устройства интернета вещей iot)
Тип агента DataCenter является описанием центров, которые предоставляют услуги абонентам (телефония,моб.интернет,iot,automotive)
Тип агента Sub является описанием абонентов, которые сначала соединяются с базовыми станциями, потом их данные направляются в сеть виртуализации для получения доступа к нужным услугам, каждую из которых предоставляют определенные датацентры.
Тип агента SubToСenter описывает все подключения абонентов к датацентрам. Для появления нового соединения с датацентром очередного абонента создается отдельный агент по типу SubToСenter, который заключается в агенте соответствующего датацентра.
Simulation – описание параметров запуска модели. В данной программе simulation запускает эксперимент по типу агента Main
Simulation
Для запуска эксперимента можно использовать одну из кнопок
– системную
– Либо запрограммированную разработчиком
В свойствах кнопки содержится код, необходимый для запуска эксперимента и для смены названия в ходе запуска
Код | Пояснение |
Если функция getState возвращает состояние эксперимента IDLE (когда не запущен), то надпись на кнопке -«Запустить», при любом другом состоянии – «Агент верхнего уровня» | |
Если при клике по кнопке функция getState возвращает состояние эксперимента IDLE (когда не запущен), то функция run запустит эксперимент по типу агента Main |
Справочная информация по используемым в кнопке функциям
ТИП АГЕНТА MAIN
Интерфейс и логика модели в типе Main
Рабочая область включает графику различных уровней сети 5g и логическую цепь компонентов библиотеки моделирования процессов и производственных систем.
На уровне сети базовых станций размещаются агенты типа Base ,имитирующие базовые станции RAT. Агенты данного типа объединены в популяцию base и имеют своё расположение. Координаты берутся из двумерного массива baseLoc и подставляются в свойства популяции base
Популяция базовых станций
Двумерный массив с координатами
Где index в обращении к массиву baseLoc[index][]–это порядковый номер агента в популяции. Таким образом, у каждой станции появляются свои координаты, потому что размер массива совпадает с размером популяции и равен 16 элементам.
На уровне сети виртуализации используются простые картинки сетевого оборудования и группы линий разных цветов, которые появляются или исчезают в зависимости от появления в системе соответствующих определённому цвету абонентов(например, устройства ioT имеют серый цвет, а значит в гранимации сети виртуализации появятся серые соединения, когда транзакт доберётся до конца первой конвейерной линии,где синее облако находится )
На третьем уровне – дата центров-также используется графика карты мира с размещением на ней анимации агентов типа DataCenter. По мере продвижения транзактов(то, что бегает по блокам лог.цепи) по 2-й конвейерной линии между ними и датацентрами возникают соединения, показанные как и на нижнем уровне линиями с цветами, соответствующими типу устройства. Агенты данного типа в количестве 16 экземпляров объединены в популяцию dataCenter. Местоположение задаётся тем же самым массивом baseLoc с той лишь разницей, что координата y уменьшается на 215px для каждого агента, т.к. карта мира датацентров находятся ближе к началу координат на 215px.
На последнем графическом уровне- облаке услуг— отображаются услуги, которые в данный момент предоставляются абонентом. Чем больше квадратик услуги, тем ,значит ,большее количество устройств в данный момент её получают через датацентр.
Через логическую цепь задаётся создание агентов абонентов(транзактов) и их перемещение в анимации с помощью конвейерных линий.
Лог.цепь продвижения транзактов в модели
Для создания абонентов используется блок generateSub со свойствами
Свойства источника новых абонентов
Каждый агент абонента заносится в популяцию агентов subs, чтобы накапливать статистику по количеству абонентов того или иного типа (сколько абонентов iOT, сколько смартфонов, сколько автомобильных устройств и т.д.) на данный момент времени соединенных с датацентрами (абоненты имеют параметр stage=2 на данной стадии)
Свойства популяции агентов абонентов
ТИП АГЕНТА BASE
Содержит анимацию из картинок вышек, коммутатора и белых 6-угольников для обозначения активных сот. За видимость 6-угольника соты отвечает переменная ceil, которая принимает значения от1 до 6, если связь с абонентом установлена. Отображается та сота, чей порядковый номер совпадёт с переменной ceil. Эта логика задаётся кодом в свойстве видимости мноугольников, например, для 4-й соты прописано вот так
Переменная links содержит количество соединений с абонентами на текущий момент.
В популяции агентов base используется данный тип Base и задан один элемент статистики, в котором суммируются переменные links всех 16 станций.
Свойства популяции base
Базовые станции распределены по карте мира благодаря свойству популяции base «расположение агентов: в заданной точке»
ТИП АГЕНТА DataCenter
Содержимое типа агента DataCenter
Здесь есть фигурка датацентра и кружок, принимающие разные цвета, в зависимости от предоставляемой дата-центром услуги (параметр trafficType принимает значения от 0 до 3). Переменная хранит в себе порядковый номер датацентра в популяции dataCenter
Свойства кружка-индикатора услуги
subToCenter — популяция агентов типа SubToCenter, включает в себя все линии на презентации модели, которые соединяют датацентр и абонентов. Для создании этой популяции, как и любой другой, нужно перетащить тип агента SubToCenter из области проекта, щелкнув правой кнопкой по нему.
Рис. Отсюда перетаскивать на поле типа агента DataCenter
Для отрисовки данных линий и занесения их в популяцию subToCenter используется функция drawLine
Таблица Код функции drawLine
ShapeLine newline = new ShapeLine( SHAPE_DRAW_2D3D, true, 0, 0, 0.0, main.colorList.get(trafficType), dx, dy, 0.0, 1.0, 10.0, LINE_STYLE_SOLID ); | Создать новую линию с координатами 0,0 в начале и dx,dy(крайняя правая точка 2-й конвейерной линии) в конце. Также задаём цвет, для этого обращаемся к коллекции для получения из неё того цвета, порядковый номер которого соответствует типу услуги main.colorList.get(trafficType) |
presentation.add(newline); | Размещаем на презентации модели новую линию |
return add_subToCenter(newline); | Добавляем в популяцию новую линию для того, чтобы потом можно было бы её стереть из анимации, когда абонент достигнет конца 2-й конвейерной линии |
Аргументы функции drawLine
dX | Координата x крайней правой точки 2-й конвейерной линии |
dY | Координата y крайней правой точки 2-й конвейерной линии |
Возвращаемым результатом работы функции будет агент типа SubToCenter
ТИП АГЕНТА SUB
Содержимое типа агента Sub
Переменные и параметры
line | Содержит ссылку на объект линии соединения базовой станции и абонента |
stage | Может принимать значения 1 или 2 в зависимости по какой конвейерной линии едет |
main | Хранит ссылку на агент типа Main, чтобы можно было получить доступ к массиву координат |
x,y | Хранит координаты положения фигурок анимации абонентов |
colorList | Коллекция из четырех цветов для окрашивания линий соединений |
type | Тип абонента влияет на выбираем элемент из коллекции цветов |
myDataCe | Для сохранения ссылки на дата-центр, с которым будет установлена связь |
corner | Угол поворота фигурки абонента. Необходим чтобы развернуть в исходное положение(180градусов) фигурки на второй конвейрной линии |
linkToDataCe | Для хранения ссылки на агент типа SubToCenter,чтобы можно было стереть линию связи с датацентром при уходе абонента из системы |
myBase | Для хранения ссылки на агент базовой станции, с которой установлено соединение |
Рис.Свойства диаграммы состояния Sub
Диаграмма состояния имеет один переход transition,который срабатывает каждые 0.1 секунды, чтобы конец линии связи от абонента возвращать в точку местоположения базовой станции. В коде действия перехода прописано, что если линия отрисована, то нужно с помощью функции setDx изменить координату x её конца, примыкающего к фигурке базовой станции. Это необходимо из-за того, что фигурки абонентов перемещаются по конвейеру вправо и линки тоже смещаются. Направление и скорость перемещения (2м/с) конвейера (задаётся через свойства) определяют знак и значение слагаемого -1.9499070602. Это в десять раз уменьшенное число 19.499… пикселей, которое успевает пройти фигурка за 1секунду при скорости конвейера 2м/с. Интервал перехода взят 0.1,чтобы возвращение конца линии в исходное положение было более плавное.
Функция drawLine() отвечает за отрисовку линий связи и имеет код почти как в типе агента DataCenter у диаграммы состояния
ShapeLine newline = new ShapeLine( SHAPE_DRAW_2D3D, true, 0, 0, 0.0,colorList.get(type-1), dx, dy, 0.0, 1.0, 10.0, LINE_STYLE_SOLID ); presentation.add(newline); line=newline; |
ТИП АГЕНТА SUBTOCENTER
Содержимое типа агента SUBTOCENTER
Параметр line нужен чтобы хранить ссылку на отрисованную линию связи, а диаграмма состояний, чтобы пододвигать конец линии связи к перемещающейся фигурке абонента, чтобы соединение следовало за ним. Код перехода задаётся аналогичным переходу из диаграммы типа агента Sub.
ЛОГИЧЕСКАЯ ЦЕПЬ В MAIN
В первом блоке создаются агенты абонентов с интенсивностью 0.5 в секунду, потом агенты следуют к первому конвейеру через блок queue(он на тот случай, если на конвейере не останется места).
Компонент конвейера связан с полосой на графике благодаря заданным свойствам
Cвойства конвейера
После прохождения конвейра фигурка переместится к синему облаку и исчезнет ненадолго из области видимости. В этот момент выполнится код (свойство компонента queue1)
DataCenter dtc = getNearestAgent(filter(dataCenter,t->t.trafficType==agent.type-1)); | Поиск датацентра, который предоставляет услугу под тип абонента |
int number = uniform_discr(0,dataCenter.size()-1); | Получаем случайное число от 0 до 15 |
if(dtc !=null) number = dtc.number; | Если поиск необходимого датацентра закончились цспехом, то в переменную number записываем порядковый номер найденного датацентра |
agent.myDataCe = dataCenter.get(number); | Записываем ссылку на найденный датацентр внутри агента абонента в параметре myDataCe |
agent.presentation.remove(agent.line); | Удаляем из анимации линию соединения с базовой станцией |
agent.stage=2; | Переводим абонента на второй этап |
agent.corner=-3.14; | Вовращаем фигурку в иходное положение, потому что при попадание на второй конвейер её закрутит на 180градусов |
agent.x=15; agent.y=15; | Ликвидируем последствия поворота, возвращаем в начало системы координат |
agent.myBase.links—; | Уменьшаем счетчик соединений в базовой станции, на прошлом этапе связанной с данным абонентом |
double dX = baseLoc[number][0]; | Получаем координату х линии соединения с датацентром |
double dY = baseLoc[number][1]-215; | Получаем координату у линии соединения с датацентром |
agent.myBase.ceil = 7; | Ставим значении 7 переменной агента, чтобы сота базовой станции потухла |
agent.myDataCe.trafficType = agent.type-1; | Устанавливаем тип услуги,которую предоставляет датацентр |
agent.linkToDataCe = dataCenter.get(number).drawLine(450-dX,570-360-180-dY+330); | Отрисовываем линию соедитнения с датацентром |
В конце логической цепи в блоке sink выполнится код
agent.myDataCe.presentation.remove(agent.linkToDataCe.line); | Удаление из анимации линии связи абонента и датацентра |
agent.myDataCe.remove_subToCenter(agent.linkToDataCe); | Удаление агента из популяции линий связи |
if(agent.myDataCe.subToCenter.size() == 0) agent.myDataCe.trafficType = 5 | Если в популяции линий связи не остались агенты, тогда скрываем кружок услуги в датацентре, установив переменную trafficType в значение 5 |
Во всех блоках логической цепи в качестве типа агента указывается Sub
ВИРТУАЛИЗАЦИЯ ИЛИ «СЕТЬ ПО ЗАПРОСУ»
Группы линий различных цветов видны или скрыты в зависимости от показателей популяции subs
Здесь подсчитывается сколько абонентов каждого типа находятся на этапе 2, т.е.сколько агентов абонентов миновали блок лог.цепи queue1
А вот так задаётся видимость, например, зелёных линий в сети виртуализации для автомобильных абонентов
ОБЛАКО УСЛУГ
4 из всех текстовых надписей запрограммированы на отображение названия услуг, которые в текущий момент времени обеспечиваются датацентрами.
Свойства надписи усулуга1
Свойства надписи услуга16
Во всех 4-х текстах свойства текст и цвета имеют динамическое значение, зависящее от показателей популяции dataСenter. В данных показателях суммируется количество сколько абонентов обратилось за той или иной услугой. Чем больше эти показатели, тем больше будут фоновые прямоугольники каждой услуги.
Свойства прямоугольника за текстом услуга1
Облако услуг