Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


CWatson last won the day on November 20 2018

CWatson had the most liked content!


About CWatson

Personal Information

  • First Name
  • Last Name
  • Company/University Name


Recent Profile Visitors

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

CWatson's Achievements


Newbie (1/14)

  • Week One Done Rare
  • One Month Later Rare
  • One Year In Rare

Recent Badges



  1. Within a Server, Combiner or Separator object, you can specify the Process Type as 'Task Sequence' allowing you then to define any number of Processing Tasks for that Server, Combiner or Separator. The processing tasks can be serial or parallel tasks. By using parallel tasks, for example, with a different worker (nurse, PA, Doctor) required for each parallel task, the tasks are done independently, but can be done at the same time. Parallel tasks can be specified using the same Sequence Number (see Task Sequence and Task Sequence - Processing Tasks sections of Simio help). So, for example, you can have the processing tasks within a Server all have a sequence number of 10 (meaning parallel). One of them requires a Nurse for X time units, another requires a PA for Y time units and the other a Doctor for Z time units). The patient doesn't leave the Server until all 3 tasks are completed. However, if the Nurse is available to do his/her task, they will start. Likewise for the others. And the workers can move on to other tasks at other Servers (patient areas) as well when they are done.
  2. The worker, by requirement, has a capacity of 1. The initial number in system (population) of the worker can be set to greater than 1, meaning you will get a number of capacity 1 workers to be used independently. For example, if you have FirstShiftWorker, you can specify the Initial Number In System (under Population grouping of properties) to 'X', let's say '4'. You will then have a FirstShiftWorker[1], FirstShiftWorker[2], FirstShiftWorker[3] and FirstShiftWorker[4], each with independent statistics/ location/ tasks, etc. This worker can then be referenced in a Server with multiple capacity and each worker will be seized separately when required.
  3. You can still use your various 'lists' of servers in SetA, SetB, etc.). You still will need a Sequence table with the Sequence Destination property column. This tells Simio within the Sequence table the destination to route. So, within your Facility window, add a TRANSFERNODE before each 'set' of areas, let's say named SetA, SetB, SetC, SetD. Then, within the TransferNode, use the 'Select From List' for Entity Destination Type property and specify the appropriate list (SetAList, etc.). Then, within the Sequence table, route to the TRANSFERNODE that uses the particular list - so in the above, you would have within your Sequence table, SetA, SetB, SetC, SetD and Input@Sink. Within each of your Server's output nodes, specify Entity Destination Type as 'By Sequence'. You may wish to look at the example named SchedulingDiscretePartProduction to see the layout of the nodes within each section and the Routings table used (this is a much larger example, but the concept of the nodes, the sequence table and in that case a RoutingDestinations table (which is like a node list in Lists) is basically the same.
  4. You could put the two (or more) separator input nodes on a list and then at the Server output node, select from the list of separators - then you could use the Selection Condition property to select between those that are actually available, using either a table value or something like 'Candidate.Node.AssociatedStation.Capacity' expression checking the status of the separator capacity (if offshift).
  5. Within each of the Source objects, you would specify (within the output node of the Source) that a worker is required to transport the entity(s) to the next node. The decision making of the worker is then handled by the worker itself. The worker has several decision making options - first of all, for transporting, the worker has Transport Logic properties, one of which is the Task Selection Strategy property, which can be set to First In Queue, Largest/Smallest Distance or Largest/Smallest Priority. In addition to that, under the Worker's Add-On Process Triggers properties, you have the Evaluating Transport Request process that can be used to accept or reject any transport request. You can add custom logic, a distribution, etc. within a Decide step in that called process and simply then accept (Token.ReturnValue == True) or reject (Token.ReturnValue == False) a request (which is the first in the allocation queue, as ranked as noted above). You can use the requesting entity location within the decision logic as well.
  6. Please either attach a copy of the model you are referring to with this post or send the model with description of problem to support@simio.com. Thank you.
  7. You can do this in several different ways. If you simply have 2 entity types, an easy way to do it would be with a Math.If statement within the Processing Time property. For example, Math.If(Is.Red, 2, 4) - given you had 2+ entity types, the ones that have the entity name 'Red' would process for 2 minutes (or time units specified), all others would process for 4 minutes (time units). You can have multiple Math.If statements (Is.Red,2, Is.Green,4, Is.Blue, 5, 6), for example. Of course, you can use more complex values than 2, 4, 5 for processing times. A more flexible way would be to store the information within a table. That is, have a data table that includes the names of all the entity types in an Object Reference type (Entity) property. Then, within that column, set the Auto-set Table Row Reference property to 'True'. This way, when an entity of a given type is created, it has a reference to the row associated with its name automatically. Then, have another column of type expression (so you can specify a distribution, etc.) which includes the server processing times for each entity type. Then, within the Server, reference TableName.ServerProcessingTimeName as the processing time.
  8. If the entity has a SetRow assigning the row to 1 in TableA, then toget to column1 (you already have a pointer to row1 via the SetRow assignment) - you would simply say TableA.ColumnName. Simio will know that it should use row1.
  9. You may wish to have a table listing each of the servers in the assembly line. Then, within the Object column (specifying the name of the server), set the Auto-set Table Row Reference property (under Advanced Options for an Object Property) to 'True'. This will automatically set the row reference to the row associated with the server in the assembly line. Then, you can have MTTF and MTTR columns that you refer to for each server and simply reference the table/column, such as ServerTable.MTTF or ServerTable.MTTR within the server's themselves.
  10. You cannot control the entity id number yourself, that's internally controlled. However, you can use a model state variable / model entity state variable to do something similar with your own count, based on the entities generated. When an entity is created, simply assign the model state variable == model state variable + 1. Then assign ModelEntity state variable to the model state variable.
  11. You could use a vector to store the entity locations - you'd have to first give each entity a unique entry into the vector - thus the first entity into the system would use vector[1], etc.. This would only be a reasonable option if the number of entities (trucks) are fixed at a max reasonable number (10, 100, etc.) so the vector could be sized. Efficiency-wise, you may wish to update the entity locations at nodes, as opposed to every x seconds. If you update every x time units, you would need to first use the Search step to search the entities, getting a token for each entity. The vectors can be updated using the entity index into the vector (perhaps store as modelentity.priority if not using priority for any other reason). ModelEntity.Location.X can be used to access the entity location. There is a SimBit titled FindAMinimumState value which describes how to use the Find step with a vector variable. Another option would be to use an output table (depending on your Simio license version) to store/update information on the entity/location. If you have a base model that you have problems running and can share here, please do. Otherwise, send a base model to support@simio.com.
  12. Yes, let's say your entity is created using an Orders table, where the entity has a 'row' in the table associated with it (with arrival time and other data, presumably the customer ID as you mentioned from the excel file). Then, within the ModelEntity object, find the Display Name property (under Advanced Options). The table name/column name can be referenced within the Display Name (and then the Display Name, ModelEntity.DisplayName) referenced from the Dynamic Label Text property - see the SchedulingBicycleAssembly example under Support ribbon, Examples. Then, when the entity moves around the maintenance shop / manufacturing floor, etc., it will be labelled with the information associated with the entity (ID) from the table.
  13. One option would be to put the 2 (or more) workers in a 'List' of workers and simply select from that list, and use the Number of Objects property (under Advanced Options) set to 2 (or the number of workers in the list that are needed. Workers can be placed on multiple lists. Another option would be a more complex table based approach. See the UsingRelationalTablesToDefineTaskResourceLists SimBit for an example.
  14. Based on your description, you could add a new State variable to the ModelEntity. This state could then be used to group into their separate buses. See the SimBit named 'LogicBasedOnEntityState' for more information on adding a state variable to the entity. I'm not sure the entities need to be batched, but could be sent in different directions based on their new state variable (BusNumber, as an example, assigned to 1 or 2). If they go on a completely different 'routing', the ModelEntity.BusNumber could then be used in a Decide step within a process that would assign a sequence table to each - using a SetRow step. See the 'ChooseAlternateSequence' SimBit for an example of using the SetRow step.
  15. Please either attach the model you are referring to or send an email with the model to support@simio.com. If your data table with the 'certain trait' is based on the entity types themselves, then the entity should have a row reference to that table automatically and referring to the DataTable.Characteristic should work. You may wish to refer to the SimBit named EntityFollowsSequenceWithRelationalTables.*, and specifically look at the JobTable data table that has a listing of the entity types - having a column for your characteristic trait in this column would associate that value with the particular part type.
  • Create New...