Программное редактирование моделей
Работа с моделями
Добавление блока
Перед редактированием модели откройте ее с помощью метода 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
можно увидеть при двойном нажатии по свободной области рабочего пространства и набрав имя нужного блока:
-
tgt_block_path
— путь до системы и ожидаемое имя. Если имя не указано, то задается автоматически. -
Если путь до существующего блока модели совпадает с путем до блока из библиотеки из-за совпадения имен модели и ее систем с названиями разделов библиотеки, выбирается блок из модели.
-
Если в
tgt_block_path
последним содержится название будущего блока, пробует добавить блок под этим названием. -
Если
tgt_path
не содержит название будущего блока, то название формируется по образцу<block_type>-<index>
, напримерSin-1
, где индекс является количеством блоков данного типа после добавления, а Sin — это block_type блока. -
Добавляет в подсистему дополнительный порт при добавлении блок-порта, например,
Inport
.
Добавленные блоки не будут показаны сразу. Для отображения блоков необходимо переоткрыть модель (предварительно сохранив ее), переключиться между моделями или перезагрузить страницу. |
Пример
engee.add_block("/Basic/Math Operations/Add", "newmodel_1/")
engee.add_block("/Basic/Math Operations/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.copy_block("newmodel_1/Add-3", "newmodel_2/") # добавить блок из модели `newmodel_1` с именем "Test_name" в модель `nemodel_2`
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/Sources/Sine Wave", "model_name/Sine Wave-x") #вставляет блок Sine Wave из библиотеки Basic/Sources и присваивает ему имя Sine Wave-x
engee.add_block("/Basic/Sinks/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", "StopTime" => 15, "FixedStep" => 0.05) #меняем время окончания симуляции и фиксированный размер шага