Jump to content


  • Content count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About ptkolodziejczyk


    Delft, NL

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. ptkolodziejczyk

    row number

    I am afraid you need to go around and create a state variable within the entity to hold the row number when you set the table row. Then, for a new entity you need just to use it for the SetRow step.
  2. First, in your project navigate to ModelEntity or any other entity class. Right top corner. Then, in the definitions tab the third group is states, where you can define variables. These are then specific to the entity class.
  3. ptkolodziejczyk

    Matching Entities to Workers

    You can create a worker reference in an entity and point it to the table value upon patient creation. Then call it anytime when needed. Alternatively you can search through the table anytime you use it. However, I would like to advise against it, and really advise against re-creating historical situation in a simulation. There is little validity in a model, which is fed historical data and then the results are compared yet again with this data. Time between creation and completion of an order should be a stochastic distribution, and the chosen PT a causal effect of the model rules. As for a limitation for patients seen a day, just create an integer state variable and a monitor, which fires a process after a threshold is breached. Tallies are used for a different purpose, which is comparison between different measurement of the same value (but typically a different entity, like time between Point A and Point B)
  4. ptkolodziejczyk

    Buffer without Server/WorkStation

    In my opinion you should use a custom node with a station element. Additional storage elements might be required depending on how sophisticated are your rules for job allotment. You can even add extra storage elements to the servers if pre-selection per machine is desired. Mind that a station represents a physical location and an entity can only be in a single one at a time, while a storage element is a custom queue, and an entity can be in multiple of these queues (but not twice in one queue). In a simple situation an entity (job), having left server n, automatically enters the buffer station at the node and is ranked, based e.g. on priority. Then, when a server m finishes a job, the first entity in line goes to it.
  5. Unfortunately I cannot open Academic licenses but from what you wrote you are comparing your list reference rpSynchroStation to a name and thus get a mismatch comparing reference to a string. To solve it you need to search through your list to actually get the name. I do not know how the model is set up, but if you need to do a multi-level search (for every output node search through the list), you need two searches after each other. Mind that if there are a lot of elements in these searches, and if you execute it often, you might get performance issues.
  6. ptkolodziejczyk

    Server Processing State Variable

    To acess a state variable of an entity that is being processed at a server (let's call it Server1) you should type the following into the label, assuming there is only a single entity at the server: Server1.Processing.Contents.FirstItem.ModelEntity.Name Mind that you will get a warning if you run with such expression in a label, because you will be at times trying to reference an entity at an empty station. Then, you should expand the expression to: Math.if(Server1.Processing.Contents.NumberWaiting != 0, Server1.Processing.Contents.FirstItem.ModelEntity.Name, "")
  7. ptkolodziejczyk

    Rewind Animation

    I agree it would be very cool to go backwards in simulation time but typically (never that I heard of!) the construction of event handlers in the simulation engine does not allow it. For Simio to add it on top it would probably require recording the state of the entire system on every event, which is infeasible due to massive amount of data, even for 5-10 seconds. However, it should be possible to do it for the animation only, without model tracing or watch window. I guess you could record a movie. Finally, when it comes to debugging, you need to place breakpoints in the right places with appropriate stopping conditions on them and then trace it. For most of the errors visual inspection is just the first step to identify the problem and there is no escaping from getting your hands into tracing window, especially if you want to be 100% sure the simulation behaves as desired.
  8. ptkolodziejczyk

    Time TransferNode is occupied

    You can create a list state with 2 values: occupied or empty. Then every time an entity enters you set to occupied and when it leaves you check if it is the last entity and if so then set it to empty. The rest is taken for you and you can access percentage or total times easily. Otherwise, you need to have 3 global variables, call them Sum, Aux (both Real) and and Occupied (Boolean) to keep track if occupied. Then: OnEntered: If not Occupied then Aux = TimeNow, Occupied = True. OnExited: If Node.NumberTravelers == 0, then Sum = Sum + Aux - TimeNow, Occupied = False.
  9. ptkolodziejczyk

    Time TransferNode is occupied

    To know the exact times for individual entities you need to define state variables within you entity and compare the time between OnEntered and OnExited events. If you want to know general statistics of all you entities you should use a Tally Statistics. Then you also measure waiting time OnExited as: TimeNow - ModelEntity.TimeEnteredNode
  10. ptkolodziejczyk

    Complex Selection Condition doesn't work?

    The first expression you wrote is not a selection condition but a logic statement, that can evaluate to 1 or 0. For selection you need to use the Candidate construct as in the second expression. E.g. ((Candidate.Server.AttributeA == 1) && (Candidate.Server.AttributeB == 2)) Mind that there is a difference between using .Is and ==, the first of which checks if the candidate belongs to a particular class, and the latter checks for a value. Finally, AssociatedObject to a node might not be assigned. Make sure it is and that it is of the right class.
  11. You cannot delete elements from a list during runtime. However, you can create a custom queue (Storage element) and using the Insert and Remove steps control the elements that are there. Searching through a queue is almost the same as searching through a list.
  12. ptkolodziejczyk

    Show properties when running

    Add a floor label with the chosen state variables. Then you can zoom in to the object and see. Also, in Simio nomenclature object properties are constant through the run. Alternatively you can see chosen values via the Watch window (right-click --> Watch), though it is rather inconvenient.
  13. ptkolodziejczyk

    How to simulate picking in a warehouse?

    Hi, I think I have a few suggestions, though mostly about the concept and not your example models. Of course I do not know the entire problem, however we have done some complex warehousing recently, and I have come concerns about your approach. First of all, it is unlikely that you are dealing with picking orders on paper, they rather have some tablets/PDA. Adding them to transporter RideStation is unnecessary, I would rather use a custom queue holding the information about them and physically have the order entities somewhere else. This is also easier for collecting statistics. As for a transporter, typically we build a new one or subclass and make serious alterations to the default vehicle. The reason is, that while the default transporter is easy to start with, it has lots of functionalities that you do not need, and that might interfere with your intended behaviour. Especially searching global VisitRequestQueue, dwelling in a node, and next destination might be a problem. Messing with OnVisitingNode process is typically risky. The most important part is actually not how you model your picker, but how you deal with the network. I assume straight line movement in freespace is not an option. In the setting you have in the examples the moment you add a second picker, you are dead in the water with deadlocks. Of course, changing bidirectional paths to two unidirectional ones will help, provided you are not worried about picker collisions or spacing constraints. Typically you have a lot of narrow passages in a facility, and making the pickers wait until the path has been cleared is in our experience the biggest challenge. Making sure that forklifts go to the right destinations at the right time is easy in comparison to avoiding deadlocks with 40-50 forklifts. Finally, to help with your problem in example models I think there is a better solution. Make sure the entity has a reference to the transporter used (transporter to entity as well), and that the vehicle remains in place. Then, after the processing has finished you fire an event to the vehicle and stop the entity. Firing the event starts an embedded vehicle process with a simple Pickup step with Node Name setting to: ReferencedEntity.Entity.CurrentNode and voila, you have it back in the RideStation. Vehicle does not have to be at the same node to pickup entity. You can also use transfer step but then need to manually execute OnRiderLoading. In case there are more entities you create a vector and search through it, should be easy. Also, for extra nice looks or if you need to introduce equipment constraints you can do something as presented here, only with e.g. a level picker: http://www.simio.com/forums/viewtopic.php?f=36&t=2334 Additional constraint might be if you have pallets, carts or container boxes that you need to return to a collection point when emptied. These can be tricky.
  14. ptkolodziejczyk

    Arrival Table and property assignment

    A SimBit is a small sample model, explaining a concept. You can find them in the Support tab, first from the left "Sample SimBit Solutions" and then search there.
  15. ptkolodziejczyk

    Searching for alternate function to RandomRow

    Ah, so you want to create 10 different entity types at the same simulation time? Why? What is the fundamental difference between them? Typically, you have 10 initializations of the same type, that you distinguish by giving them various values of state variables, especially in a small model like yours. My suggestion from above will not work. The error happens because you have not set a row in the table. Make your own add-on process that handles it if you really want to do it like that, I do not think the standard library source supports what you are trying to do. I would seriously rethink your approach though, it does not seem right. As for states, if you want your entities to have different processing times, the easiest way is to create a state for your ModelEntity that you use as a processing time. It won't automatically read the values from a table without setting the appropriate row, and the entity does not 'remember' it. Well, it can but that would be a bit more difficult.