与模型架构的实际工作 AnyMath
| 模型架构构建理论 AnyMath 在文章中描述 模型的架构 AnyMath. 我们建议您在开始研究当前文章之前先阅读它。 |
子系统和子模型用于对块进行分组。 子系统可以被视为函数,子模型可以被视为插件文件。 AnyMath 它们的实施方式如下:
| 子系统的类型 | 子模型 | 子系统行为实现的其他块 | |
|---|---|---|---|
经典作品 |
座 Model(子模型) |
座 Chart |
|
由条件触发 |
激活子系统 触发子系统 触发和激活子系统 可重置子系统 Function-Call(函数调用) |
||
控制逻辑 |
开始! |
||
多重执行(计算周期) |
对于每个 对于迭代器 |
||
| 要查看各种子系统的实现示例,请转到 链接。 |
| 任何子系统 AnyMath 可以使用掩码进行配置(请参阅 英国面具). |
经典子系统
经典子系统
-这是一个街区 Subsystem,用于将模型划分为模块,无需附加条件或需要控制外部信号。
何时使用经典子系统:
*通过将大型模型分解为较小的模块来简化大型模型; *提高模型的结构和可读性; *用于在模型之间传输现成的模块(复制子系统)。
了解有关经典子系统的更多信息
座 *Subsystem*包含模型或系统内的块子集,可以是非虚拟或虚拟子系统:
*非虚拟子系统作为单个单元运行,可以配置为仅在某些事件下运行。 *虚拟子系统不作为单个单元运行并且不依赖于事件。 这样的子系统有助于在不影响其操作的情况下使模型更易于理解。
要将虚拟子系统切换到非虚拟子系统,请将*Treat as atomic unit*参数设置为 真的.
经典子系统具有以下特点:
它不是托管子系统; *允许您创建模型的层次结构,其中一个子系统可以包含另一个子系统; *不能保存为单独的文件或子系统。 要将子系统保存为单独的模型,使用该块 *Model(子模型); *不影响模型的功能和逻辑。
如何使用经典子系统:
*添加块 *Subsystem*到画布并将所需的块添加到子系统;
+ 或 使用键盘快捷键将块组合到子系统中 Shift+ЛКМ 并选择 *子系统 :

由条件触发
正在激活的子系统
启用子系统
—这是一种块 Subsystem,其执行由外部信号控制。 激活的子系统在每个主要时间步长执行一次,只要控制信号具有正值。
何时使用激活的子系统:
*执行依赖于外部条件或信号的操作。 *实现复杂的控制逻辑,其中只有在满足某些条件时才需要执行模型。
详细了解正在激活的子系统
激活的子系统具有以下功能:
*是托管子系统; *座 *Enable*添加外部信号以控制子系统执行; *控制信号可以是标量或矢量: 如果标量值大于零,则子系统执行; 如果向量值中的至少一个大于零,则子系统执行; *如果控制信号在较小的时间步长期间过零,则子系统直到下一个主要时间步长才打开或关闭。
如何使用激活的子系统:
添加块 *Subsystem*到画布并添加一个块 *Enable*到子系统。 如果 *Enable*在块引用的模型的根级别使用 *Model,那么您需要执行以下操作: 对于多速模型,将求解器设置为单任务模式。 对于具有固定步长的模型,模型中至少有一个块必须以固定步长的指定速度运行。
+ 或
使用键盘快捷键将必要的块组合到子系统中 Shift+ЛКМ 并选择 *启用子系统 :
+

+
| 如果使用组合键组合到激活的子系统中,则块 *Enable*将自动添加。 |
触发子系统
触发子系统
—这是一种块 Subsystem,其执行由外部触发信号启动。 当控制信号的值以指定的方式改变时,触发的子系统将在每个步骤执行一次。
了解有关触发子系统的更多信息
触发子系统具有以下功能:
*是托管子系统; *座 *Trigger*添加外部信号以控制子系统执行; *与以控制信号的正值运行的激活子系统不同,被触发子系统将其输出参数保持在触发器之间的最后一个值; *子系统内离散块的状态存储在触发器之间。
何时使用触发的子系统:
*执行应由某些事件触发的操作; *实现必须执行某些操作以响应中断或其他异步事件的系统。; *实现必须以指定频率(由外部触发信号确定)执行的任务。
如何使用触发子系统:
+ 或
使用键盘快捷键将必要的块组合到子系统中 Shift+ЛКМ 并选择 *触发子系统 :
+

+
| 如果使用组合键组合到触发子系统中,则块 *Trigger*将自动添加。 |
触发和激活子系统
触发并启用子系统
—这是将两个子系统(触发和激活)的功能集成到一个子系统中。 只有当激活控制信号具有正值并且发生触发事件时,才会执行这样的子系统。
何时使用触发和激活的子系统:
执行依赖于激活和触发事件的操作。; *用于仅在两个条件都为真时执行子系统的系统的实现(来自块的信号 *Trigger*及 *Enable). *实现复杂的控制逻辑,需要在特定条件下激活并在触发事件时执行。
了解有关触发和激活子系统的更多信息
触发和激活子系统具有以下功能:
*它是一个托管子系统; *子系统执行由两个外部信号同时控制:触发信号和激活信号; *子系统必须由标量或矢量信号的正值激活。 如果标量值大于零或矢量值中的任何一个大于零,则激活子系统。 *当控制信号的值以指定的方式改变时,子系统在每个步骤执行一次。 座 *Trigger*管理子系统执行。 *子系统将其输出参数保持在触发器之间的最后一个值。 *子系统内离散块的状态保存在触发器之间。
如何使用触发和激活子系统:
+ 或
使用键盘快捷键将必要的块组合到子系统中 Shift+ЛКМ 并选择 *触发并启用子系统 :
+

