Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by CWatson

  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.
  16. If you have a batched entity (through Batch step or Combiner object), there is only one parent entity and the rest member entities. Thus, one entity exits the parent node, the others exit the member node. If the Separator instead did a Make Copies instead of the Split Batch, you still have the original parent entity (incoming entity) and the member entities (copies). If you need to split the entities in different directions, you should look at having both of those nodes connected to a single node where you then make the decision to go in two different directions.
  17. Within the Server, Combiner and Separator, if you change the Process Type property (under Process Logic section of properties) to 'Task Sequence' then you will get a repeating editor for Processing Tasks property - within that editor for adding multiple processing tasks, you can specify the Process Type as 'Sequence Dependent Setup' where you then reference a Changeover Logic element. This allows all three of these objects to include setup times.
  18. 1) Depending on how the entity is created in the first place, that assignment may already have been made. So, for example, if the table includes the arrival time and is used as an arrival table within a Source (Arrival Mode is set to 'Arrival Table'), then the entity that is created automatically has a row reference to the arrival table row from which it was created. Alternatively, if you create an entity, you can use the SetRow step to assign it a specific row in a specific table. ** The entity doesn't ever become a token ** Please refer to the Tokens page and the Tokens and Entities page within Simio help for more information. Tokens can be associated with entities (or with a model if a process is triggered by a timer, event, etc.) 2) If the entity has a row reference within a data table, simply referring to the TableName.ColumnName to access the table information is sufficient. This will automatically retrieve the information in the TableName table, ColumnName column at the designated row that the entity has a reference. If the entity doesn't have a reference within that table, Simio will give an error if you attempt to refer to the data in that fashion. Alternatively, you could reference a TableName[RowNumber].ColumnName to specifically reference a given RowNumber. Refer to Data Tables page within Simio help for more information.
  19. The Save Index Found property of the Search step (under Advanced Options) will store the row number that is found. ** IMPORTANT NOTE ** - this will relate to the actual row number in the table if it is not a relational table. For relational table rows, this value will return the row within the relation only.
  20. Alternatively, you can have a Changeover element where you specify the Use Changeover Matrix property as 'False'. This allows you then to specify From Value Type (of an operational attribute) to a To Value Type and a Setup Time expression. The From Value Type and To Value Type may be specific values or simply to a 'Same' or 'Different' value.
  21. If the entity is created (similar to the Bicycle Assembly example in Simio) using an arrival table where the arrival time is specified in the table, the entity will automatically be assigned the associated row in that table. To assign a row reference to an entity without such logic, you would have to have the entity enter an add-on process when it is created and then use the SetRow step to assign the entity an associated row in a given table. The GlobalCurrentRowNumber you mention above could be used as the RowNumber assigned for the entity within the SetRow step, provided there were no conflicts with relational tables.
  22. The various resource type objects, such as Server, Combiner, Resource, etc. as well as moveable resources, such as Workers and Vehicles have Resource States that are automatically assigned by Simio. See the List States page in Simio for a listing of the resource states for each object. You can evaluate the state by using the ResourceName.ResourceState in an expression, such as in a Decide step - Server1.ResourceState == 3. These resource states can also easily be viewed by clicking on the object itself and going to the Active Symbol section of the Symbols ribbon to display the animation symbol and listing of the various states and their associated numbers.
  23. Within the Separator, there is a State Assignments section of properties - within this, there is a section for assigning 'Before Member Exiting' where you could assign the members different values based on a distribution or some other expression.
  24. Not sure which SimBit you are referring to for Entity by data table, but based on what you would like to do, using relational tables should help. Please review any of the Relational Tables SimBits (Using Relational Tables, Entity Follows Sequence with Relational Tables, etc.) - Basically, you would have a table that includes your Part names (materials or entity types) - that column would be 'Set Column As Key'. You could then have a related table that is your orders - which would have the order numbers and would use a foreign key property for the part number (thus multiple orders could reference the same part name). You may wish to review one or more of the Scheduling examples (Examples under Support ribbon) as well, as those have multiple relational tables and deal with parts, components, orders, etc.
  25. The easiest way to do this dynamically is to use the Dynamic Selection Rule property on the Server (or other object, such as Combiner, Worker, etc.). You can use the 'Standard Dispatching Rule' option for that property to then include a Dispatching Rule, such as FirstInQueue, LeastSetupTime, EarliestDueDate, LargestPriorityValue, etc. This allows you to specify a TieBreak Rule as well. Using the dynamic selection will not determine which entity will be selected from the queue until the resource (object) has released an entity and is available.
  • Create New...