Engee 文档

项目管理的公共方法

这里介绍了所有公共的项目管理方法。 工程师. 熟悉这些方法 恩吉。剧本 参考文章 软件脚本管理.

方法 工程师

engee.add_block(lib_block_path::String, tgt_block_path::String)

从库中添加一个块。

参数

  • lib_block_path::String:库中块的完整路径。 路径从 /.

  • tgt_block_path::String:目标系统的路径和新块的预期名称。 如果仅指定了系统名称(例如 "newmodel_1/"),然后块名称将自动生成。 如果指定了块名称的完整路径(例如 "newmodel_1/Sum1"),然后该块将收到指定的名称。

例子

# 在不指定名称的情况下从库中添加块
engee.add_block("/Basic/Math Operations/Add", "newmodel_1/")

# 添加带有名称的块
engee.add_block("/Basic/Math Operations/Add", "newmodel_1/Add_block_new")
engee.add_line(src_path::AbstractString, dst_path::AbstractString)
engee.add_line(system::System, src_path::AbstractString, dst_path::AbstractString)
engee.add_line(system_path::AbstractString, src_path::AbstractString, dst_path::AbstractString)

engee.add_line(src::PortHandle{OUT}, dst::PortHandle{IN})
engee.add_line(src::PortHandle{IN}, dst::PortHandle{OUT})
engee.add_line(src::PortHandle{ACAUSAL}, dst::PortHandle{ACAUSAL})

在块之间添加连接(数据流)。 支持两种端口分配方法:

  • 使用字符串路径 "system_name/block_name/idx""system_name/block_name/port_name";

  • 通过端口描述符(PortHandle),获得,例如,使用 engee.get_ports.

*the__port descriptor(PortHandle)是唯一标识特定块端口的对象 模型内。 它不包含信号值,但作为一个"句柄"与端口的软件操作—​它可以被传输到 engee.add*line,engee.delete*line,engee.get*lines 等功能。

物理建模的特点(非因果)

Engee物理仿真块中,端口是非定向的(acausal). 这将在使用连接时强制执行以下功能:

  • 之间的连接 PortHandle{ACAUSAL} 它不指定数据流的方向,而只是连接两个物理节点。;

  • 一个非定向端口可以有多个连接(多条线路);

  • 块之间的链接由单独的对象表示 Line.

因此,一步一步的方法用于编程分析或模型修改。:

  • 要使用以下方法获取块端口 engee.get_ports;

  • 要获取连接到此端口的线路,请使用 engee.get_lines;

  • 从对象 Line 获取邻近港口(sourcedestination);

  • 使用重新连接 engee.add_line.

参数

字符串选项:

  • system::System:对象类型 System;

  • system_path::AbstractString:系统路径;

  • src_path::AbstractString:相对路径 out (输出)端口或非定向(acausal)块的端口。 录音格式 — "system_name/block_name/idx""system_name/block_name/port_name";

  • dst_path::AbstractString:相对路径 in (输入)端口或非定向(acausal)块的端口。 录音格式 — "system_name/block_name/idx""system_name/block_name/port_name".

带有端口描述符的选项:

  • src::PortHandle{OUT}, dst::PortHandle{IN} -定向源端口和接收器端口的描述符;

  • src::PortHandle{IN}, dst::PortHandle{OUT} -相反的方向(当,根据方案,源是带有输入端口的块时);

  • src::PortHandle{ACAUSAL}, dst::PortHandle{ACAUSAL} -非定向端口的描述符。

例子

线条:

# 连接当前系统中正弦波块的第一输出端口和端接器块的第一输入端口
engee.add_line("Sine Wave/1", "Terminator/1")

# 第一时间第一个数字可以是系统。
系统=engee。政府资讯科技总监()

# 调用相当于上一个
恩吉。add_line(系统,"正弦波-1/1","终结器-1/1")

# 没有,没有。
.add_line("模型","电阻/p","电阻-1/n")```


描述符:

julia-repl engee.addblock("/Basic/Sources/Sine Wave", "newmodel1/Sine Wave") engee.addblock("/Basic/Math Operations/Add", "newmodel1/Addblock") engee.addblock("/Basic/Sinks/Terminator", "newmodel_1/Terminator")

Получаем порты блоков

srcports = engee.getports("newmodel1/Sine Wave") addports = engee.getports("newmodel1/Addblock") dstports = engee.getports("newmodel1/Terminator")

Соединяем выход Sine Wave с первым входом Add_block

engee.addline(srcports.outputs[1], add_ports.inputs[1])

Соединяем выход Add_block с входом Terminator

engee.addline(addports.outputs[1], dst_ports.inputs[1])

在物理建模(`acausal`)一个端口可以有多个连接,所以你不能直接只使用 `source` 或 `destination`. 在这种情况下,沿链端口→线→邻近端口采用一步一步的方法.:
- 我们用这个街区的港口 `engee.get_ports`;
- 我们得到的线或线连接到这个端口使用 `engee.get_lines`;
- 从对象 `Line` 我们得到一个邻近的港口(`line.source` 或 `line.destination`);
- 使用重新连接 `engee.add_line`.

下面是用沿此链执行的连接恢复替换物理块的示例。

julia-repl

我们收到名称为"in"的PID控制器块的输入端口。 这是接收器端口

pidinputport = engee.getports("newmodel1/PID Controller").inputs["in"]

我们得到一个对应于这个端口的连接线

pidinputline = engee.getlines(pidinput_port)

获取此行的源端口

pidsourceport = pidinputline[1].source

我们得到名为"in"的新PID控制器块的输入端口。 这是接收器端口

newpidinputport = engee.getports("newmodel_1/PID Controller New").inputs["in"]

将源端口连接到接收器端口

engee.addline(pidsourceport, newpidinputport)

获取PID控制器的输出端口

pidoutputport = engee.getports("newmodel1/PID Controller").outputs["out"]

我们正在为这个港口准备一条连接线

pidoutputline = engee.getlines(pidoutput_port)

我们得到了这条线路的接收端口

piddestport = pidoutputline[1].destination

删除旧的PID控制器块

engee.deleteblock("newmodel1/PID Controller")

剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪

newpidoutputport=engee。getports("newmodel_1/PID控制器新")。输出["输出"]

剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪/剪

engee接收器端口。addline(newpidoutputport,piddestport)

工作原理。整条换热

(恩吉。gcs())`

engee.addpath(path::Vararg{String})

向系统变量添加一个或多个路径 LOAD_PATH. LOAD_PATH -这是一个系统变量,Engee使用它来查找必要的可执行对象(例如 .engee, .ngscript),以及命令中使用的任何其他路径。

参数

path::Vararg{String}:文件系统中的一个或多个路径。

例子

engee.addpath("/user/models")
# 加载模型
engee.load("model.engee")
engee.arrange_system(system::System)

重建指定模型中块和链接的排列,自动排列元素,以减少线交叉,使模型结构更具可读性。 该功能相当于Engee画布上的上下文菜单命令"排列模型"。 仅对指定的模型执行排序(不递归地更改嵌套子系统)。

参数

system::System:需要执行自动排序的系统(模型)的对象。 你可以用 engee.gcs().

例子

# 组织当前开放模型
engee.arrange_system(engee.gcs())
engee.clear()

清除当前工作区中的所有变量。 clear() 删除存储在变量中的所有数据,以释放内存用于新的计算和数据流。 申报表 nothing.

engee.clear_all()

