Jump to content

Simio crashes while running simulation


dadom09
 Share

Recommended Posts

Hello everobody,


I've encountered a following problem with running simulation in Simio. I am in a testing phase of just the logic of my model, however during a simulation run for 5h and limitations of 4-5 orderes created I get an message saying that number of tokens exceeded 100k, when i continuee simulation it goes on until 98% where it completely stops, simio doesnt respond and the only solution is to restart the software.


I include a model as an attachement. Maybe somebody would be able to find out where is the problem.

Thanks in advance for any help.

NewLogicModel v4 MAIN.spfx

Link to comment
Share on other sites

It is hard to troubleshoot a model without knowing the system under study and what you are trying to do. That being said, there a couple of things that jump out at me.


First, I would recommend testing your logic with a trivial data set, so that you can see what is happening. For example, did you know that you are creating two material source trigger events with the first order? The worker parks itself at output@Source1 on initialization. When the order creation logic starts and a purchase order is released, the worker transfers from the parking station, into the node, and on to free space. That triggers the “ReleaseMaterial” process, which starts the next material release ahead of its scheduled time.


Also, the arrivals table is not sorted in date order. That is not a problem for Simio, but it is a problem for your auto-increment logic on the Material Source. For example, the first order actually occurs at 6:01:46 (PO 122137) which is at line 21 in the arrivals table. However, the materials source points that created entity at row 1, so the wrong volume and wrong entity type are created.


Again, I would start testing your logic with a very simple data set to see if the model is behaving the way you expect.


However, before you go down that route I might suggest re-visiting your conceptual model and model approach. The approach you have started here relies on the creation of more than 800,000,000 entities over the model run :shock:. As a sanity check, the default max number of entities (which can be overwritten) is 2500. Creating that many entities (and associated tokens) will require a large amount of computing resources. Even if you verify the model is behaving the way you intend, I can pretty much guarantee you will have performance issues with the current approach.


Once you have decided on a tractable approach and have started modeling, there are several built-in tools to help with verification and validation: the trace window and the profile window. Both of these can be used to figure out what is happening in the model—the profile window is particularly helpful for identifying model performance issues.


-Adam

Link to comment
Share on other sites

According to the error messages it seems simio can not handle your order volüme.

I do not examine your mode logic but I tested the model with order volüme 10 (for each row for your table) and the model worked without any error messages. But, as agraunke said your model logic should be tracked carefully. For example, I noticed (and fixed) one of the decide step is defined as conditon based but there is no condition specified. and also, I agree with agraunke that there could be some parking problems. For example incoming entities are transferred to stacker outputbuffer and then parked there? is this required and right?...

anyway, test your model with different parameters.

img_1.png.4e94cf528f70e29a82b46cfb5fbbb32b.png

img_2.png.04507cbd78b3720009ca1d70666f2d52.png

Link to comment
Share on other sites

Your model seems to be valid. All things work right.

I made some simple chages (i.e., setting order volüme to 1000 and delete some steps and add one parking point etc. they all are included in the attached model).

if you watch the animation you will see your logic Works. the problem is apparently seen.

NewLogicModel v4 MAIN.spfx

Link to comment
Share on other sites

Adam, Gocken, thank you for your input. I have been trying to approach it in a different way so it doesnt create that many entities. However, I couldn't keep a track on the amount of specific goods produced. The model is not entirely finished this is why there might be some empty "decision" steps and worker behaving in a strange way.


Any suggestion of how can I keep a track on the goods manufactured and their amount without creating 800k of entities?


Let me first explain you the aim. I am working on my final thesis project, where I took a real system under the study. Now I am creating the AS-IS model, which will be the base for further optimization. I want to investigate a potential of implementing cellular manufacturing system. The goal is to see if it's possible to reduce working time, setup times, inventory level and improve on-time delivery.

