主要内容

构建一个自定义与多个存储块

这个例子展示了如何创建一个自定义块使用离散事件系统与多个存储和管理存储行为对象™方法。

假设您管理工具,为客户订单生产项目。准备重复订单,工厂生产供应的物品在订单到达之前。当一个新订单到达时,股票是可用性检查。

  • 如果发现物品的存储,它离开工厂完成订单。

  • 如果没有找到项目的存储,一个新项目生产和生成的物品离开工厂完成订单。

生成这个自定义行为,通过离散事件系统操作多个存储对象,使用创建的matlab.DiscreteEventSystem方法。观察的行为定义块,明白了CustomEntityStorageBlockWithTwoStoragesExample

创建离散事件系统对象

生成一个自定义实体存储块和两个输入,一个输出,两个存储元素。

所需的自定义块的行为选择和输出实体基于实体的引用。

  1. 输入端口1接受实体型存储1

  2. 输入端口2接受参考实体型订单存储2

  3. 当一个参考订单到达存储2,其属性数据记录为参考价值,和实体被摧毁。

  4. 订单迭代调用事件到达存储1寻找一个携带等于参考价值的数据。

  5. 如果找到匹配,匹配的项是输出端口转发1和迭代结束。

  6. 如果未找到匹配,一个新的在生成存储1一个匹配的属性值和输出端口转发1

看到代码来生成自定义存储与多个存储块

自定义块的行为

  1. 离散状态变量InputKey代表了记录的参考价值订单,用于选择相应

    属性(DiscreteState) InputKey;结束
  2. 块有两个与FIFO存储行为。存储1支持实体型和存储2支持实体型订单。块有两个输入端口和一个输出端口。输入端口1和输出端口1连接到存储1。输入端口2连接到存储2。宣布港口和存储的更多信息,请参阅实现一个离散事件系统对象与MATLAB离散事件系统

    函数num = getNumInputsImpl (~) num = 2;结束函数num = getNumOutputsImpl (~) num = 1;结束函数[entityTypes] = getEntityTypesImpl (obj) entityTypes = [obj.entityType (“项目”),obj.entityType (“秩序”));结束函数[inputTypes, outputTypes] = getEntityPortsImpl (~) inputTypes = {“项目”“秩序”};outputTypes = {“秩序”};结束函数[storageSpecs, I, O] = getEntityStorageImpl (obj) storageSpecs = [obj.queueFIFO (“项目”obj.capacity)obj.queueFIFO (“秩序”obj.capacity)];I = [1 - 2];O = 1;结束
  3. 指定离散状态和重置状态InputKey。在离散事件系统的更多信息,请参阅自定义实体发电机块信号输入和输出信号

    函数(深圳,dt, cp) = getDiscreteStateSpecificationImpl (obj、名称)深圳= 1;dt =“双”;cp = false;结束函数resetImpl (obj) obj。InputKey = 0;结束
  4. 订单到达存储其数据关键记录在离散状态变量Obj.InputKey。这个条目也迭代调用事件存储1和另一个事件摧毁订单

    函数(顺序、事件)= OrderEntry (obj、存储、秩序、源)%的关键实体已经到来;记录Inputkey值。obj。InputKey = Order.data.Key;%的迭代计划实体存储1。%摧毁输入关键实体。事件= [obj.eventIterate (1,)obj.eventDestroy ()];coder.extrinsic (“流”);流(“键值:% f \ n”,Order.data.Key);结束
  5. 迭代的目的是找到物品与数据相匹配InputKey

    函数(物品、事件continueIter) = ItemIterate (obj,存储、产品标签、cur)%发现实体匹配的关键。事件= obj.initEventArray;continueIter = true;如果(Item.data。Attribute1== obj.InputKey) events = obj.eventForward(“输出”1、0.0);%如果找到匹配项,迭代结束,状态重置。continueIter = false;elseifcur.size = = cur.position%如果未找到匹配,这个调用一个实体生成事件。事件= obj.eventGenerate (1,“mygen”0.0,100);结束结束

  6. 生成一个实体型entity1和一个匹配的关键价值。然后,生成的实体转发到输出端口1

    函数(物品、事件)= ItemGenerate (obj、存储项目,标记)%指定事件动作当实体生成存储。Item.data。Attribute1= obj.InputKey; events = obj.eventForward(“输出”1、0.0);结束

实现自定义的块

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

  2. 创建一个包括SimEvents模型MATLAB离散事件系统块,两个实体发电机块,和一个实体终结者块。连接块如图所示的模型。

  3. 实体发电机布洛克:

    1. 实体的一代选项卡,设置生成实体在仿真开始

    2. 实体类型选项卡,设置实体类型名称作为

    3. 事件动作选项卡,生成的行动领域输入:

      实体。Attribute1 =兰迪([1 3]);

      默认情况下,生成的实体与相生1和他们的Attribute1值之间的一个随机整数13

    4. 统计数据选项卡中,输出数量的实体,d统计并连接到一个范围。

  4. 实体Generator1布洛克:

    1. 实体的一代选项卡,设置生成实体在仿真开始,并设置5

    2. 实体类型选项卡,设置实体类型名称作为订单属性名称作为关键

    3. 事件动作选项卡,生成的行动领域输入:

      实体。关键= randi([1 4]);

    实体型订单生成与相生的时间吗5,关键属性之间的整数值14

    之间没有可能的匹配关键Attribute1关键值是4因为Attribute1可以把价值1,2,或3

  5. 实体终结者块,输出数量的实体来了,统计并连接到一个范围。

  6. 右键单击该实体的路径MATLAB离散事件系统块的实体终结者块,并选择日志选择信号

  7. 增加仿真时间50和模拟模型。观察到:

    1. 50实体型Entity1输入存储1块。

    2. 在诊断查看器,观察传入的关键引用值由10实体进入存储2,之后被摧毁。

    3. 仿真数据检查显示离开项目和它们Attribute1值。匹配的值关键在诊断查看器显示值。

      也观察到5实体出发,Attribute1价值4。2,因为这些实体生成在存储Attribute1不能有价值4生成的实体实体发电机块。

另请参阅

||||||

相关的话题

Baidu
map