从当前工作区清除所有变量、函数和定义的模块。 clear_all() 将当前工作区返回到其原始状态。 申报表 nothing.

engee.clearport(portpath::AbstractString)

Удаляет все линии, связанные с переданным портом. При использовании индекса порта вместо имени, порт ищется среди выходных портов блока.

Пример:

engee.clear_port("model/Sine Wave/main_out")
engee.clear_port("model/Terminator/main_in")
engee.close(model_name::String; force::Bool = false)
engee.close(model::Model; force::Bool = false)
engee.close(; force::Bool = false)

使用名称关闭模型 model_name. 当前模型是在模型导航面板中向左打开的模型。 如果未指定模型,则关闭当前模型。 如果未设置当前模型,则不执行任何操作。 如果模型不再存在,它就不会做任何事情。

参数

  • model_name::String:将关闭的模型的名称。

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。

  • force::Bool:默认情况下等于 false. 如果存在未保存的更改且参数等于 false,则以错误退出。 如果等于 true 然后未保存的更改将丢失。

例子

# 从内存中卸载newmodel_1模型
engee.close("newmodel_1")

# 整条换热,而不进行换热。
恩吉。关闭("newmodel_1",force=true)

# 整条换热。
恩吉。关闭("newmodel_1",force=true)
engee.close_all()

关闭所有模型。

例子

# 从内存中卸载所有打开的模型
engee.close_all()
engee.compare_models(model_path_1::String, model_path_2::String)

比较一对模型并返回差异列表。

参数

  • model_path_1::String 到要比较的第一个模型的相对或绝对路径。

  • model_path_2::String 到第二个模型的相对或绝对路径,以便与第一个模型进行比较。

例子

# 绝对路径(指定模型文件的完整路径)
m1 = "/user/modelname_1.engee"

# 相对路径(指定模型文件的相对路径)
m2 = "modelname_2.engee"

# M1和m2的比较
engee.compare_models(m1, m2)
engee.convert_model(model_path::String, out_path::String="")

生成一个。ngscript文件(Engee脚本)使用软件控制命令构建当前模型。

参数

  • model_path::String:格式中源模型的相对或绝对路径 .engee.slx 其中需要转换。

  • out_path::String:保存生成脚本的相对或绝对路径。 如果未指定此参数,则脚本将保存在默认文件夹中(/user)并作为字符串返回。 如果指定了路径 out_path,然后将脚本保存到指定名称的文件中(扩展名可以任意设置,但对于Julia中的后续启动,建议使用。jl)和返回 nothing.

例子

# 获取绝对路径并输出Engee脚本
model_path = "/user/newmodel_1.engee"
engee.convert_model(model_path)

# 获取相对路径并输出Engee脚本
m_abs_path = "newmodel_2.engee"
engee.convert_model(m_abs_path)
engee.copy_block(src_path::AbstractString, dst_path::AbstractString; duplicate::Bool=false)::Nothing

从系统中复制块。

如果 duplicate=truesrc_path 指向块 Inport,然后该函数创建输入端口的副本(Inport Shadow): 重复的输入端口号与原始端口号相同 Inport,并允许您从输入分叉信号,而无需创建新的子系统输入端口。

参数

  • src_path::AbstractString:系统中块的完整路径。

  • dst_path::AbstractString:系统的路径和预期的名称。 录音格式 — path/to/system/new_block_name. 如果未指定名称,则会自动设置该名称。

  • duplicate::Bool:块的重复标志 Inport. 对于其他类型的块,设置标志(duplicate=true)会导致错误: "Duplication not allowed for this block type: only "Inport" blocks can be duplicated".

例子

# 从newmodel_1模型中添加Add-3块,并在newmodel_2模型中自动为其分配名称。
engee.copy_block("newmodel_1/Add-3", "newmodel_2/")

# 将名为Custom Block Name的newmodel_1模型中的块添加到名为Test_name的nemodel_2模型中
engee.copy_block("newmodel_1/Custom Block Name", "newmodel_2/Test_name")
engee.copy_contents(src_path::AbstractString, dst_path::AbstractString)

将一个系统的内容复制到另一个系统。 目标系统必须为空。 禁止递归复制。

参数

  • src_path::AbstractString:复制系统的路径。

  • dst_path::AbstractString:复制到的系统的路径。

例子

# 将内容从newmodel_1根系统复制到newmodel_2根系统
engee.copy_contents("newmodel_1", "newmodel_2")

# 将内容从子系统"newmodel_1/Subsystem"复制到子系统"newmodel_1/Subsystem-1"
engee.copy_contents("newmodel_1/Subsystem", "newmodel_1/Subsystem-1")
ERROR: "newmodel_1/Subsystem-1 must be empty. Use `engee.delete_contents`"
engee.delete_contents("newmodel_1/Subsystem-1")
engee.copy_contents("newmodel_1/Subsystem", "newmodel_1/Subsystem-1")
engee.create(model_name::String)::Model

使用名称创建新模型 model_name 和默认设置。 申报表 Model. 模型成为当前模型。 它的根系成为当前系统。 如果具有该名称的模型已经存在,则失败。 EngeeException.

参数

model_name::String:系统中所需的模型名称。 模型名称不能包含符号 /.

例子

engee.create("NewModel")
Model(
    name: NewModel
    id: 6b59d80d-8b48-419d-83e7-a90660aa1a6a
)
engee.delete_block(block_path::String)

从系统中删除块、所有关联行和可写端口。

参数

block_path::String:块的路径。

例子

# 从系统中删除正弦波块以及所有关联的线和块
engee.delete_block("newmodel_1/Sine Wave")
engee.delete_contents(system_path::String)

删除系统的内容。

参数

system_path::String:内容将被删除的系统路径。

例子

# 从Newmodel_1模型中的子系统-1中删除所有块
engee.delete_contents("newmodel_1/Subsystem-1")
engee.delete_line(src_path::AbstractString, dst_path::AbstractString)
engee.delete_line(system::System, src_path::AbstractString, dst_path::AbstractString)
engee.delete_line(system_path::AbstractString, src_path::AbstractString, dst_path::AbstractString)

engee.delete_line(line::Line)
engee.delete_line(src::PortHandle{OUT},   dst::PortHandle{IN})
engee.delete_line(src::PortHandle{IN},   dst::PortHandle{OUT})
engee.delete_line(src::PortHandle{ACAUSAL}, dst::PortHandle{ACAUSAL})

有三种支持的方法来指定要删除的连接:

  • 按字符串路径到端口("system_name/block_name/idx");

  • 按项目分类 Lineengee.get_lines;

  • 按端口描述符(PortHandle),通过接收 engee.get_ports 或从结构 Line.

Line 描述电路中的单个连接线,特别包含源端口和接收器端口: source::PortHandle, destination::PortHandle.

清除方法 LinePortHandle{ACAUSAL} 也适用于非定向(acausal,物理)连接。

参数

字符串选项:

  • system::Union{AbstractString, System}:系统或对象类型的路径 System;

  • src_path::AbstractString:相对路径 out 块的(输出)端口。 端口名称是其序列号。 录音格式 — "system_name/block_name/idx";

  • dst_path::AbstractString:相对路径 in 块的(输入)端口。 端口名称是其序列号。 录音格式 — "system_name/block_name/idx".

