Считывание значения параметра из БД

Вы можете легко считывать из диаграммы процессов значения параметров блока или агента из определенной ячейки БД.

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

Время обработки каждой детали Part мы храним в таблице базы данных processing_times:

Если у вас данные хранятся во внешней базе данных, вам нужно предварительно импортировать их во встроенную базу данных AnyLogic.

Теперь мы можем указать блоку Delay считывать требуемое время обработки для каждого типа детали Part из таблицы БД.

 Как считать параметры блока диаграммы процессов из БД

  1. Нам нужно, чтобы блок Delay использовал время обработки, которое соответствует типу обрабатываемой детали Part. Для этого необходимо создать отдельный тип агента для детали Part. Чтобы создать новый тип агента, щелкните правой кнопкой мыши по элементу Модель в панели Проекты и выберите Создать > Тип агента из выпадающего контекстного меню. Вы увидите окно мастера нового агента. На первой странице укажите Имя нового типа агентаPart. На второй странице выберите анимацию для этого агента, и на следующей странице добавьте параметр: name типа String. Мы будем использовать этот параметр для хранения типа детали Part. Блок Source будет создавать агентов типа детали Part (выберите Part в его поле Новый агент) и укажите ему Считать параметры агентов из БД (детальную информацию можно найти тут).  
  2. Откройте Свойства блока Delay
  3. Для пункта Время задержки, нам нужно переключиться из редактора динамического значения на конструктор ссылки на базу данных. Чтобы это сделать, нажмите на кнопку слева от поля Время задержки, и выберите вариант Ссылка на базу данных из выпадающего меню. 
  1. Ниже, в разделе управления Таблицы, выберите таблицу БД, которая содержит данные: processing_times.
  2. Из раскрывающегося списка Столбец значений, выберите столбец, который содержит необходимые данные: processing_time

  1. Ниже можно увидеть секцию Условия выборки, с возможностью указать условие, определяющее значение, которое будет выбрано из указанного столбца таблицы.
  1. Нам нужно выбрать значение, соответствующее определенной детали Part, поэтому мы будем использовать значения из столбца part, чтобы найти нужную запись. Следовательно, нужно выбрать part из раскрывающегося списка. 
  1. В поле ниже напишите agent.name

Позвольте нам объяснить, как это работает. Мы создали блок, чтобы посмотреть на значение Времени задержки во встроенной БД. Значение берется из таблицы processing_times, столбца processing_time. У наших агентов типа детали Part указан String параметр name, который содержит тип деталей (это может быть "Part A", "Part B", или "Part C"). Для каждого нового агента, который попадает в Delay, Блок будет искать запись в указанной таблице БД, которая содержит значение в столбце part соответствующее name агента, который в данный момент обрабатывается блоком (обращение к агенту происходит через agent). Это значение устанавливается как время задержки для данного агента. 

К примеру, если имя текущего агента "Part B", блок выставит время задержки равное 20 секундам. Если таблица база данных содержит несколько записей со значениями "Part B" в столбце part, вы увидите сообщение об ошибке, так как AnyLogic предполагает единственное значение в этом столбце.