Engee 文档

工程模型架构的实际工作

页面进行中。

文章中描述了*Engee*中的模型架构构建理论 恩吉的示范建筑. 我们建议您在开始研究当前文章之前先阅读它。

子系统和子模型用于对块进行分组。 子系统可以被视为函数,子模型可以被视为插件文件。 在*Engee*它们实现如下:

子系统的类型 子模型 子系统行为实现的其他块

经典作品

Subsystem classic subsystem

Model (子模型)

Chart

由条件触发

激活子系统 enabled subsystem

触发子系统 triggered subsystem

触发和激活子系统 triggered enabled subsystem

可重置子系统 resettable subsystem

Function-Call(函数调用) function call subsystem

控制逻辑

开始!

多重执行(计算周期)

对于每个

对于迭代器

要查看各种子系统的实现示例,请转到 链接
*Engee*的任何子系统都可以使用掩码进行配置(有关更多信息,请参阅 英国面具).

经典子系统

经典子系统 classic subsystem —这是一个街区 Subsystem,用于在没有附加条件或需要控制外部信号的情况下将模型划分为模块。

何时使用经典子系统:

  • 通过将大型模型分解为更小的模块来简化大型模型;

  • 提高模型的结构化和可读性;

  • 在模型之间传输现成的模块(复制子系统)。

了解有关经典子系统的更多信息

Subsystem 它包含模型或系统内的块子集,可以是非虚拟或虚拟子系统。:

  • 非虚拟子系统作为单个单元运行,并且可以配置为仅在某些事件下运行。

  • 虚拟子系统不作为单个单元运行,也不依赖于事件。 这样的子系统有助于在不影响其操作的情况下使模型更易于理解。

要将虚拟子系统切换到非虚拟子系统,请将*Treat as atomic unit*参数设置为"true"。

经典子系统具有以下特点:

  • 它不是托管子系统;

  • 允许您创建模型的层次结构,其中一个子系统可以包含另一个子系统;

  • 它不能保存为单独的文件或子系统。 要将子系统保存为单独的模型,使用该块 Model (子模型);

  • 它不会影响模型的功能和逻辑。

如何使用经典子系统:

  • 添加块 Subsystem 到画布并将所需的块添加到子系统;

  • 使用键盘快捷键将块组合到子系统中 Shift+LKM 并选择 子系统 :

classic subsystem cn

由条件触发

激活的子系统

可激活子系统 enabled subsystem —这是一种块 Subsystem,其执行由外部信号控制。 激活的子系统在每个主要时间步长执行一次,只要控制信号具有正值。

何时使用激活的子系统:

  • 来执行依赖于外部条件或信号的操作。

  • 实现复杂的控制逻辑,其中只有在满足某些条件时才需要执行模型。

详细了解正在激活的子系统

激活的子系统具有以下功能:

  • 它是一个托管子系统;

  • Enable 添加外部信号以控制子系统执行;

  • 控制信号可以是标量或矢量:

    • 如果标量值大于零,则子系统执行;

    • 如果向量值中的至少一个大于零,则子系统执行;

  • 如果控制信号在较小的时间步长期间过零,则子系统直到下一个主要时间步长才打开或关闭。

如何使用激活的子系统:

  • 添加块 Subsystem 到画布并添加一个块 Enable 入子系统。 如果 Enable 在块引用的模型的根级别使用 Model,那么你需要做到以下几点:

    • 对于多速模型,将求解器设置为单任务模式。

    • 对于具有固定步长的模型,模型中至少有一个块必须以给定的固定步长速度运行。

  • 使用键盘快捷键将必要的块组合到子系统中 Shift+LKM 并选择 可激活子系统 :

    enabled subsystem 1

    如果使用组合键组合到激活的子系统中,则块 Enable 它将自动添加。

触发子系统

触发子系统 triggered subsystem —这是一种块 Subsystem,其执行由外部触发信号发起。 当控制信号的值以指定的方式改变时,触发的子系统将在每个步骤执行一次。

了解有关触发子系统的更多信息

触发子系统具有以下功能:

  • 它是一个托管子系统;

  • Trigger 添加外部信号以控制子系统执行;

  • 与在控制信号的正值下运行的被激活的子系统不同,被触发的子系统将其输出参数保持在触发器之间的最后一个值。;

  • 子系统内离散块的状态存储在触发器之间。

何时使用触发的子系统:

  • 执行应由某些事件触发的操作;

  • 来实现其中必须执行某些操作以响应中断或其他异步事件的系统。;

  • 以实现必须以指定频率执行的任务,由外部触发信号确定。

如何使用触发子系统:

  • 添加块 Subsystem 到画布并添加一个块 Trigger 到子系统;

  • 使用键盘快捷键将必要的块组合到子系统中 Shift+LKM 并选择 触发子系统 :

    triggered subsystem 1 cn

    如果使用组合键组合到触发子系统中,则块 Trigger 它将自动添加。

触发和激活子系统