带有对象的选项 Line 和端口描述符:

  • line::Line:返回的line对象 engee.get_lines(...). 包含线路标识符以及源端口和接收端口描述符。;

  • src::PortHandle{OUT}, dst::PortHandle{IN} -定向源端口和接收器端口的描述符;

  • src::PortHandle{IN}, dst::PortHandle{OUT} -相反的方向(当源

被认为是带有输入端口的块);

  • src::PortHandle{ACAUSAL}, dst::PortHandle{ACAUSAL} -非定向端口的描述符。

例子

# 删除Newmodel_1模型中正弦波块的第一个输入端口与终结器块的第一个输出端口之间的连接
engee.delete_line("newmodel_1", "Sine Wave/1", "Terminator/1")
system = engee.gcs()
engee.delete_line(system, "Sine Wave-1/1", "Terminator-1/1")

# 删除而不指定系统。 它默认为当前系统调用。
engee.delete_line("Sine Wave-2/1", "Terminator-2/1")

# 一个使用端口描述符(PortHandle)的例子,假设这些块已经通过engee连接。add_line,如add_line示例中所示
src_ports = engee.get_ports("newmodel_1/Sine Wave")
dst_ports = engee.get_ports("newmodel_1/Terminator")

# 去除第一正弦波输出和第一端接器输入之间的线
engee.delete_line(src_ports.outputs[1], dst_ports.inputs[1])

# 删除连接到块的所有行的示例

# 获取连接到Add_block块的所有行
all_block_lines = engee.get_lines("newmodel_1/Add_block")

# 按行对象删除所有这些行
for ln in all_block_lines
  engee.delete_line(ln)
end

# 带点符号的等效符号
engee.delete_line.(engee.get_lines("newmodel_1/Add_block"))
engee.eval(code::AbstractString)

在模型的当前上下文中执行Julia代码。

参数

code::AbstractString:一行代码供Julia执行。

例子

engee.eval(2 + 3 * 5)
17

engee.eval(sin(π/2))
1.0
engee.find_system(path::String; depth::Int=typemax(Int), blockparams::Vector{<:Pair{<:AbstractString,<:Any}}=Vector{Pair{String, Any}}())

沿着指定路径搜索实体(模型/系统/块)。 返回找到的实体的路径。

参数

  • path::String:要搜索的实体的路径。

  • depth::Int=typemax(Int):最大搜索深度(含)。 要无限制地搜索,请使用 typemax(Int). 枚举从0开始。 默认情况下 typemax(Int).

  • blockparams::Vector:只返回具有指定参数的块。

例子

# 组成名为newmodel_1的模型的实体列表(子系统,块)
engee.find_system("newmodel_1")

# 未进入子系统的newmodel_1模型的实体列表
engee.find_system("newmodel_1"; depth=0)

# Newmodel_1模型中值字段等于1.0的所有块的列表
engee.find_system("newmodel_1"; blockparams=["Value"=>1.0])
engee.find_system(model::Model; depth::Int=typemax(Int), blockparams::Vector{<:Pair{<:AbstractString,<:Any}}=Vector{Pair{String, Any}}())

搜索作为类型对象传递的指定模型中的实体(模型/系统/块 Model. 返回找到的实体的路径。

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。 搜索将在此模型中进行。

  • depth::Int=typemax(Int):最大搜索深度(含)。 要无限制地搜索,请使用 typemax(Int). 枚举从0开始。 默认情况下 typemax(Int).

  • blockparams::Vector:只返回具有指定参数的块。

例子

# 构成模型的实体列表(子系统、块)
engee.find_system(model)

# 不进入子系统的模型实体列表
engee.find_system(model; depth=0)

# 模型中值字段等于1.0的所有块的列表
engee.find_system(model; blockparams=["Value"=>1.0])
engee.find_system(system::System; depth::Int=typemax(Int), blockparams::Vector{<:Pair{<:AbstractString,<:Any}}=Vector{Pair{String, Any}}())

搜索指定系统中的实体(模型/系统/块),作为类型的对象传递 System. 返回找到的实体的路径。

参数

  • system::System:将进行搜索的系统。

  • depth::Int=typemax(Int):最大搜索深度(含)。 要无限制地搜索,请使用 typemax(Int). 枚举从0开始。 默认情况下 typemax(Int).

  • blockparams::Vector:只返回具有指定参数的块。

例子

# 组成系统的实体列表(子系统,块)
engee.find_system(system)

# 不输入子系统的系统实体列表
engee.find_system(system; depth=0)

# 系统系统中值字段等于1.0的所有块的列表
engee.find_system(system; blockparams=["Value"=>1.0])
engee.find_system(; depth::Int=typemax(Int), blockparams::Vector{<:Pair{<:AbstractString,<:Any}}=Vector{Pair{String, Any}}())

在所有可用模型中搜索实体(模型/系统/块)。 返回找到的实体的路径。

参数

  • depth::Int=typemax(Int):最大搜索深度(含)。 要无限制地搜索,请使用 typemax(Int). 枚举从0开始。 默认情况下 typemax(Int).

  • blockparams::Vector:只返回具有指定参数的块。

例子

# 所有实体列表
engee.find_system()

# 不进入子系统的模型实体列表
engee.find_system(; depth=0)

# 值字段等于1.0的所有块的列表
engee.find_system(; blockparams=["Value"=>1.0])
engee.get_current_block()::String
engee.gcb()::String

返回当前块的路径。 如果没有当前块或模型,则输出错误。 Current block is not set.

例子

# 正弦波块在画布上突出显示
engee.gcb()
"newmodel_1/Sine Wave"
engee.get_current_model()::Model
engee.gcm()::Model

返回当前模型。 如果没有当前模型,则输出错误。 No opened model.

例子

engee.get_current_model()
Model(
    name: ssc_bridge_rectifier_modified
    id: c390ed60-d2c4-4e17-85df-07129aca8ba4
)
engee.get_current_system()::System
engee.gcs()::System

返回当前系统。 如果没有当前模型,则输出错误。 No opened model.

例子

engee.gcs()
System(
  name: root,
  id: 039b7ddd-f836-4b0c-bb8d-8232344b22fb,
  path: newmodel_1
)
engee.generate_code(path/to/modelname.engee::String, path/to/output_dir::String; subsystem_name=subsystem_path::String, subsystem_id=subsystem_id::String, target::String, jl_path::String)

为模型和/或子系统生成指定语言的代码。 支持使用模板自定义输出代码(包括函数 main).

模型

  • 生成是为整个模型执行的,由模型文件的绝对或相对路径设置。 .engee.

  • 可以通过参数指定目标代码生成 target,以及通过自定义模板的路径 template_path.

参数

  • model_path::String:生成代码的模型的绝对或相对路径。 模型对象(类型对象)可以用作参数。 model 函数接收 engee.gcm).

  • output_dir::String:将保存生成代码的目录的绝对或相对路径。 如果目录 output_dir 如果它不存在,它将自动创建。

  • target::String:指定代码生成的语言。 支持的语言 — Си (默认情况下)或 Verilog.

  • template_path::String:通往 .jl-模板文件(例如,函数模板 main).

例子

# 生成模型的C代码
engee.generate_code("newmodel_1.engee", "newmodel_1/codegen_output")

# Verilog代码生成,将创建newmodel_1文件。v与Verilog代码
engee.generate_code("newmodel_1.engee", "newmodel_1/verilog_output", target="verilog")

# 使用包含main函数的模板生成代码
engee.generate_code("codegen_model.engee", "codegen_dir", template_path="/user/main_template.jl")