There are 37 workstation where each of them has a stacker machine assigned(for batching of product units into specified by batchsize property groups). Product type depends on the tool(approx. 200 different tools) used in the machine(I want to use a resource to represent a tool however I haven't implemented it yet).

Taking into consideration that I'd like to have an overview on the ProductType and its amount produced, as well as specific material utilization for goods manufacturing I have therefore decided to follow this approach. I have been trying to assign a ProductType value into the string state but that was resulting with an error. I want to run simulation for entire year based on the actual orders.


Looking forward for any suggestions.


Best regards,

Dariusz.

Link to comment
Share on other sites

you can simply use material quantities instead of creating huge number of new new entities (avoid using create, it is not suitable for your problem. you should think each product type as if they are materials, define material element type colum in your arrival table. You can benefit from autocreate property since you have much more product type). By this way you not only satisfy the current number of entity limits of the simio but also simplify the logic of your model. Just use material, produce required number of materials then increase the number of quantity available. While separating them or batching just simply use Workstation and BOM structure. The prosed logic needs to be adapted to your problem... In summary you should think a bit different...

Edited by Guest
Link to comment
Share on other sites

Thank you. I have tried using the approach with the materials element. I've used ''auto-create'' as suggested so it has created material elements for me.

However my concern is regarding batching. How can i batch ''produced'' units if they dont exist as entities but as materials. You mention about workstation and BOM structure but BOM is very simple...it takes a part of material and by a single press hit a specific amount of products is created. In such a case I dont think there is a sense in creating BOM.

In the press logic I want to use steps ''consume'' and ''produce'' instead of create, but that will produce me specific(OrderVolume) amount of ProductType while consuming a MaterialType. How then can I batch these materials?

Link to comment
Share on other sites

1) Define rowmaterial1234567 material type element.

2) Define Bommaterial material type element.

3) Deifne batchedmaterial1234567 material type element.

4) produce required number of rowmaterial1234567 materials from your table (order volüme)


see the attached file for usage of these materials for Workstation object.


for example if you have 507 quantities of produced rowmaterial1234567 from which you want to produce bathces of size of 50. The Workstation will produce 10 quantities of batchedmaterial1234567 material (batched materials). Note that in this situation 7 quantities of rowmaterial1234567 will be remained.


Note that this is a simple not working example. I included it only for illustration purposes. You should extend this logic. For example, Material name of BOMmaterial should be referenced to your table appropriately.

batchedMaterials.spfx

Link to comment
Share on other sites

thank you. I understood the concept also from the printscreens you added. The problem is that I need to track operator movements and this batched entities are waiting to be moved from output at stacker to a container by the operator...should I use then create step and create amount of OrderVolume/BatchSize?

I am completely lost...


edit:

Problem solved.

Link to comment
Share on other sites

Define “processed batch” add-on process trigger at the Workstation.

The process should include seize “worker”, move “to a specified node”.

Define another add-on process at the specified node. It should be “entered”.

In that process use release “worker” step, “consume” step for destroying the batched materials (the logic is like destroying an entity. Since we use material instead of entities we should use consume for this purpose).

Then, at the end of the simulation collect related statistics to your purposes. For example, total distance the worker traveled. Note that, since the arrival and departure distances to Workstation are equal half of the total distance the worker traveled is the distance bathced materials traveled. And you can simply collect other statistics (I do not know what are they) by using somewhat the same logic.

Link to comment
Share on other sites

Thank you gocken! Your help has been exteremly useful! I appreciate it a lot.

I have solved batching in a slightly different way.

However I am having other difficulties.

I.e. the orders which are being processed are parked at the node. I want to unpark them and send to Sink1 as soon as produced materials corresponding to that order enters Sink2 and collect statistics.

Additionally, also while entering Sink2 I want to increse QualityAvailable state by the Volume produced, however while assigning this state simio sends me an error that ''simio referenced definition type XXX does not match executing type XYZ. Is it beacuse of the tokens or what?

I am attaching the printscreen of my model to visualize the described above situation.

model.thumb.png.adb52d6d412c1670056956b8c838ec47.png

Link to comment
Share on other sites

Define a statevariable for modelentity. For example, modelentity.orderID. Assign it to OrderNumber from your table (i.e., modelEntity.OrderID=arrivaltable.OrderNumber) after creating the entity.


again, you can either define an individual add-on process or add some extra steps to your previously defined process for seizing worker. I prefer to add some extra steps to an existing one for convenience.


1) before seizing worker object or after seizing it (i.e., I mean the appropriate place of the new step is up to your logic) you should assign the orderID to a state variable probably a string type while the "model" object is selected at the navigation window. Let it be IDOrder and assign IDOrder=bathcedmaterials.name. I assume that the material name equals to your order name. Here you should note that, this assignment should be made at the time of the worker's coming to take "batchedmaterials" to input@sink2. batchedmaterial name (i.e., IDOrder) and orderID should be matched. any time delay can cause IDorder's value to change and wrong entity will be removed from parkingstations.allocation queue.

2) define a search step---> be sure queuestatename of this should be: parkingstations.AllocationQueue, match condition: candidate.modelentity.orderID==IDOrder.

3) at the found branch of search step define a remove step. set queuestatename=parkingstations.AllocationQueue.

4) at removed branch define a transfer step. from : currentstation, to: node, node name: input@sink2.


note: ***if you have not other purposes*** you should not increase the material.quantityavailable, simio automatically updates this quantity.


you should fill in the details...


that's it...

Link to comment
Share on other sites

×
×
  • Create New...