主要内容

自定义实体发生器块与信号输入和信号输出

此示例展示了如何创建生成实体的自定义源块,以及如何在实现离散事件System对象™方法时管理离散状态。

假设你管理着一个以固定的确定性比率生产原材料的设施。这些材料包含用于库存管理的12位条形码和用于订单优先级排序的优先级值。为了表示这种行为,这个示例展示了如何生成一个自定义实体存储块,该块具有一个信号输入端口、一个实体输出端口、一个信号输出端口和一个存储元素。块生成具有不同优先级值的实体。实体携带数据并从其输出端口分离块。实体优先级值是从传入信号的值中获得的。

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

创建离散事件系统对象

该块被定义为一个自定义实体生成器块,它生成具有指定生成周期的实体。生成的实体携带数据,它们的优先级值由输入信号的值决定。

请参见创建自定义实体生成器块的代码

自定义块行为

  1. 定义材料生成之间的时间。

    %不可调属性属性(Nontunable)生成周期周期= 1;结束
  2. 初始化离散状态变量。

    函数resetImpl (obj)初始化/重置离散状态属性。obj.priority= 10; obj.value = 1:12;结束

    的变量优先级表示材料优先级和价值表示材料携带的条形码数据。

  3. 初始化源块的输出。

    函数num = getNumOutputsImpl(~)定义输出总数。Num = 2;结束函数[out1 out2] = getOutputSizeImpl(obj)每个输出端口的返回大小。Out1 = [1 12];Out2 = 1;结束函数[out1 out2] = getOutputDataTypeImpl(obj)返回每个输出端口的数据类型。着干活=“替身”;out2 =“替身”结束函数[out1 out2] = isOutputComplexImpl(obj)对于包含复杂数据的每个输出端口返回true。Out1 = false;Out2 = false;结束
    • 第一个函数声明输出大小。

    • 第二个函数声明输出端口数据类型为

    • 第三个函数声明用于输出端口,因为它们不支持复杂的数据。

  4. 声明离散状态的大小、数据和复杂性。

    函数[sz,dt,cp] = getDiscreteStateSpecificationImpl(obj,name)返回离散状态的大小、数据类型和复杂度。开关的名字情况下“优先”Sz = [1 1];情况下“价值”Sz = [1 12];结束dt =“替身”;Cp = false;结束
    • 离散状态优先级是标量。数据类型为并取实值。

    • 离散状态价值是一个1——- - - - - -12向量。数据类型为并取实值。

  5. 生成具有代际周期、优先级和数据定义的材料:

    • 的参数obj.period,声明为一个公共参数,可以从块对话框中更改。

    • 的参数obj.priority值,由输入端口的信号定义。

    • 的参数obj.value,一个1——- - - - - -12向量,表示实体所携带的数据。

    函数events = setupEvents(obj)在模拟开始时为存储1设置实体生成事件。事件= obj.eventGenerate(1,“mygen”、obj.period obj.priority);设置输出信号的初始值。Out1 = 10;结束函数[entity,events,out1] = generate(obj,storage,entity,tag,in1)在存储中生成实体时指定事件操作。实体。数据= obj.value;信号的值被分配给实体优先级。obj.priority= in1;输出信号为指定的优先级值。Out1 = obj.priority;events = [obj.eventForward(“输出”, 1,0)...obj.eventGenerate (1,“mygen”、obj.period obj.priority)];结束

实现自定义块

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

  2. 元素创建SimEvents模型MATLAB离散事件系统块,斜坡块,一个实体终结者块和两个Scope块。如模型中所示连接块。

  3. 斜坡块,设置5而且初始输出10

  4. 实体终结者块时,可以显示到达块的实体的优先级值项行动字段输入此代码。

    coder.extrinsic (“流”);流(“优先级:% d \ n”、双(entitySys.priority))
  5. 右键单击自定义中的实体路径实体发电机实体终结者并选择日志选择信号

  6. 模拟模型。

    1. 方法的输出斜坡块。例如,输出值变成1520.25,30.对于模拟时间123.,4,分别。

    2. 模拟数据检查器显示实体被转发到实体终结者数据大小为1 × 12的块。

    3. 您还可以从标记为Entity priority的范围观察生成时间的优先级值123.456789,10

另请参阅

|||||

相关的话题

Baidu
map