# 获取当前开放模型并从中生成代码
m = engee.gcm()
engee.generate_code(m, "/user/newmodel_1/codegen_output")

用于子系统

  • 仅对名称指定的原子子系统执行生成(subsystem_name)或通过ID(subsystem_id).

  • 其余参数与完整模型的生成类似。

参数

  • subsystem_name::String:生成代码的原子子系统的完整路径。

  • subsystem_id::String:生成代码的原子子系统的唯一标识符(备选 subsystem_name).

  • target::String:指定代码生成的语言。 支持的语言 — Си (默认情况下)或 Verilog.

例子

# 按名称为子系统生成C代码
engee.generate_code("newmodel_1.engee", "newmodel_1/Subsystem", subsystem_name="Subsystem")

# 根据原子子系统的id生成代码
engee.generate_code("/user/newmodel_1.engee", "/user/newmodel_1/Subsystem"; subsystem_id = "88275e0b-a049-4bb5-b8c7-057badd1b536")

# Verilog全国免费为您提供新的服务。民族议会
恩吉。generate_code("newmodel_1.engee","newmodel_1/verilog_pid",subsystem_name="SubSystem",target="verilog")
engee.generate_code(path/to/modelname.engee::String, path/to/output_dir::String; subsystem_name=subsystem_path::String, subsystem_id=subsystem_id::String, target::String, jl_path::String)

为模型和/或子系统生成指定语言的代码。 支持使用模板自定义输出代码(包括函数 main).

模型

  • 生成是为整个模型执行的,由模型文件的绝对或相对路径设置。 .engee.

  • 可以通过参数指定目标代码生成 target,以及通过自定义模板的路径 template_path.

参数

  • model_path::String:生成代码的模型的绝对或相对路径。 模型对象(类型的对象)可以用作参数。 model 函数接收 engee.gcm).

  • output_dir::String:将保存生成代码的目录的绝对或相对路径。 如果目录 output_dir 如果它不存在,它将自动创建。

  • target::String:指定代码生成的语言。 支持的语言 — Си (默认情况下)或 Verilog.

  • template_path::String:通往 .jl-模板文件(例如,函数模板 main).

例子

# 生成模型的C代码
engee.generate_code("newmodel_1.engee", "newmodel_1/codegen_output")

# Verilog代码生成,将创建newmodel_1文件。v与Verilog代码
engee.generate_code("newmodel_1.engee", "newmodel_1/verilog_output", target="verilog")

# 使用包含main函数的模板生成代码
engee.generate_code("codegen_model.engee", "codegen_dir", template_path="/user/main_template.jl")

# 获取当前开放模型并从中生成代码
m = engee.gcm()
engee.generate_code(m, "/user/newmodel_1/codegen_output")

用于子系统

  • 仅对名称指定的原子子系统执行生成(subsystem_name)或通过ID(subsystem_id).

  • 其余参数与完整模型的生成类似。

参数

  • subsystem_name::String:生成代码的原子子系统的完整路径。

  • subsystem_id::String:生成代码的原子子系统的唯一标识符(备选 subsystem_name).

  • target::String:指定代码生成的语言。 支持的语言 — Си (默认情况下)或 Verilog.

例子

# 按名称为子系统生成C代码
engee.generate_code("newmodel_1.engee", "newmodel_1/Subsystem", subsystem_name="Subsystem")

# 根据原子子系统的id生成代码
engee.generate_code("/user/newmodel_1.engee", "/user/newmodel_1/Subsystem"; subsystem_id = "88275e0b-a049-4bb5-b8c7-057badd1b536")

# Verilog代码生成对于子系统,将创建newmodel_1文件。v与Verilog子系统代码
engee.generate_code("newmodel_1.engee", "newmodel_1/verilog_pid", subsystem_name="SubSystem", target="verilog")
engee.get_all_models(; sorted=true)::Vector{Model}

检索当前会话中打开的所有模型的列表,格式为 Vector{Model}. 如果参数 sorted=true,然后返回按名称排序的模型列表。

参数

sorted::Bool:默认情况下 true. 确定模型列表是否按名称排序。

例子

# 包含所有打开模型列表的列表
models_list = engee.get_all_models()

# 包含所有打开模型名称的列表
model_names = [m.name for m in engee.get_all_models()]
engee.get_current_block()::String
engee.gcb()::String

返回当前块的路径。 如果没有当前块或模型,则输出错误。 Current block is not set.

例子

# 正弦波块在画布上突出显示
engee.gcb()
"newmodel_1/Sine Wave"
engee.get_current_model()::Model
engee.gcm()::Model

返回当前模型。 如果没有当前模型,则输出错误。 No opened model.

例子

engee.get_current_model()
Model(
    name: ssc_bridge_rectifier_modified
    id: c390ed60-d2c4-4e17-85df-07129aca8ba4
)
engee.get_current_system()::System
engee.gcs()::System

返回当前系统。 如果没有当前模型,则输出错误。 No opened model.

例子

engee.gcs()
System(
  name: root,
  id: 039b7ddd-f836-4b0c-bb8d-8232344b22fb,
  path: newmodel_1
)
engee.get_lines(block_path::AbstractString)::Vector{Line}
engee.get_lines(block_path::AbstractString, causality::PortCausality)::Vector{Line}
engee.get_lines(port::PortHandle)::Vector{Line}

返回连接到块或特定端口的信号线。 申报表 Vector{Line} -对象的向量 Line,其中每一个描述两个端口之间的一个连接。

Line(线)是描述图中一个连接的对象:

  • id::UUID -线路ID;

  • source::PortHandle -源端口;

  • destination::PortHandle -接收端口。

一个对象 Line 例如,您可以转移到 engee.delete_line(line::Line) 删除连接。

功能 engee.get_lines(...) 总是返回行的向量(Vector{Line}),即使只有一行。 这对于非定向(acausal)物理模拟端口,其中一个端口可以有多个连接。

参数

  • block_path::AbstractString:模型层次结构中块的路径。 录音格式 — "model_name/block_name""model_name/system_name/block_name".

  • causality::PortCausality:接收线路的端口类型。 支持枚举值 PortCausality:

  • IN -连接到单元输入端口的线路;

  • OUT -连接到输出端口的线路;

  • ACAUSAL -连接到非定向端口的线路。

  • port::PortHandle:块端口描述符(PortHandle{IN}, PortHandle{OUT}PortHandle{ACAUSAL}),例如经由 engee.get_ports.

例子

engee.add_block("/Basic/Sources/Sine Wave",  "newmodel_1/Sine Wave")
engee.add_block("/Basic/Sinks/Terminator",  "newmodel_1/Terminator")
engee.add_block("/Basic/Math Operations/Add", "newmodel_1/Add_block")

# 连接正弦波->Add_block->终结器
src_ports = engee.get_ports("newmodel_1/Sine Wave")
add_ports = engee.get_ports("newmodel_1/Add_block")
dst_ports = engee.get_ports("newmodel_1/Terminator")

engee.add_line(src_ports.outputs[1], add_ports.inputs[1])
engee.add_line(add_ports.outputs[1], dst_ports.inputs[1])

# 连接到Add_block块的所有行
all_add_lines = engee.get_lines("newmodel_1/Add_block")

# 只有线路到正弦波单元的输出端口
sine_out_lines = engee.get_lines("newmodel_1/Sine Wave", OUT)

# 连接到特定端口的线路
first_add_input = add_ports.inputs[1]
lines_to_add_in1 = engee.get_lines(first_add_input)

