主要内容

事件和事件处理

在离散事件模拟中,事件是可能改变状态变量、输出或其他事件发生的瞬时事件。通过使用SimEvents®,您可以创建自定义操作,这些操作在实体发生事件时发生,例如当实体进入或退出块时发生。

事件概述

在SimEvents中,您可以基于实体状态指定事件操作。SimEvents模型中的典型事件序列是:

  1. 生成一个实体。

  2. 实体从实体发电机块到实体服务器块。

  3. 实体服务器Block完成实体的服务。

  4. 实体退出实体服务器块,并进入实体终结者块。

  5. 实体被销毁。

当一个实体被创建、进入或退出一个块、服务或销毁时,该实体的状态会发生变化。您可以使用某些SimEvents库块来创建当这些状态发生变化时触发的事件操作。你可以使用以下方法来编写事件动作:

  • MATLAB®执行计算的代码。

  • 金宝app®调用执行计算的函数的函数调用。

有关事件动作语言的详细信息,请参见事件动作语言和随机数生成

为事件动作编写自定义代码

要创建事件操作代码和语言,请在SimEvents块中选择事件动作选项卡并选择调用该操作的事件。例如,在实体发电机Block中,提供了两个事件来调用事件动作,生成而且退出.当实体生成或退出块时触发事件操作。

实体生成器块窗口,显示生成操作字段。

如果你点击生成事件时,可以在产生行动字段。

当你使用事件动作时:

  • 实体可作为MATLAB结构提供,并包括表示实体属性值的结构字段。

  • 保留字段,例如实体ID和实体优先级,也可以在单独的MATLAB结构中使用entitySys

有关使用事件操作的示例,请参见使用事件操作管理实体

SimEvents包含事件操作的块

控件上可用的事件操作事件动作块的标签。这些是您可以为其创建操作的可能事件。

实体生成块 实体队列块 实体服务器块 实体终止符块 资源获取块 实体批处理创建块

实体的一代

实体条目到队列块

服务器块的实体条目

实体条目到终止符块

实体进入收购块

批处理块的实体条目

实体退出块

实体退出块

实体服务完成情况

N/A

实体退出收购方块

实体批处理生成

N/A

实体被阻塞

实体退出块

N/A

实体被阻塞

实体退出块

N/A

N/A

实体被阻塞

N/A

N/A

实体被阻塞

N/A

N/A

实体被抢占

N/A

N/A

N/A

该图显示了实体在离散事件系统模拟中移动时的动作流。

实体流和存储中发生的事件。实体被转发到存储器或在存储器内部生成。实体在存储中被服务或终止。如果转发进程未被阻断,则实体退出存储。

注:

  • 实体进入、退出和阻塞操作作为实体转发事件的一部分执行。

  • 服务完成动作在计时器事件之后执行。

  • 实体终止事件执行销毁操作。

您还可以修改实体属性(entityNameattributeName),实体优先级(sys.entity.priority),以及实体编号(sys.entity.id).但是,您不能更改实体属性或系统属性(entitySys)作为退出操作。尝试更改这些值会在模拟时导致错误。

使用事件操作助手

事件操作助手可以帮助您根据统计分布为重复的事件操作序列或随机事件操作创建代码。类中的助手实体发电机布洛克:

  1. 打开块并选择事件动作选项卡,并选择生成事件动作。

  2. 产生行动字段,单击插入模式按钮。

实体生成器块窗口

假设您想要生成实体并为它们分配随机属性值。这些值是由之间的均匀分布生成的0而且1

要实现这种行为:

  1. 选择随机数

  2. 若要选择均匀分布,请设置分布参数统一的

  3. 默认情况下,最低最大参数被指定为0而且1,分别。

  4. 将值附加到实体属性Attribute1,设置将输出分配给参数实体。Attribute1

助手创建代码。

MATLAB代码由助手在生成动作字段中创建

代码为种子创建了一个持久变量。然后附加一个随机值实体。Attribute1.在定义一个操作之后,一个星号(*)将出现在Event actions选项卡中,以指示该事件调用了一个代码。在这种情况下,在后面显示星号生成事件动作。

有关事件操作助手的详细信息,请参见事件动作语言和随机数生成

跟踪事件与事件日历

SimEvents不以图形方式表示事件。相反,SimEvents软件维护一个安排事件的事件日历。在调试SimEvents模型时,可以使用Event Calendar观察事件。有关更多信息,请参见调试SimEvents模型

还可以通过使用与事件日历交互simevents。SimulationObserver方法。您可以使用该类及其方法创建自定义事件观察器。有关更多信息,请参见使用SimulationObserver类监视SimEvents模型

可视化事件操作

当你创建一个事件动作时,{…}标记出现在块上,表示该操作已创建。根据哪些事件操作具有关联代码而显示的标志。

例如,这幅图显示了一个实体队列使用由实体进入和退出块调用的事件操作的块。

带有事件动作标识的实体队列块

当您将鼠标悬停在徽章上时,您可以看到事件操作。例如,这个插图描述了一个实体退出操作。

显示事件操作的徽章

直接双击徽章打开事件动作块的TAB。

防止大量有限数量的同时事件的Livelock

同时发生的事件是在相同模拟时钟时间发生的事件。活动日历上不时安排的活动T而且T如果0≤Δt≤,则+Δt视为同时进行128 * eps *T,在那里每股收益是MATLAB软件中的浮点相对精度和T为模拟时间。如果您的模拟创建了大量同时发生的事件,这个数字可能表明出现了不希望出现的活动锁情况。在动态锁的情况下,一个块在同一时刻无限频繁地返回到相同的状态。SimEvents软件通过以下限制防止livelock:

  • SimEvents将每个块同时发生的事件的最大数量限制为5,000。

  • SimEvents将每个模型的最大同时事件数量限制为100,000个。

另请参阅

||||||

相关的例子

更多关于