Engee 文档
Notebook

使用启用和触发的子系统进行事件计数

在这个模型中,我们演示了块操作的差异。 enabled 和块 triggered,定义子系统的操作条件。 演示基于计数事件的示例。

模型描述

一个脉冲发生器被放置在模型上 Pulse Generator,这是在模式 Sample based 它基于开关之间必须经过的一定数量的离散仿真步骤来控制信号参数。

image.png

然后信号落入计数器的两个实现选项:

*一个被实现为带有端口的子系统 EnablePort (由输入端存在正信号触发,
*另一个是子系统的形式 TriggerPort,并且在登记信号的上升沿时被触发。

image.png

两个计数器在触发时,都会在其输出信号中加一个。 但是,正如我们从着色中看到的那样,响应时间(Sample Time 第二计数器的使用是由于块的操作 TriggerPort,因此,计数器块的颜色不同于其余系统块的颜色(对于其采样时间为0.01)。

模型的工作

该模型允许您研究不同子系统执行控制单元的工作方式。 让我们运行模型并分析结果。

In [ ]:
modelName = "counters_demo";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");

# Запустим модель
data = engee.run( modelName, verbose=false )
Out[0]:
Dict{String, DataFrames.DataFrame} with 3 entries:
  "Счетчик Enabled"   => 226×2 DataFrame…
  "Счетчик Triggered" => 226×2 DataFrame…
  "Сигнал управления" => 226×2 DataFrame

第一信号演示离散控制信号源的操作。

In [ ]:
plot( data["Сигнал управления"].time, data["Сигнал управления"].value )
Out[0]:

在第二张图中,我们看到了工作 enabled-子系统与指定的触发逻辑 EnablePort. 当子系统在控制端口上接收到正信号时,计数器随着仿真的每个时钟周期而增加。 当子系统被禁用时,它返回最后累积的信号值。 当正控制信号恢复时,输出复位-此行为由单元的set配置设置。 EnablePort.

In [ ]:
plot( data["Счетчик Enabled"].time, data["Счетчик Enabled"].value )
Out[0]:

在第三张图上,我们看到了工作 triggered-通过设置触发逻辑的子系统 TriggerPort. 随着控制信号的每个上升沿,计数器增加1。

In [ ]:
plot( data["Счетчик Triggered"].time, data["Счетчик Triggered"].value )
Out[0]:

为什么计数器"跳过"前两个上升沿? 他的图中有一个方块 Unit Delay,它在第一次触发时返回0。 并且该块的第一次激活目前不会发生 t=0,并且在第一个上升脉冲的注册时刻:

*启动模型时,控制信号初始设置为 1 而且没有增长的势头,
*当第一个边缘发生时,计数器首次触发并返回 0
*注册第二个边缘(第三个脉冲)时,计数器将返回给我们 1.

结论

使用Engee中子系统的各种操作模式,可以组织复杂的混合场景,用于模拟离散或连续过程。 我们已经通过两个子系统执行修饰符的例子看到了这一点。 – EnablePortTriggerPort,但在Engee中有几个更类似的修饰符,允许您为子系统设置更复杂的操作条件,可以在面板上找到。 基本块库的子系统**。