# 删除连接到Add_block块的所有行
engee.delete_line.(engee.get_lines("newmodel_1/Add_block"))

通过线路获取邻近端口(端口→线路→端口):

some_port = add_ports.inputs[1]

lines = engee.get_lines(some_port)

source_ports = getproperty.(lines, :source)
destination_ports = getproperty.(lines, :destination)
engee.get_logs(model::Model)
engee.get_logs()

检索与模型相关的日志消息。 如果模型未打开,则输出错误。 No opened model. 返回包含消息的数组。

参数

m::Model:为其执行操作的默认模型是当前模型。

例子

engee.get_logs()
4-element Vector{Dict{Symbol, String}}:
 Dict(:datetime => "2025-10-27T20:18:38.465684+00:00", :type => "INFO", :content => "Подготовка симуляции завершена за 5.8178 с.")
 Dict(:datetime => "2025-10-27T20:18:39.412789+00:00", :type => "INFO", :content => "Компиляция модели завершена за 1.833 c.")
 Dict(:datetime => "2025-10-27T20:18:39.412896+00:00", :type => "INFO", :content => "Инициализация модели завершена за 0.0903 c.")
 Dict(:datetime => "2025-10-27T20:18:39.842869+00:00", :type => "INFO", :content => "Симуляция модели завершена за 0.764 c.")
engee.get_param(model::Model)
engee.get_param(path::String, param::Union{Symbol, String})::Any
engee.get_param(path::String, param::Union{Symbol, String})::Any
engee.get_param(block::Block)
engee.get_param(block::Block, param::Union{Symbol, String})::Any

模型

  • 如果指定了模型名称,但未指定参数名称,则将所选模型的模拟设置作为字典返回。

  • 如果指定了参数名称,则返回参数值。

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。 参数将从该模型中提取。

  • path::String:如果使用路径而不是模型对象,则指向模型的字符串路径。

  • param::Union{Symbol, String}:要提取的参数的名称。 它可以是字符串或字符。

对于块

  • 在块的路上,它返回参数值(如果指定)或带有参数的字典。

  • 如果指定了参数名称,则返回参数值。

参数

  • block::Block:提取参数的块的对象。

  • path::String:如果使用路径而不是块对象,则指向块的字符串路径。

  • param::Union{Symbol, String}:要提取的块参数的名称。 它可以是字符串或字符。

例子

# 获取所有模型参数的字典
m = engee.gcm()
params = engee.get_param(m)
engee.get_ports(block_path::AbstractString)::BlockPorts

返回结构 BlockPorts,包含指定块的端口描述符。

端口描述符是唯一标识模型内特定块端口的特殊对象(PortHandle)。 它包含使用端口的所有必要信息:它属于哪个块,它的类型(输入,输出, acausal)和块内部的索引。

描述符不是信号值,而是用作指向可传递给其他函数的端口的指针,例如

  • engee.add_line(src::PortHandle, dst::PortHandle);

  • engee.delete_line(src::PortHandle, dst::PortHandle);

  • engee.get_lines(port::PortHandle).

所以, PortHandle --这是一个"句柄",用于在Engee模型中使用端口的软件操作。

参数

block_path::AbstractString:模型层次结构中块的路径。 录音格式 — "model_name/system_name/block_name""model_name/block_name" 为根系统中的一个块。

返回值

BlockPorts:具有三个端口字典的结构:

  • inputs::IntStringDict{PortHandle{IN}} -输入端口;

  • outputs::IntStringDict{PortHandle{OUT}} -输出端口;

  • acausal::IntStringDict{PortHandle{ACAUSAL}} -非定向端口。

端口按索引(ports.outputs[1]),并按端口名称(ports.outputs["main_out"]).

物理建模

对于物理建模块,在字典中找到非定向端口 ports.acausal. 这些端口的名称取决于特定的块(例如 "p", "n", "pin"). 要找出可用的端口名称,请使用 collect(keys(ports.acausal)).

例子

engee.add_block("/Basic/Sources/Sine Wave",   "newmodel_1/Sine Wave")
engee.add_block("/Basic/Sinks/Terminator",    "newmodel_1/Terminator")
engee.add_block("/Basic/Math Operations/Add",  "newmodel_1/Add_block")

# 在newmodel_1模型中获取块端口
src_ports = engee.get_ports("newmodel_1/Sine Wave")
dst_ports = engee.get_ports("newmodel_1/Terminator")

# 索引访问
first_src_out = src_ports.outputs[1]
first_dst_in = dst_ports.inputs[1]

# Add_block块的端口也可由索引使用
add_ports = engee.get_ports("newmodel_1/Add_block")

sum_in1 = add_ports.inputs[1]
sum_in2 = add_ports.inputs[2]
sum_out = add_ports.outputs[1]

# 使用命名端口获取块端口(端口必须预先命名)
add_ports = engee.get_ports("newmodel_1/Add_block")

sum_in1 = add_ports.inputs["in1"]
sum_in2 = add_ports.inputs["in2"]
sum_out = add_ports.outputs["out"]

# 结论
# CommandControlTypes。PortHandle{CommandControlTypes.出}(基。UUID("b99ea18d-6ffa-4366-bc4f-43ea5438c530"),碱基。UUID("746c1521-0c13-465e-8d26-e4d7f8729e52"),基。UUID("e23e6f8a-0811-4f91-a597-707c501be315"),基。UUID("e72aa3ab-7a60-4c4b-a8f1-f2bca8985747"),1)

获取物理块的非定向端口:

r_ports = engee.get_ports("model/Resistor")

# 非因果港口名称列表
collect(keys(r_ports.acausal))

p = r_ports.acausal["p"]
n = r_ports.acausal["n"]
engee.get_results(model_name::String)
engee.get_results(model::Model)
engee.get_results()

以字典的形式返回模型的最后一次模拟的结果 Dict{String, DataFrame},其中键是被监视端口的名称。 如果模型未打开,则输出错误。 NoModelOpenedException. 如果仿真未运行,则输出错误。 ModelIsNotRunningException.

参数

model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。 返回上次仿真结果的操作将相对于此模型执行。

例子

m = engee.load("start/examples/powersystems/models/power_line_apv.engee")
results1 = engee.run(m);
results2 = engee.get_results(m)
Dict{String, DataFrame} with 6 entries:
 "Va" => 40001×2 DataFrame…
 "Ia" => 40001×2 DataFrame…
 "Ib" => 40001×2 DataFrame…
 "Ic" => 40001×2 DataFrame…
 "Vc" => 40001×2 DataFrame…
 "Vb" => 40001×2 DataFrame…
results1 == results2
true
engee.get_status()::SimulationStatus
engee.get_status(model_name::String)::SimulationStatus
engee.get_status(model::Model)::SimulationStatus

将模拟状态作为类型的对象返回 SimulationStatus. 返回其中一个模拟状态。:

  • NOT_READY;

  • READY;

  • BUILDING;

  • RUNNING;

  • PAUSED;

  • STARTED;

  • ERROR;

  • STOPPED;

  • DONE.

参数

  • model_name::String:要获取状态的模型的名称。

  • model::Model:类型的模型对象 Model,为此,您需要获得状态。

例子

engee> engee.get_status()
READY
engee.info(info_message::String)

将信息消息传送到模型诊断窗口。 该函数仅在块回调(包括屏蔽回调)内调用。 在消息中,您可以通过以下方式引用工作区(在变量窗口中)中的参数名称 $имя_параметра.

