Документация Engee

Программное редактирование моделей

Работа с моделями

Добавление блока

Перед редактированием модели откройте ее с помощью метода open. После редактирования не забудьте сохранить результаты с помощью save.

Для добавления блока используется публичный метод add_block

engee.add_block(lib_block_path, tgt_block_path)
  • Добавляет копию блока из lib_block_path в tgt_block_path.

  • lib_block_path — полный путь до блока в модели или библиотеке. Путь lib_block_path можно увидеть при двойном нажатии по свободной области рабочего пространства и набрав имя нужного блока:

    block path add method

  • tgt_block_path — путь до системы и ожидаемое имя. Если имя не указано, то задается автоматически.

  • Если путь до существующего блока модели совпадает с путем до блока из библиотеки из-за совпадения имен модели и ее систем с названиями разделов библиотеки, выбирается блок из модели.

  • Если в tgt_block_path последним содержится название будущего блока, пробует добавить блок под этим названием.

  • Если tgt_path не содержит название будущего блока, то название формируется по образцу <block_type>-<index>, например Sin-1, где индекс является количеством блоков данного типа после добавления, а Sin — это block_type блока.

  • Добавляет в подсистему дополнительный порт при добавлении блок-порта, например, Inport.

Добавленные блоки не будут показаны сразу. Для отображения блоков необходимо переоткрыть модель (предварительно сохранив ее), переключиться между моделями или перезагрузить страницу.
Пример
engee.add_block("Basic/Mathematics/Add", "newmodel_1/")

engee.add_block("Basic/Mathematics/Complex To Real-Imag", "newmodel_1/Test_name") # добавит блок из библиотеки в систему и присвоит ему имя Test_name
Ошибки
  • Если название занято, завершается ошибкой IncorrectBlockNameException.

  • Если путь до блока библиотеки некорректный, то завершается ошибкой InvalidBlockPathException.

  • Если система, в которую добавляется блок не существует или закрыта, то завершается ошибкой SystemIsNotExistException.

Удаление блока

Используется публичный метод delete_block

engee.delete_block(block_path)
  • Удаляет блок по указанному пути.

  • block_path — абсолютный путь до блока в модели по типу "newmodel_1/Sine Wave", где newmodel_1 — имя модели, а Sine Wave — имя блока.

  • Также удаляет все связанные с блоком линии и логируемые порты.

Копирование блока

Использование публичного метода copy_block

engee> engee.copy_block("newmodel_1/Add-3", "newmodel_2/")
engee> # добавить блок из модели `newmodel_1` с именем "Test_name" в модель `nemodel_2`
engee> engee.copy_block("newmodel_1/Custom Block Name", "newmodel_2/Test_name")
  • Добавляет блок из модели newmodel_1 и присваивает ему имя в модели newmodel_2.

  • src_block_path::String — полный путь до блока в системе.

  • tgt_block_path::String — путь до системы и ожидаемое имя. Формат: path/to/system/newblockname (если имя не указано то задается автоматически).

Ошибки
  • IncorrectBlockNameException — некорректное имя для нового блока.

  • InvalidBlockPathException — копируемого блока не существует по указанному пути.

  • SystemIsNotExistException — система, в которую добавляется блок не существует.

Добавление/удаление сигнала

Используются публичные методы add_line и delete_line

# добавляет линии между портами
engee.add_line(src_port, dst_port) = engee.add_line(engee.gcs(), src_port_path, dst_port_path)
engee.add_line(system::String|System, src_port :: String, dst_port :: String)

# удаляет линии между портами
engee.delete_line(src_port, dst_port) = delete_line(gcs(), src_port, dst_port)
engee.delete_line(system, src_port :: String, dst_port :: String)
  • Добавляет/удаляет линию между портами src_port_path и dst_port_path, где src_port — полный путь до выходгого порта блока, tgt_port — полный путь до входного порта блока.

  • Если путь указывает на блок-порт подсистемы, то соединяет/отсоединяет саму подсистему по соответствующему порту.

  • В остальных случаях блоки соответствующих портов должны находиться в одной системе.

  • В качестве названия порта используется его порядковый номер.

Ошибки
  • SourceEdgeIsNotOutputPort — если порт по пути src_port_path не out порт

  • TargetEgdeIsNotInputPort — если порт по пути tgt_port_path не входной порт.

  • TargetEdgeAlreadyConnected — если tgt порт уже соединён.

  • NotAcausalPort — при ненаправленном соединении, если один из портов имеет тип не acausal.

  • LineCannotBeAdded — если некорректный тип порта или направление линии.

Запись/чтение параметров блока и сигнала

Используются публичные методы set_param! и get_param

engee.set_param!(blockPath, paramName => paramValue)
engee.get_param(blockPath, paramName)
engee.get_param(blockPath)
engee.set_param!(blockPath, blockParams)
  • Аналогично get_param и set_param! для параметров модели.

Вы можете получить параметры не только модели, но и конкретного блока, а также менять их с помощью структуры переменных (назовем params), например:

params = engee.get_param("newmodel_1/Terminator") # возвращает все параметры блока Terminator в структуру params
engee.set_param!("newmodel_1/Terminator", params) # присваиваются параметры блоку Terminator из структуры params
Все публичные методы программного управления, доступные в Engee, представлены в статье Публичные методы программного управления.

Примеры

engee.add_block("Basic/Mathematics/Sine Wave", "model_name/Sine Wave-x") # вставляет блок Sine Wave из библиотеки Basic/Sources и присваивает ему имя Sine Wave-x
engee.add_block("Basic/Continuous/Terminator", "model_name/") # вставляет блок Terminator из библиотеки Basic/Receivers и присваивает имя автоматически (например Terminator-1, если блок с именем Terminator уже существует)
engee.delete_block("newmodel_1/Terminator") # удаляет блок и все связанные с блоком линии и логируемые порты
engee.add_line("Sine Wave/1", "Terminator/1")  # устанавливает сигнал между выходным портом №1 у блока Sin Wave и входным портом №1 блока Terminator
engee.delete_line("Sine Wave/1", "Terminator/1") # удаляет сигнал между выходным портом №1 у блока Sin Wave и входным портом №1 блока Terminator
engee.get_param("newmodel_1") # получение параметров моделирования
engee.set_param!("newmodel_1", "fixed_stepsize" => 0.05, "end_time" => 40) # меняем фиксированный размер шага и время окончания симуляции