+
可重置子系统
何时使用可重置子系统:
*执行需要在特定条件下重置子系统内所有块的状态的操作; *响应外部事件(例如,系统重新启动或错误),将子系统重置为初始状态; *管理系统的状态,确保子系统在某些时间点复位。
详细了解正在重置的子系统
Function-Call(函数调用的子系统)
Function-Call(函数调用子系统)
—这是一种块 Subsystem. 子系统在控制端口每次接收到函数调用事件时启动。 这些事件可以来自块 Chart,块 Function-Call Generator*或一个街区 *Engee Function.
何时使用函数调用子系统:
*创建类似于编程语言中的过程的功能,其中只有在调用函数时才需要执行。 *实现复杂的控制逻辑,其中必须根据请求执行某些操作。
了解有关函数调用子系统的更多信息
函数调用子系统具有以下特性:
*是托管子系统;
*座 *Trigger*在值中使用*触发器类型*参数 函数调用 它变成一个*功能*块,并添加一个外部信号来控制子系统的执行。;
*仅当在控制端口上接收到函数调用事件时,才执行子系统;
*子系统调用以给定的顺序启动其内部所有块的执行,类似于过程编程语言中的函数。
如何使用函数调用子系统:
+ 或
使用键盘快捷键将必要的块组合到子系统中 Shift+ЛКМ 并选择 *函数调用子系统 :
+

+
| 如果使用键盘快捷键组合到函数调用子系统中,将自动添加*函数*块。 |
控制逻辑
行动(行动)
动作子系统*是一个子系统,其执行由块动作信号控制 *Action Port. 子系统用于包含块的模型 If*及 *Switch Case.
何时使用操作子系统:
实现具有逻辑的模型 如果 和 开关箱;
*基于动作信号(来自块)实现模型部分的条件执行 *Action Port);
*创建复杂的分支逻辑,其中块的执行取决于外部信号确定的条件。
了解有关操作子系统的更多信息
操作子系统具有以下功能:
是托管子系统;
*座 *If*实现逻辑 如果-其他 来控制*动作子系统的执行;
座 *Switch Case*实现切换逻辑以控制*动作子系统的执行;
*动作信号控制子系统内块的执行,类似于构造 如果 和 开关箱 在编程语言中。
如何使用操作子系统:
*添加块 *Subsystem*到画布并添加一个块 *Action Port*到子系统。 块将外部输入端口*动作*添加到子系统。
多重执行
对于每个(对于每个元素)
对于每个子系统*是允许处理输入信号的每个元素的子系统。 这种子系统的控制单元是块 *For Each.
每个子系统何时使用:
*用于处理每个元素的输入信号,例如在滤波或数据转换任务中; *对输入信号的元素或子阵列执行并行计算; *实现复杂的处理逻辑,需要对每个数据元素的状态进行单独核算。
详细了解每个子系统
对于Iterator(迭代子系统)
迭代器子系统*是一个具有可编程逻辑的迭代子系统。 它是在当前时间步长期间重复执行的子系统,直到迭代变量超过指定的迭代限制。 这允许您实现相当于For循环的逻辑 AnyMath 使用区块 For Iterator.
何时使用迭代子系统:
*在需要在单个时间步长内累积或汇总数据的模型中。; *实现需要多次执行同一操作的复杂数据处理算法; *在需要对数据数组元素执行多个计算的任务中。
了解有关For迭代器子系统的更多信息
迭代子系统具有以下功能:
是托管子系统;
*子系统基于变量迭代在当前时间步长内重复执行;
*座 *For Iterator*控制迭代次数(参数*迭代限制),类似于循环 为;
块输出 *For Iterator*不能是函数调用信号,并且 *AnyMath 如果违反此条件,则在更新模型时返回错误。
如何使用迭代子系统:
*添加块 *Subsystem*到画布并添加一个块 *For Iterator*到子系统。 *启用*显示迭代变量*选项以显示输出端口。 启用*Set next i(外部迭代变量)*参数以显示输入端口。 确定*迭代限制*参数中的子系统迭代次数。 使用*Index mode*参数指定初始迭代次数。
模型(submodel)
何时使用子模型:
*创建系统模型的层次结构; *在项目之间重用和分发模块; *用于开发具有多个互连组件的复杂系统; *将项目划分为可以单独开发和测试的独立部分。
了解有关子模型的更多信息
子模型具有以下特性:
*与经典子系统不同,子模型必须已经在沿着搜索路径的文件系统中,以便它可以在其他模型中使用。; *显示子模型顶层输入输出端口对应的输入输出端口。 这些端口允许您将子模型连接到父模型的其他块。; *一个子模型可以引用另一个子模型,并支持任何子系统和其他子模型的多级嵌入。;
|
所有子模型中求解器的步长必须与父模型的求解器的步长相匹配(与块 *Model). 否则,你会得到一个求解器错误。; + *您可以选择不同的求解器,前提是步长相同。 选择离散求解器或连续求解器。 在同一时间使用这两种类型的求解器将导致求解器错误。; *子模型不支持库块 物理建模和多维信号。 |
如何使用子模型:
添加块 *Model*在画布上。 *在块设置中,通过单击指定子模型将引用哪个模型 *选择模型 . 要使输入/输出端口显示在模型块中,请将输入和输出块添加到引用的模型中,然后选择该选项 *刷新连接器 :
+

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