参数

info_message::String:传输的信息消息。

例子

**不参考工作区设置的示例**

engee.info("Модель успешно инициализирована!")

**诊断窗口中的消息:**

**模型已成功初始化!**

**带有指向工作区设置的链接的示例**

engee.info ("模型已使用参数$Kp和$Ki成功初始化!")

**诊断窗口中的消息:**

**模型已成功初始化参数1.4和1.8!**

<a target='_blank' href='https://github.com/JuliaLang/julia/blob/760b2e5b7396f9cc0da5efce0cadd5d1974c4069/base/#L0-L23' class='documenter-source'>source</a><br>

<a id='engee.is_dirty-Tuple{CommandControlTypes.Model}' href='engee.is_dirty-Tuple{CommandControlTypes.Model}'></a> engee.is_dirtyMethod.

engee.is_dirty(model::Model)::Bool
engee.is_dirty(model_name::String)::Bool

检查是否存在未保存的模型更改。 申报表 true 如果有未保存的更改,否则 — false. 如果模型已经关闭,则返回 false. 在最近打开的模型上,它可以返回 true 如果模型是从旧版本文件打开的(模型将在保存时更新)。

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定由当前模型选择。

  • model_path::String:模型的路径。

例子

# 检查当前模型
model = engee.gcm()
engee.is_dirty(model)

# 按模型名称检查
engee.is_dirty("newmodel_1")
engee.load(file_path::String; name::Maybe{String}=nothing, force::Bool = false)::Model

从具有扩展名的文件加载模型 .engee,位于 file_path. 申报表 Model. 模型成为当前模型。 它的根系成为当前系统。

功能

  • 如果具有相同名称的模型已经存在并且参数等于 true,然后重新启动它,如果等于,所有以前未保存的更改将丢失 false,则抛出异常。 默认情况下,它等于 false.

  • 如果在参数中指定了模型,则可以使用不同的名称加载模型 name. 如果省略该参数,则会保留保存在文件中的模型名称。

  • 如果文件具有不同的扩展名或不存在,则会引发异常。

参数

  • file_path::String:扩展名的模型文件的绝对或相对路径 .engee.

  • name::Maybe{String}:上传模型的新名称。 如果未指定,则使用文件中的名称。

  • force::Bool:强制下载标志。 默认情况下,它等于 false. 如果等于 true,然后下载将执行,如果该文件已经以前上传。

例子

engee.load("NewModel.engee"; force = true)
Model(
    name: NewModel
    id: 6b59d80d-8b48-419d-83e7-a90660aa1a6a
)
engee.log(message::String)

将消息写入事件日志。 该函数仅在块回调(包括屏蔽回调)内调用。 在消息中,您可以通过以下方式引用工作区(在变量窗口中)中的参数名称 $имя_параметра.

参数

message::String:要写入日志的文本消息。

例子

engee.log("Условие выполнено за $time" секунд)
Условие выполнено за 6.7538 секунд
engee.model(model_name::String, phase::Symbol)
engee.model(model_name::String,
      t::Union{Float64, Nothing},
      x::Union{Vector{Float64}, Float64, Nothing},
      u::Union{Vector{Float64}, Float64, Nothing},
      phase::Symbol)

在指定的仿真阶段执行模型计算,而无需运行完整仿真。 它允许您获取有关任务大小,输出和状态导数的服务信息,并用于内部算法(搜索工作点,线性化)。 它不打算用于逐步调试,也不替换公共方法。 engee.run.

仅当名为model_name的模型文件打开时,该函数才起作用。

参数

  • model_name::String:模型的名称。

  • t::Union{Float64, Nothing}:在模拟时间的片刻。 用于相 :outputs:derivatives. 对于相 :sizes 也许吧 nothing 它被忽略了。

  • x::Union{Vector{Float64}, Float64, Nothing} 模型状态的向量或标量。 对于没有状态的模型,可能有 nothing. 对于相 :sizes 被忽略了。

  • u::Union{Vector{Float64}, Float64, Nothing}:模型输入信号的矢量或标量。 如果模型不包含输入端口,则必须是 nothing. 对于相 :sizes 被忽略了。

  • phase::Symbol:建模阶段。 支持值:

    • :sizes 确定仿真任务的大小(状态数、输入/输出和采样率);

    • :outputs:计算指定的模型输出 t, x, u;

    • :derivatives 给定连续状态导数的计算 t, x, u.

返回值

视值而定 phase 函数的行为将改变如下:

  • phase == :sizes -车队回来了:

    • sys -包含有关模型结构的信息的整数向量:

      • sys[1] -连续状态数;

      • sys[2] -离散状态的数量;

      • sys[3] -模型的输出数量;

      • sys[4] -模型输入数量;

      • sys[5] -模型中采样频率(采样时间)的数量。

    • x0 -模型状态的初始值。

    如果模型不包含具有状态的块,则返回 nothing.

  • phase == :outputs -他回来了:

    • y::Union{Vector{Float64}, Float64, Nothing} -模型在指定的输出 t, x, u.

    -如果模型不包含输出端口,则返回 nothing. -矢量元素 y 根据输出块的全名排序。

  • phase == :derivatives -他回来了:

    • dx::Union{Vector{Float64}, Float64, Nothing} -给定连续状态的导数 t, x, u.

    -如果模型不包含连续状态,则返回 nothing. -矢量元素 dx 它们是根据包含状态的块的全名排序的。

限制

该功能支持:

  • 连续模型;

  • 离散模型;

  • 没有包含状态的块的模型;

  • 具有虚拟子系统(Subsystem)的模型;

  • 具有原子子系统的模型;

  • 包括链接模型的模型。

该函数不支持包含以下内容的模型:

  • 有条件可执行的子系统(启用、触发);

  • 具有动作端口块的子系统;

  • 街区 Engee Function;

  • 街区 C Function;

  • 街区 Chart;

  • 街区 Bus Creator, Bus Selector, Bus Assignment;

  • 块的物理建模。

错误

如果违反调用条件,可能会生成错误。:

  • 模型不存在或未打开: The model "model_name" doesn’t exist;

  • 模型中存在未保存的更改: The model "model_name" has unsaved changes;

  • 模型包含不支持的块: The model "model_name" contains unsupported blocks.

例子

# 确定仿真任务的大小和初始状态
sys, x0 = engee.model("model_name", :sizes)

# 计算模型输出
t = 0.0
x = [0.0; 0.0; 0.0]
u = 2.0

y = engee.model("model_name", t, x, u, :outputs)

# 派生状态的计算
t = 0.0
x = [0.0; 1.0; 1.0]
u = 2.0

dx = engee.model("model_name", t, x, u, :derivatives)

# 工作点搜索算法中的使用场景
sys, x0 = engee.model("model_name", :sizes)

dx = engee.model("model_name", t, x, u, :derivatives)
y = engee.model("model_name", t, x, u, :outputs)
engee.open(path::String)::System
engee.open(model::Model)::System
engee.open(system::System)::System

返回开放系统 System. 如果模型或系统不存在,则失败。 EngeeException.

功能

  • 名称在参数中指定 model_name 一个先前打开的模型,然后它成为当前模型。 它的根系成为当前系统。

  • 参数指定现有系统的路径。 system_path,然后包含它的模型成为当前模型,系统本身成为当前系统,显示在可视化编辑器中。 申报表 System. 您也可以直接传递实例而不是路径。 ModelSystem.

