基于MATLAB的离散事件系统资源调度与数据存储内存块
这个例子展示了如何使用MATLAB离散事件系统块和数据存储内存块之间的数据交换来建模资源调度。
该示例模拟了一个生成两种类型部件的设施,部分
而且B部分
,经过加热过程。两个部分从同一个资源池中获取加热过程所需的资源。资源的获取部分
优先级更高。当部分
获得一定数量的资源,B部分
只能获得1
资源。这个约束要求在进程之间共享资源的总数,以及基于共享数据计划的获取。
模型描述
在模型中,实体生成块生成类型的实体PartA
.部件被发送到存储单元,从“资源池”块中获取资源。一个MATLAB离散事件系统块,使用PartAStorage
System Object™表示存储单元。
系统对象™定义获取资源的数量和资源获取事件部分
.
函数[entity,event] = PartAEntry(obj,storage,entity,source)%将获取的资源数量定义为随机值。Amount = randi([1 3]);resReq = obj. resourcspecification (“资源”、数量);定义资源获取事件。event = obj.eventAcquireResource(resReq,“ResourceAcq”);结束
当部分
成功获取资源,则将实体转发到输出。TotalAcquiredByPartA
存储在数据存储内存块中的数据是否代表所获取资源的总数部分
.系统对象™首先调用存储在数据存储区a中的值TotalAcquiredByPartA
通过增加获得资源的数量来衡量价值。
函数[entity,events] = resourceAcquired(obj, storage,...实体、资源、标签)全球TotalAcquiredByPartA;%资源获取成功后,转发实体输出|1|. %。events = obj.eventForward(“输出”, 1, obj.Delay);%更新获取的资源总数。TotalAcquiredByPartA = TotalAcquiredByPartA + resources.amount;结束
该部件被发送到加热过程A,该过程由一个实体服务器块表示。当加热过程完成时,零件释放所获得的资源并离开设施。
在模型中,另一个实体生成器块生成类型的实体B部分
.部件被发送到存储单元,从“资源池”块中获取资源。一个MATLAB离散事件系统块,使用PartBStorage
System Object™表示另一个存储单元。
系统对象™定义获取资源的数量和资源获取事件B部分
.
函数[entity,event] = PartBEntry(obj,storage,entity,source)全球TotalAcquiredByPartA;如果A获得的资源数量大于% 30,那么B部分只获得|1|资源。如果TotalAcquiredByPartA > 30 Amount = 1;其他的否则,部分B可以获得任意数量的资源% |1|和|5|。Amount = randi([1 5]);结束resReq = obj. resourcspecification (“资源”、数量);定义重新获取事件。event = obj.eventAcquireResource(resReq,“ResourceAcq”);结束
资源的数量B部分
所获得的取决于所获得的资源部分
.这次收购是由PartBStorage
的值的系统对象™TotalAcquiredByPartA
为每个实体条目存储在数据存储A中。
成功获取资源后,实体被转发到输出。系统对象(TM)更新TotalAcquiredByPartB
并将其新值写入数据存储B。
函数[entity,events] = resourceAcquired(obj, storage,...实体、资源、标签)全球TotalAcquiredByPartB;成功资源后的%收购,向前的实体来的输出。事件=obj.eventForward (“输出”, 1, obj.Delay);%更新总数的资源收购。TotalAcquiredByPartB=TotalAcquiredByPartB+ resources.amount;结束
然后零件被送到加热工艺b,在工艺完成后释放资源并离开设施。
模型中的跟踪资源组件,跟踪每个部分的可用资源和已获得的资源数量。可用资源由可用金额,可用资源池块的统计信息。获得的资源部分
而且B部分
是从数据存储A和数据存储B读取值的数据存储读块的输出观察。
仿真结果
模拟模型。观察连接到数据存储读部分a的作用域块部分
获得30.
模拟时间前后的资源40
.
还要观察连接到数据存储读取部分b的作用域块B部分
获得1
模拟时间后的资源40
由于资源的优先级。