主要内容

创建带有迭代事件的自定义实体存储块

离散事件系统对象™可以包含用于操作实体、作用于存储和资源管理的多种事件类型。当事件到期执行时,离散事件系统可以通过调用事件操作来响应该事件。本例的目标是展示在创建自定义块时如何使用事件和事件操作。要查看所提供的事件和事件操作的列表,请参见使用事件和事件动作自定义离散事件系统行为

若要打开模型并观察自定义块的行为,请参见CustomEntityStorageBlockWithIterationEventExample

创建离散事件系统对象

在这个例子中,一个自定义块允许实体通过输入端口进入它的存储元素。存储元素根据它们对实体进行排序直径属性按升序排列。块存储的每个实体条目调用一个迭代事件来显示存储中每个实体的直径和位置。

存储元素允许您定义其存储和排序实体的容量,在此期间任何实体都可以被访问和操作。在本例中,存储具有容量5是用来存储和分类汽车车轮基于他们直径属性以升序排列。当一个新的轮子进入存储器时,一个迭代事件eventIterate是否触发迭代事件操作迭代显示车轮在存储器中的位置及其直径。

参见使用迭代事件生成自定义存储块的代码

定义自定义块行为

  1. 定义一个有容量的存储obj。能力,它会根据轮子的优先级值对它们进行排序。优先级值从直径实体的属性,并按升序排序。

    函数[storageSpecs, I, O] = getEntityStorageImpl(obj) storageSpecs = obj. queuepriority (“轮”obj。能力,“直径”“提升”);I = 1;O = [];结束
  2. 车轮进入存储时会调用迭代事件。

    函数[entity, event] = WheelEntry(obj,storage,entity, source)实体条目调用迭代事件。event = obj.eventIterate(1,);结束

    输入参数1是迭代事件的存储索引,和标记名称。

  3. 迭代事件调用迭代事件操作。

    % itarate事件动作函数[entity,event,next] = WheelIterate(obj,storage,entity,tag,cur)显示车轮id,在存储器中的位置和直径。coder.extrinsic (“流”);流('轮id %d,当前位置%d,直径%d\n'...entity.sys。id, current .position, entity.data.Diameter);如果fprintf(“迭代结束\n”结束Next = true;事件= [];结束

    在代码中,coder.extrinsic(流)声明函数流()作为代码生成的外部函数。对于每次迭代,代码都会显示新的车轮ID、当前位置和直径,直径用作排序属性。

实现自定义块

  1. 保存.m文件CustomEntityStorageBlockIteration.将System对象链接到一个SimEvents®通过使用MATLAB离散事件系统块。有关链接的更多信息,请参见使用MATLAB离散事件系统块创建自定义块

  2. 创建一个SimEvents模型MATLAB离散事件系统Block和实体发电机块。

  3. 实体发电机布洛克:

    1. 实体类型选项卡,设置属性名称作为直径

      属性直径中的实体排序MATLAB离散事件系统块。

    2. 事件动作选项卡,在产生行动字段,添加此代码以随机化传入实体的大小。

      实体。直径= randi([1 10]);
    3. 统计数据选项卡,输出离开的实体数量d统计并连接到一个作用域。

  4. 如图所示连接块并模拟模型。

    1. 观察到实体发电机块生成5实体,因为存储块的容量是5

    2. 诊断查看器显示存储中每个轮条目的迭代事件。每次迭代显示车轮的ID、位置和直径。观察每个轮条目如何改变存储轮的顺序。在上次迭代中,5存储中的实体按升序排序。

另请参阅

|||||||

相关的话题