参数

  • path::String:模型或系统的路径。

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定由当前模型选择。 默认为当前模型。

  • system::System:对象类型 System.

例子

# 开放模式:
s1 = engee.open("NewModel")
System(root)
engee.gcm(), engee.gcs()
(Model(
    name: NewModel
    id: 6b59d80d-8b48-419d-83e7-a90660aa1a6a
)
, System(
    name: root
    id: 69f5da6f-250d-4fa7-a25f-645bac751aea
)
)
# 开放系统:
engee.open("AnotherModel/Subsystem-1")
System(
    name: root
    id: 69f5da6f-250d-4fa7-a25f-645bac751aea
)
engee.gcm(), engee.gcs()
(Model(
    name: AnotherModel
    id: 6b59d80d-8b48-419d-83e7-a90660aa1a6a
)
, System(
    name: Subsystem-1
    id: 69f5da6f-250d-4fa7-a25f-645bac751aea
)
)
engee.pause()

暂停运行模拟。

engee.rename_model(old_name::AbstractString, new_name::AbstractString)

重命名模型。 将模型名称更改为 old_namenew_name.

参数

  • old_name::AbstractString:模型的当前名称。

  • new_name::AbstractString:模型的新名称。

例子

# 按名称重命名模型
engee.rename_model("OldModel", "NewModel")

# 检查模型是否已重命名
engee.gcm() # 现在它显示了NewModel
engee.reset()

重新启动仿真核心。

例子