触发和激活子系统 triggered enabled subsystem —这是将两个子系统(触发和激活)的功能集成到一个子系统中。 只有当激活控制信号具有正值并且发生触发事件时,才会执行这样的子系统。

何时使用触发和激活的子系统:

  • 来执行同时依赖于激活和触发事件的操作。;

  • 对于只有当两个条件都为真时才执行子系统的系统的实现(来自块的信号) TriggerEnable).

  • 实现复杂的控制逻辑,该逻辑需要在特定条件下激活并在触发事件时执行。

了解有关触发和激活子系统的更多信息
Trigger 可以添加到块中 Enable 以获得*触发和激活*子系统。

触发和激活子系统具有以下功能:

  • 它是一个托管子系统;

  • 子系统由两个外部信号同时控制:触发信号和激活信号。;

  • 子系统必须由标量或矢量信号的正值激活。 如果标量值大于零或矢量值中的任何一个大于零,则激活子系统。

  • 子系统在控制信号的值以指定方式改变时在每个步骤执行一次。 座 Trigger 控制子系统的执行。

  • 子系统将其输出参数保持在触发器之间的最后一个值。

  • 子系统内离散块的状态存储在触发器之间。

如何使用触发和激活子系统:

  • 添加块 Subsystem 到画布并添加块 TriggerEnable 到子系统;

  • 使用键盘快捷键将必要的块组合到子系统中 Shift+LKM 并选择 触发和激活子系统 :

    triggered enabled subsystem 1 cn

    如果使用键盘快捷键组合到触发和激活的子系统中,则块 TriggerEnable 它们将自动添加。

可重置子系统

可复位子系统 resettable subsystem —这是一种块 Subsystem,其块的状态可以通过外部触发器复位。 该子系统在每个时间步执行,但在端口上时,它内部所有块的状态都被重置为初始状态 Reset 发生触发事件。

何时使用可重置子系统:

  • 执行需要在特定条件下重置子系统内部所有块的状态的操作;

  • 响应外部事件(例如,系统重新启动或错误),将子系统重置为初始状态;

  • 来管理系统的状态,保证子系统在某些时间点复位。

详细了解正在重置的子系统

可重置子系统具有以下功能:

  • 它是一个托管子系统;

  • 复位块添加外部信号以控制子系统执行;

  • 当在*Reset端口上触发触发器时,子系统内部所有块的状态都会重置为初始状态。*;

  • 子系统在每个时间步执行,但仅当在*Reset端口上触发触发器时才重置块状态。*;

  • 它类似于使用*Reset*端口重置块的行为,不同之处在于正在重置的子系统会重置自身内部所有块的状态。

如何使用可重置子系统:

  • 添加块 Subsystem 到画布并将*Reset*块添加到子系统;

  • 使用键盘快捷键将必要的块组合到子系统中 Shift+LKM 并选择 可复位子系统 :

    resettable subsystem 1 cn

    如果使用组合键组合到可重置子系统中,将自动添加*Reset*块。

Function-Call(函数调用的子系统)

Function-Call(函数调用子系统) function call subsystem —这是一种块 Subsystem. 子系统在控制端口每次接收到函数调用事件时启动。 这些事件可以来自块 Chart、函数调用生成器块或 Engee Function.

何时使用函数调用子系统:

  • 创建类似于编程语言中的过程的功能,其中只有在调用函数时才需要执行。

  • 实现复杂的控制逻辑,其中必须根据请求执行某些操作。

了解有关函数调用子系统的更多信息

函数调用子系统具有以下特性:

  • 它是一个托管子系统;

  • Trigger 使用值’function-call’中的*触发器类型*参数,它变成*函数*块并添加外部信号以控制子系统的执行。;

  • 仅当在控制端口上接收到函数调用事件时,才执行子系统;

  • 调用子系统以给定的顺序启动其中所有块的执行,类似于过程编程语言中的函数。

如何使用函数调用子系统:

  • 添加块 Subsystem 到画布并添加一个块 Trigger 入子系统。 将*Trigger Type*参数的值设置为’function-call'。 座 Trigger 将视图更改为*功能*。

  • 使用键盘快捷键将必要的块组合到子系统中 Shift+LKM 并选择 功能调用子系统 :

    function call subsystem 1 cn

    如果使用键盘快捷键组合到函数调用子系统中,将自动添加*函数*块。

控制逻辑

行动(行动)

*动作子系统*是一个子系统,其执行由块动作信号控制 Action Port. 子系统用于包含块的模型 IfSwitch Case.

何时使用操作子系统:

  • 使用If和开关案例逻辑实现模型;

  • 实现基于动作信号(来自*动作端口*块)的部分模型的条件执行;

  • 创建一个复杂的分支逻辑,其中块的执行取决于外部信号确定的条件。

了解有关操作子系统的更多信息

操作子系统具有以下功能:

  • 它是一个托管子系统;

  • If 实现If-Else逻辑以控制*Action子系统的执行*;

  • Switch Case 实现切换逻辑以控制*动作子系统的执行*;

  • 动作信号控制子系统内块的执行,类似于编程语言中的If和Switch-Case结构。

