Engee 模型架构的实际工作
页面进行中。 |
恩吉的示范建筑 一文中介绍了*Engee*中构建模型架构的理论。建议在开始学习本文之前先阅读这篇文章。 |
子系统和子模型用于对模块进行分组。子系统可视为一个函数,子模型可视为一个插件文件。在*Engee*中,它们的实现方式如下:
子系统类型.h | 子模型.h | 实现子系统行为的其他模块 | |
---|---|---|---|
经典 |
程序块子系统 |
块模型 (子模型) |
块图表 |
有条件触发 |
启用子系统(启用子系统) 触发(触发子系统) 触发并启用子系统(触发并启用子系统) 可复位子系统(可复位子系统) 功能调用(功能调用) |
||
控制逻辑 |
操作 |
||
多次执行(计算周期) |
对于每个 迭代器 |
有关各种子系统的实现示例,请访问链接。 |
任何 Engee 子系统都可以用掩码定制(见恩吉的面具 )。 |
经典子系统
经典子系统* 是一个块子系统 ,用于将模型划分为模块,无需附加条件或控制外部信号。
何时使用经典子系统:
-
将大型模型分割成较小的模块,以简化模型;
-
改善模型的结构和可读性;
-
在模型之间转移现成模块(复制子系统)。
有关经典子系统的更多信息_.
模块 子系统 包含模型或系统中的模块子集,可以是非虚拟子系统,也可以是虚拟子系统:
-
非虚拟子系统作为一个单元执行,可配置为仅在某些事件发生时执行。
-
虚拟子系统不作为一个单元执行,独立于事件。该子系统有助于使模型更易于理解,但不会影响其运行。
要将虚拟子系统切换为非虚拟子系统,请将 Treat as atomic unit 参数设置为 "true"。
*经典子系统具有以下功能:
-
不是托管子系统;
-
允许一个子系统包含另一个子系统的分层模型结构;
-
不能作为单独文件或子系统保存。要将子系统保存为单独的模型,需要使用块模型 (子模型);
-
不影响模型的功能和逻辑。
如何使用经典子系统:
-
在画布上添加 子系统 块,并在子系统中添加所需的块;
或
-
使用组合键Shift+ЛКМ 将图块组合到子系统中,然后选择 子系统 :
有条件触发
启用子系统(启用子系统)
可激活子系统 - 是一个块类型 子系统,其执行受外部信号控制。只要控制信号为正,启用子系统就会在每个主时间步执行一次。
何时使用可激活子系统:
-
执行取决于外部条件或信号的操作。
-
实现复杂的控制逻辑,只有在满足特定条件时才需要执行模型。
有关可激活子系统的更多信息_.
可激活子系统具有以下功能:
-
是一个受控子系统;
-
启用 块添加了一个外部信号,用于控制子系统的执行;
-
控制信号可以是标量或矢量:
-
如果标量值大于零,则执行子系统;
-
如果至少一个矢量值大于零,则执行子系统;
-
-
如果控制信号在一个较小的时间步长内过零,则在下一个主要时间步长之前不会开启或关闭子系统。
如何使用可激活子系统:
触发子系统(触发子系统)
触发子系统 - 是一种由外部触发信号启动执行的块 子系统。当控制信号的值以指定方式发生变化时,触发子系统每步将执行一次。
有关触发子系统的更多信息
触发子系统具有以下功能:
-
是一个受控子系统;
-
触发器 块添加了一个外部信号来控制子系统的执行;
-
触发式子系统与激活式子系统不同,激活式子系统在控制信号为正时执行,而触发式子系统则在两次触发之间将其输出参数保持在最后一个值;
-
子系统内离散块的状态在两次触发之间保持不变。
*何时使用触发式子系统?
-
执行必须由特定事件触发的操作;
-
执行必须响应中断或其他异步事件才能执行某些操作的系统;
-
执行必须以外部触发信号确定的指定频率执行的任务。
*如何使用触发子系统:
触发和启用子系统(触发和启用子系统)
触发和激活子系统 - 是将两个子系统(触发和启用)的功能合并为一个子系统。只有当激活控制信号为正值且触发事件发生时,才会执行该子系统。
何时使用触发和激活子系统:
有关触发和激活子系统的更多信息
可触发和可激活*子系统具有以下功能*:
-
是一个受控子系统;
-
子系统的执行同时受两个外部信号控制:触发信号和激活信号;
-
子系统必须由标量或矢量信号的正值激活。如果标量值大于零或任何一个矢量值大于零,子系统即被激活。
-
当控制信号的值以指定方式变化时,子系统在每一步中执行一次。触发器* 块控制子系统的执行。
-
子系统在两次触发之间将其输出参数保持在上次的值。
-
子系统内离散块的状态在两次触发之间保持不变。
如何使用触发和激活子系统:
可复位子系统(可复位子系统)
*何时使用可重置子系统:
-
执行需要在特定条件下重置子系统内所有区块状态的操作;
-
针对外部事件(如系统重启或出错)将子系统重置为初始状态;
-
通过确保在特定时间点重置子系统来管理系统状态。
有关要重置的子系统的更多信息_。
*可重置子系统具有以下功能:
-
是一个受控子系统;
-
复位块增加了一个外部信号,用于控制子系统的执行;
-
当*复位*端口触发时,子系统内所有模块的状态都会复位到初始状态;
-
子系统在每个时间步执行,但只有当*复位*端口上的触发器被触发时,才会重置模块状态;
-
与使用 Reset 端口重置程序块的行为类似,只是被重置的子系统会重置其内部所有程序块的状态。
如何使用可重置子系统:
-
在画布上添加一个 子系统 块,并在子系统中添加一个 * 复位 * 块;
或
-
使用组合键Shift+ЛКМ 将所需的图块组合到一个子系统中,然后选择 可复位子系统 :
如果使用组合键合并到可复位子系统中,将自动添加 Reset 块。
控制逻辑
多重执行
For Each(针对每个项目)
*For Each 子系统*是一个可以处理输入信号中每个元素的子系统。这种子系统的控制块是对于每个 。
何时使用 For Each 子系统:
-
处理每个元素的输入信号,例如在过滤或数据转换任务中;
-
对输入信号的元素或子数组执行并行计算;
-
执行复杂的处理逻辑,需要对每个数据元素进行单独的状态核算。
关于每个子系统的更多信息
对于迭代器(迭代子系统)
For Iterator 子系统*是一个具有可编程 For 逻辑的迭代子系统。它代表一个子系统,在当前时间步长内重复执行,直到迭代变量超过给定的迭代限制。这样,您就可以使用程序块对于迭代器 在 Engee 中实现与 For 循环相同的逻辑。
何时使用迭代子系统:
-
在需要累积或总结单一时间步长数据的模型中;
-
执行需要多次执行相同操作的复杂数据处理算法;
-
需要对数据数组中的元素进行多次计算的任务。
模型(子模型)
何时使用子模型:* *
-
创建系统模型层次结构;
-
在项目之间重复使用和分配模块
-
开发具有许多相互关联组件的复杂系统;
-
将项目划分为可单独开发和测试的独立部分。