engee.reset()
[ Info: Simulation kernel has been reseted.
engee.resume(; verbose::Bool = false)

恢复暂停的模拟。

参数

verbose::Bool = false:启用模拟进度消息的输出。

engee.rmpath(path::String)

从系统变量中删除路径 LOAD_PATH. LOAD_PATH -这是Engee用来查找必要的可执行对象的系统变量(例如 .engee, .ngscript),以及命令中使用的任何其他路径。

参数

path::Vararg{String}:要删除的文件系统中的路径 LOAD_PATH.

例子

engee.addpath("/user/models")

# 加载模型
engee.load("model.engee")
engee.rmpath("/user/models")

# 加载模型将返回错误。
engee.load("model.engee")
engee.run(; verbose::Bool=false)
engee.run(model; verbose::Bool=false) where {model <: Union{Model, System, AbstractString}}

开始执行模型。 如果未指定模型,则启动对当前模型的模拟。 如果模型未打开,则会引发异常。 NoModelOpenedException.

参数

  • verbose:打印执行进度的标志(默认情况下,它等于 false -未显示)。

  • m::Model:相对于其执行操作的模型。 默认为当前模型。

例子

# 启动当前模型
engee.run()

# 使用进度输出启动
engee.run(verbose=true)

# 启动特定模型
m = engee.load("/user/start/examples/power_systems/power_line_apv/power_line_apv.engee")
engee.run(m)

# 在模型路径上启动
engee.run("/user/my_model.engee")

# 异步无尽模拟
m = engee.load("/user/start/examples/controls/PID_controller/pid_controls_tf_stable.engee")
engee.set_param!(m, "end_time" => Inf)
ch = Channel(c -> put!(c, engee.run(m)))
sleep(10)
engee.stop()
take!(ch)
engee.save(model_name::String, file_path::String; force::Bool = false)
engee.save(model::Model, file_path::String; force::Bool = false)

使用名称保存模型 model_name 在路上 file_path 到具有扩展名的文件 .engee. 如有必要,将创建中间目录。 申报表 nothing.

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。

  • model_name::String:系统中所需的模型名称。

  • file_path::String:保存模型的目录。

  • force::Bool:默认情况下等于 false. 如果文件已存在且参数等于 true,然后复盖文件。 如果等于 false,然后以错误结束 FileAlreadyExists.

例子

# 将newmodel_1模型保存到新的newmodel_1。工程师档案
engee.save("newmodel_1", "newmodel_1.engee")

# 将newmodel_1模型保存到newmodel_1。engee文件(复盖文件)
engee.save("newmodel_1", "newmodel_1.engee", force = true)
engee.screenshot(to_print::Union{Model, String, System}, save_path::String; position_mode::String="auto")

将模型/系统的屏幕截图保存到路径上的文件中 save_path. 支持的格式:PNG,SVG。 在其他情况下,会显示错误。 ErrorException("unsuported picture format: <format>"). 定位:"自动","平铺",在其他情况下将应用"自动"。

参数

  • to_print::Union{Model, String, System}:截图将取自的模型的名称。

  • save_path::String:保存截图的路径。

  • position_mode::String :截图的定位。 使用以下模式: "auto" -自动确定最佳区块位置(标准模式); "tiled" -将块排列在网格中,以避免重叠并使结构更具可读性。 任何其他价值被视为 "auto".

例子

engee.screenshot(loaded_model, "/user/saved.png"[; position_mode="tiled"])
engee.set_log(system_path::AbstractString, port_path::AbstractString)
engee.set_log(system::System, port_path::AbstractString)
engee.set_log(port_path::AbstractString)

设置日志记录的端口。

参数

  • system_path::AbstractString:端口所在系统的路径。

  • system::System:端口所在的系统。

  • port_path::AbstractString:端口的相对路径。 如果系统未作为第一个参数提供,则使用默认的开放系统。

例子

engee.set_log("Sine Wave/1")

# 当前系统中正弦波块的端口设置为
工程师。set_log条目("newmodel_1/Subsystem","正弦波/1")

# 新模型_1/Subsystem新系统的终端配置为
系统=engee。政府总部()
恩吉。set_log(系统,"正弦波/1")

# 系统中正弦波块的端口设置为
恩吉。跑()
Dict{String,DataFrames.带有1个条目的DataFrame}:
 "正弦波。1"=>1001×2数据帧…
engee.set_param!(model::Model | model_name::String, param::Pair...)

更新模型的参数。 申报表 nothing. 如果参数不正确,则会发生错误。

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。 将为此模型更新参数。

  • model_name::String:字符串路径或模型名称。

  • param::Pair...:格式中的一个或多个参数 "name" => value. 如果参数具有度量单位,则必须将其值作为字典传递。 Dict("value" => ..., "unit" => ...),在哪里 "value" -数值,以及 "unit" -带有测量单位的字符串(例如 "V", "Hz", "deg", "s" 等等)。

例子

engee.set_param!(
  "my_model",
  "amplitude" => Dict("value" => 5.0, "unit" => "V"),
  "frequency" => Dict("value" => 50.0, "unit" => "Hz")
)

该示例显示了使用测量单位设置参数。

engee.set_param!("model_1", "SolverName" => "ode45", "StopTime" => "10")

# 获取model_1模型的参数
param_1 = engee.get_param("model_1")

# 将参数从model_1复制到model_2
engee.set_param!("model_2", param_1)

该示例显示了如何仅更改块的一个参数(幅度),同时保持所有其他参数不变。 当您需要逐点修改块设置而不冒重置其他参数的风险时,请使用此方法。

# 获取正弦波的电流参数
sine_params = engee.get_param("newmodel_1/Sine Wave")

# 我们创建所有参数的副本,只更改一个
modified_params = copy(sine_params)
modified_params["Amplitude"] = "2.5" # 我们只改变振幅

# 我们应用所有的参数(其余的保持原样)
engee.set_param!("newmodel_1/Sine Wave", pairs(modified_params)...)

仿真设置的结构与特定模型相关联。 您可以通过设置结构字段直接更改模型设置,然后:

params = engee.get_param("newmodel_1")

# Params结构与特定模型相关联,类似于engee。set_param!("newmodel_1","FixedStep"=>"0.05")
params["FixedStep"] = "0.05"
0.05

更改字典中的值 params 它不会自动更新模型参数-它是本地副本。 要使更改生效,您需要使用 engee.set_param!.

params = engee.get_param("newmodel_1")
params["FixedStep"] = "0.05"
params["SolverName"] = "Euler"
engee.set_param!("newmodel_1", "FixedStep" => params["FixedStep"], "SolverName" => params["SolverName"])

每个参数必须表示为由参数名称及其值组成的对(例如 "StartTime" => 0.0). 为参数 param:

仿真参数

  • StartTime::String:模拟的开始时间(Float64)。

  • StopTime::String:模拟的结束时间(Float64)。 要设置无限模拟时间,请传递字符串 "Inf""inf" (engee.set_param!("model_name", "StopTime" => "Inf")).

  • SolverType::String:求解器的类型(fixed-stepvariable-step).

  • SolverName::String:求解器的名称(取决于所选类型)。

固定步长的参数

FixedStep::String:模拟步骤(Float64)。

变量步长的参数

  • AbsTol::String:绝对精度(Float64或’auto')。

  • RelTol::String:相对精度(Float64或’auto')。

  • InitialStep::String:初始步骤(Float64或’auto')。

  • MaxStep::String:最大步长(Float64或’auto')。

  • MinStep::String:最小步数(Float64或’auto')。

  • OutputTimes::String:输出间隔(Float64或’auto')。

  • DenseOutput::Bool:结果密集输出。

engee.stop()

停止运行模拟。

engee.unset_log(system_path::String, port_path::String)
engee.unset_log(system::System, port_path::String)
engee.unset_log(port_path::String)

从记录中删除端口。

参数

  • system_path::String:端口所在的系统。

  • system::System:端口所在的系统。

  • port_path::String:端口的相对路径。 如果系统未作为第一个参数提供,则使用默认的开放系统。

例子

engee.set_log("Sine Wave/1")

# 当前系统中正弦波块的端口设置为写
engee.run()
Dict{String, DataFrames.DataFrame} with 1 entry:
 "Sine Wave.1" => 1001×2 DataFrame…

# 我们运行了模拟,得到了结果
engee.unset_log("Sine Wave/1")

# 当前系统中正弦波块的端口已从记录中删除
engee.run()
Dict{String, DataFrames.DataFrame}()
engee.update_params()
engee.update_params(model::Model)
engee.update_params(model_name::String)

通过从工作区重新计算正在运行的模拟的当前值来更新参数。

该功能允许您将工作区中的参数更改动态应用于已经运行的模拟,而无需停止并重新启动它。 如果没有工作模拟,那么函数什么也不做。

它可以将模型的名称或应为其应用参数更新的模型的对象作为可选参数。 此功能相当于在仿真过程中单击"编译模型"按钮。

参数

  • model::Model:可以使用函数加载到内存中的模型对象 engee.gcm. 此模型可以在工作区中处于活动状态,但不一定在GUI中打开。

  • model_name::String:需要重新计算参数的模型的名称。

例子

# 更新当前仿真中所有块的参数
engee.update_params()

# 更新指定模型的参数
model = engee.gcm()
engee.update_params(model)

# 按名称更新模型参数
engee.update_params("newmodel_1")
engee.version()

返回Engee的简短版本。

例子

engee.version()
"25.11.2"
engee.warning(warning_message::String)

向"模型诊断"窗口发送警告消息。 该函数仅在块回调(包括屏蔽回调)内调用。 在消息中,您可以通过以下方式引用工作区(在变量窗口中)中的参数名称 $имя_параметра.

参数

warning_message::String:传输的消息是警告。

例子

# 不参考工作区设置的示例
engee.warning("Параметры округлены, результаты могут быть неточными!")

# 诊断窗口中的消息:
# 参数四舍五入,结果可能不准确!

# 带有指向工作区设置的链接的示例
engee.warning("Параметры округлены до $Nd и $Ns, результаты могут быть неточными!")

# 诊断窗口中的消息:
# 参数四舍五入为1.7和1.3,结果可能不准确!

有限状态机方法

engee.sm.add_data(chart_path, scope, name; value, idx)::Nothing

将变量或事件添加到图表块(状态机)。

参数

  • chart_path::String:图表块的路径。

  • scope::Symbol:事件/数据的类型。 可以取值: :input

    :output

    :local

    :event.

  • name::String:变量的名称。

  • value::Any:变量的值。 默认情况下丢失。

  • idx::Int:端口的序列号。 与类型变量相关 :input:output.

engee.sm.add_junction(path; type)::Tuple{UUID, String, String}

在图表块(状态机)内创建一个节点和一个内存节点。 嵌套的程度由参数决定 path. 申报表 Tuple 包含 UUID 节点、节点类型及其路径。

参数

  • path::String:状态的路径或新节点添加到的图表块的路径。

  • type::String:节点类型: "history" (对于内存节点)

    nothing.

例子

# 在图表中创建常规节点
junction_id, junction_type, junction_path = engee.sm.add_junction("newmodel_1/Chart")

# 创建内存节点
junction_id, junction_type, junction_path = engee.sm.add_junction(
  "newmodel_1/Chart",
  type="history"
engee.sm.add_state(path, name; content)::Tuple{UUID, String, String}

在图表块(状态机)内创建状态。 嵌套的程度由参数决定 path. 申报表 Tuple 包含 UUID 状态、状态的名称及其路径。

参数

  • path::String:指向父状态或要向其添加新状态的图表块的路径。

  • name::String:新状态的名称。

  • content::String:整个状态代码,代码可能包含以下部分:

  • entry:该部分的代码 entry,在过渡到状态的时刻执行;

  • during:该部分的代码 during,在状态活动的时刻执行;

  • exit:该部分的代码 exit,在退出状态的时刻执行。

例子

# 在图表中创建简单状态
state_id, state_name, state_path = engee.sm.add_state("newmodel_1/Chart", "State1")
(Base.UUID("a511fb4d-44cc-45dc-bfb0-74f6f9791239"), "State1", "newmodel_1/Chart/State1")

# 使用代码创建状态
state_id, state_name, state_path = engee.sm.add_state(
   "newmodel_1/Chart",
   "ActiveState",
   content="""
   entry:
     disp('Вход в активное состояние');
   during:
     counter = counter + 1;
   exit:
     disp('Выход из активного состояния');
   """
)
(Base.UUID("6c8d02d4-da4a-4393-9458-ac381a627520"), "ActiveState", "newmodel_1/Chart/ActiveState")
engee.sm.add_transition(chart_path, source, destination)::Tuple{UUID, String}

在图表块(状态机)内创建转换。 申报表 Tuple 包含 UUID 过渡和它所包含的系统的路径。

参数

  • chart_path::String:图表块的路径。

  • source::Maybe{String}:源对象状态的路径。

  • destination_id::UUID:目标状态/节点的UUID。

  • trigger::Maybe{String}:代码执行的触发器。

  • action::Maybe{String}:满足条件时执行的代码 condition.

  • condition::Maybe{String}:代码执行的条件。

  • content::Maybe{String}:整个转换代码(包括条件-条件,触发器,动作)。

  • origin::Maybe{String}:过渡起始点的默认位置(起始点是属于任何状态还是全局状态)。