Jump to content
Simio Forum

Seizing workers in between models


Recommended Posts

Hello,


Is there any efficient and easy way to seize a worker from the main model into a main model?

I have my main model which is the entire plant and a sub-model which has only machinery objects. The sub-model is placed into the main model and I want to seize an available worker which is placed in the main model every time the batch on my workstation(within submodel) has been proccessed.

Could you please give me any tips how can I overcome this issue?


best regards,

Dariusz

Link to post
Share on other sites

Dariusz,


This is the same 'problem' as placing a server in a model and having the server seize a secondary resource for processing. As all the Simio objects are open, you can copy/subclass the server and see how it does this.


In short, here's how it can be done:

1. Give a property to your machinery object of 'seize resource' or 'available worker'.

2. Create a process in your machinery object that seizes the resource property.

3. Create a process in your machinery object that will release the resource property when no longer needed.

Link to post
Share on other sites

Thank you. I could manage to seize specific workers but how can I sezie them from a list which is in my main model?


I am creating a transporter list property in my machinery object

Creating a seize process, but i cannot refer to the operatorsList from my main model.


Any suggestions...?

Link to post
Share on other sites

You can seize from a list. You'll notice the server has the ability to seize a resource from a list -- therefore we can do it too!


All you need to do is create a property to pass in of a list instead of a specific object, and set the seize step properties to seize from a list.

Link to post
Share on other sites

Do you mean to create enumeration property?


I think I have managed to do that. Thank you so much for your help!


Ps. How can I define a search expression to search the list of transporters and find a free transporter? I have tried with Candidate.Object.Is.MyVehicle (subclassed object MyVehicle) but it always finds me the same Vehicle - MyVehicle1. I want that search to find MyVehicle2 when MyVehicle1 is currently transporting something. This is because I want to assign the number of moves from A to B and B to A and now I am getting this value assigned only for MyVehicle1


Additionaly - how can I make monitor to trigger a process each time my state value is incremented by 2? Discrete change triggers the process each time the value changes, treshhold value triggers the process ONCE when the value crosses current treshhold.

I want i.e to trigger a process every time the machine produces X batches(i am keeping a track on batches produced by a state value). How can I do that?


Best regards

Dariusz

Link to post
Share on other sites

Dariusz,


I don't think I've explained myself very well, as if you were 'seizing from a list' the way I described, then the first transporter in the list that is available would be selected, automatically covering your question.


1) Create an object list property in your object.

2) Set the seize step to 'seize from list' and give it the object list.


The seize step will automatically select the first free object.


I've attached a model demonstrating this.


This model has two transporter instances which even have a population of 2. These transporters have been added to the list 'ObjectList1'. I've created an object with an object list property called 'object list name'. This object seizes an object from the list on an event.


The running model has four of these seizing objects. Pushing a button in the facility will fire an event, triggering the object to seize a transporter. The transporters will be seized one after another.

SampleModelOfSeizingFromList.spfx

Link to post
Share on other sites

Thank you for the explanation.

I forgot to mention that this treshhold value should be incremented by 2 each time the batch is produced but when it finishes the last batch it should be reseted back to 2. I have tried using following syntax - Math.If(MonitorBatchesProduced.CurrentThresholdValue ==Press.ProcessingActivity.BatchesRequiredFor(PlantEntity), 0, MonitorBatchesProduced.CurrentThresholdValue +2 ) but it results with following error:


How can I overcome that issue? Search step before this assignment?

Ps. How can I deal with transfer deadlock situations?

error.thumb.PNG.7db96d77229384cdf6f18ea50f534af7.PNG

Link to post
Share on other sites

Looks to me like your error is occurring because you have the 'wrong' associated object with your process.


Is the press your associated object, or your plant entity?


Regarding deadlocks -- What do you mean by transfer deadlocks?

Link to post
Share on other sites

I have dealt with this problems. Regarding deadlocks - two travelers passing through the same node(i.e. BasicNode) in a different directions are getting into a deadlock and get blocked.

However, as I need to count only the movement numbers i have set transporters to run in a free space.


Another problem which I encountered and I really count on any help is:

As I explained previously, I want the worker to be seized each time the batch of products is finished by the workstation. I succeded to seize the workers, however, one machine sometimes is seizing more than one worker and I have the situation where 3 workers are at machine X, in reality the required work can be done by only ONE operator. How can I define the seize step to Seize one worker only?


Best regards

Link to post
Share on other sites
×
×
  • Create New...