主要内容

创建一个自定义实体存储块迭代的事件

离散事件系统™对象可以包含多个事件类型为操作实体,作用于存储和资源管理。将事件时执行,离散事件系统可以通过调用事件动作响应事件。这个例子的目的是展示如何使用事件和事件操作时,创建一个自定义块。看到的列表提供了事件和事件操作,明白了使用事件和事件操作自定义离散事件系统行为

打开模型和观察的行为定义块,明白了CustomEntityStorageBlockWithIterationEventExample

创建离散事件系统对象

在这个例子中,一个自定义块允许实体进入其存储元素通过其输入端口。基于他们的存储元素类型的实体直径属性按升序。每个实体进入块的存储调用迭代事件显示直径和存储中的每个实体的位置。

存储元素允许您定义它的容量来存储和分类实体在任何实体可以访问和操作。在本例中,存储容量5是用于存储和基于他们的车轮直径属性在一个升序排序。当一个新的轮进入存储、迭代事件eventIterate被调用时,迭代触发事件动作迭代显示轮位置存储和直径。

看到代码来生成自定义存储块迭代的事件

定义自定义块行为

  1. 定义一个存储容量obj.Capacity在他们的优先级值,这类基于车轮。优先级值获得的直径实体的属性,按升序排序。

    函数[storageSpecs, I, O] = getEntityStorageImpl (obj) storageSpecs = obj.queuePriority (“轮”obj.Capacity,“直径”,“提升”);I = 1;O = [];结束
  2. 轮子的进入存储调用一个迭代的事件。

    函数(实体、事件)= WheelEntry (obj、存储实体,源)%实体条目调用一个迭代的事件。事件= obj.eventIterate (1,);结束

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

  3. 重复的事件调用一个迭代事件动作。

    % itarate事件动作函数(实体、事件、下)= WheelIterate (obj、存储实体,标签,cur)%显示轮id,在存储位置和直径。coder.extrinsic (“流”);流(“轮id % d,当前位置% d,直径% d \ n ',entity.sys。id、cur.position entity.data.Diameter);如果cur.size = = cur.position流(“迭代\ n的终结”)结束下一个= true;事件= [];结束

    在代码中,coder.extrinsic(流)声明函数流()作为代码生成非本征函数。对于每次迭代,代码显示了新轮ID、当前位置、直径,用作排序属性。

实现自定义的块

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

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

  3. 实体发电机布洛克:

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

      属性直径用于实体MATLAB离散事件系统块。

    2. 事件动作选项卡,产生行动场,这段代码添加到随机传入的实体的大小。

      实体。直径=兰迪(10 [1]);
    3. 统计数据选项卡中,输出数量的实体,d统计和连接到一个范围。

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

    1. 观察到的实体发电机块生成5实体自存储块的能力5

    2. 诊断的迭代事件查看器显示每个轮子进入存储。每个迭代显示ID、位置和车轮的直径。观察每个轮子条目变化的顺序存储。在过去的迭代,5实体存储按升序排序。

另请参阅

|||||||

相关的话题