Grouping entities in SimEvents

조회 수: 2(최근 30일)
Daniel Bons
Daniel Bons 2021년 2월 24일
편집: Abdolkarim Mohammadi 2021년 3월 17일
Hi,
I am currently trying to model a warehouse and shipping process using SimEvents. For shipping, I want all items that belong to the same order grouped together. Think of it like putting all items in an order on a EUR-pallet or in a larger box. The amount items in one order could vary which means I need to find a way group different amount of entities together based on orders. I have been looking at the Entity Batch Creator but that block only allows fixed batch sizes which would not work for me. I have also been thinking about using the Composite Entity Creator to combine items with an order and put the combined entities in a store awaiting shipping. However, when I want an order to be loaded onto a truck I need a varying amount of entities moved from the store to the truck at the same time since that is how a fork lift loading a EUR-pallet from the warehouse onto a truck would work in real life. To my knowledge, there is no way of varying the capacity of an Entity Server which leaves me with the same problem as with the batch creator.
Is there a way to dynamically group entities together in Simulink/SimEvents?
  댓글 수: 1
Erica Dahlberg
Erica Dahlberg 2021년 2월 25일
We have had exactly the same problem in another project. Let me know if you get an answer!

댓글을 달려면 로그인하십시오.

채택된 답변

Abdolkarim Mohammadi
Abdolkarim Mohammadi 2021년 3월 4일
편집: Abdolkarim Mohammadi 2021년 3월 17일
Simevents is based on entity-storage system notion, and its standard block library only includes blocks that include only one storage. Blocks with more than one storage must be manually authored using MATLAB Discrete Event System or MDES.
Your block should have two inputs, two queues, and one output. Input 1 accepts orders and input 2 accepts ship arrival event. When a ship arrives in input port 2 (entry event), an iterate event action is triggered on the queue 1 to iterate over the entities in the queue and assign different order sizes as the attributes of the ship entity. Finally, the ship is forwarded (forward event action) from queue 2 through the output port, and finally, all of the orders in the queue 1 are destroyed (destroy event action) within the iterate event action. To sum up, you need a method that roughly looks like this:
function [Events, Ship] = ShipEntry (Ship) % When a ship arrives in Storage2
Event1 = obj.eventiterate (Storage1, Ship); % iterate over Storage1 according to OrderIterate method below
Event2 = obj.eventForward (); % then forward the ship to the output
Events = [Event1, Event2]; % list of evnet actions
end
function [Events, Ship, Next] = OrderIterate (Ship) % when iterating over the storage
Ship.data.Product1 = entity.data.Product1; % assign the order value to the ship
Events = obj.eventDestroy (); % destroy the Order entity in the queue
Next = true; % do this unconditionally for all of the orders in storage 1
end
Note that I only mentioned the important parts. You need to pass input arguments according to the documentation. MDES is very flexible and can be used for any system.
  댓글 수: 1
Daniel Bons
Daniel Bons 2021년 3월 8일
Thank you! This seems like just the thing we need! I will test it right away

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by