如何使用操作子系统:

  • 添加块 Subsystem 到画布并将*操作端口*块添加到子系统。 块向子系统添加外部动作输入端口。

多重执行

对于每个(对于每个元素)

*对于每个子系统*是允许处理输入信号的每个元素的子系统。 这种子系统的控制单元是块 For Each.

每个子系统何时使用:

  • 用于处理每个元素的输入信号,例如在滤波或数据变换任务中。;

  • 对输入信号的元素或子阵列执行并行计算;

  • 实现复杂的处理逻辑,需要对每个数据元素的状态进行单独的核算。

详细了解每个子系统

对于每个子系统具有以下功能:

  • 它是一个托管子系统;

  • 子系统处理输入信号的每个元素;

  • 子系统内的每个块为其处理的每个元素或子阵列维护一组单独的状态。;

  • 当元素或子阵列被处理时,子系统将结果组合以形成输出信号。;

  • 该块允许您为输入数据创建索引并将其作为端口输出。

如何使用每个子系统:


对于Iterator(迭代子系统)

迭代器子系统*是一个具有可编程逻辑的迭代子系统。 它是在当前时间步长期间重复执行的子系统,直到迭代变量超过指定的迭代限制。 这允许您使用块实现与*Engee*中的For循环等效的逻辑 For Iterator.

何时使用迭代子系统:

  • 在需要在单个时间步长内累积或汇总数据的模型中。;

  • 以实现需要多次执行同一操作的复杂数据处理算法。;

  • 在需要对数据数组的元素执行多个计算的任务中。

了解有关For Iterator子系统的更多信息

迭代子系统具有以下功能:

  • 它是一个托管子系统;

  • 子系统基于迭代变量在当前时间步长期间重复执行;

  • For Iterator 控制迭代次数(*迭代限制*参数),类似于For循环;

  • 块输出 For Iterator 它不能是函数调用信号,如果违反此条件,*Engee*将在更新模型时发出错误。

如何使用迭代子系统:

  • 添加块 Subsystem 到画布并添加一个块 For Iterator 入子系统。

  • 启用*Show迭代变量*参数以显示输出端口。 启用*Set next i(外部迭代变量)*参数以显示输入端口。 确定*迭代限制*参数中的子系统迭代次数。 使用*Index mode*参数指定初始迭代次数。

模型(submodel)

Model —这是一个链接到单独模型文件的块。 它可以使用块集成到其他模型中 Model.

何时使用子模型:

  • 创建系统模型的层次结构;

  • 用于在项目之间重用和分发模块;

  • 开发具有多个互连组件的复杂系统;

  • 将项目划分为可以单独开发和测试的独立部分。

了解有关子模型的更多信息

子模型具有以下特性:

  • 与经典子系统不同,子模型必须已经在沿着搜索路径的文件系统中,以便它可以在其他模型中使用。;

  • 显示子模型的顶层输入输出端口对应的输入输出端口。 这些端口允许您将子模型连接到父模型的其他块。;

  • 一个子模型可以引用另一个子模型,并支持任何子系统和其他子模型的多级嵌入。;

  • 所有子模型中求解器的步长必须与父模型的求解器的步长相匹配(与块 Model). 否则,你会得到一个求解器错误。;

  • 您可以选择不同的求解器,前提是步长相同。 选择离散求解器或连续求解器。 在同一时间使用这两种类型的求解器将导致求解器错误。;

  • 子模型不支持库块 物理建模和多维信号。

如何使用子模型:

  • 添加块 Model 在画布上。

  • 在块设置中,通过单击指定子模型将引用的模型 选择型号 .

  • 要使输入/输出端口显示在模型块中,请将输入和输出块添加到引用的模型并选择该选项 更新连接器 :

    model 1 cn

要查看实现子模型的示例,请转到 链接

图表(图表)

Chart —这是一个图形表示 有限状态机。 座 Chart 它用于对有限状态机的控制逻辑进行建模,有限状态机是描述具有有限数量状态的系统的设备的数学模型。

何时使用图表:

  • 为实施 有限自动机的逻辑

  • 实现图表 状态和流程图。

  • 用于建模具有显式控制逻辑和事件的系统。

  • 用于系统中状态和转换的可视化表示。

  • 以实现复杂的控制算法。

  • 使用以下方法实现Julia语言结构 代码生成

了解更多有关图表的资料

图表具有以下特点:

  • 该库由独特的组件组成:

    stateflow library cn

  • 您只能使用在添加信号菜单(在块中)中声明的内部变量 Chart).

    stateflow settings 3 cn

  • 要显示输入/输出端口,必须设置适当的局部变量。

如何使用图表:

  • 添加块 Chart 在画布上。

  • 配置局部变量(输入/输出)以添加块输入/输出端口 Chart.

阅读更多关于有限自动机在*Engee*in 状态机.

有用的连结