Jump to content
Simio Forum


  • Content Count

  • Joined

  • Last visited

  • Days Won


agraunke last won the day on September 8 2018

agraunke had the most liked content!

Community Reputation

1 Neutral

About agraunke


    Seattle, WA

Recent Profile Visitors

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

  1. When you bind a data table to an excel file, the file selection interface allows you to select any file on your local computer or any networked folder/server. (The button with three dots next to the "file name" input will pull up the file selection interface). Searching the help for "excel" will give you some more detailed info, too. You can also use the ExcelRead step, in conjunction with the ExcelConnect element if you do not want to use tables and table binding. These are "user-defined" steps and elements that are included with the software. -Adam
  2. The general idea is that you will need a process (maybe at the beginning node?) that uses the search step, and then stores the resulting expression in a state on the entity (such as MyTravelTime). Then, you can refer to that entity state in the travel time property of the time path. travel time --> ModelEntity.MyTravelTime Alternatively, you can refer to the row directly, if (for example), you have an integer state/property that indicates the entity type, and that corresponds to a row in the table: travel time -> Table1[EntityType].TimeExpression (Here EntityType is a state or property that you've set somewhere else, and corresponds to the index of a row in the table). Lastly, you can use the "set row" step in a process to link a row to an entity (or use the built-in Table row referencing properties on the source object). Then, you'd just need to reference the table column in the time expression: travel time -> Table1.TimeExpression -Adam
  3. I think the queue state name expression you are looking for is something like "Combiner1.MemberInputBuffer.Contents" (where Combiner1 is the instance name of the combiner you are interested in). The MemberInput@Combiner1.EntryQueue that you were referring to is the member input node (indicated by the @ symbol). Setting up the search step for queues can be tricky, as the queue selection drop down doesn't include all available queues (whether they are associated with a station or a storage element)-- you'll have to manually type the expression in, rather than looking for it to select. Perhaps someone from Simio can chime in on what queues are shown in the dropdown and/or why? -Adam
  4. You can use a regular table with 24 rows, one for each of your hourly distributions. Then you can reference each using something like Table1[Math.ceiling(Math.Remainder(Run.TimeNow, 24))].Distribution as a processing time. One thing to note is that Run.TimeNow returns the run time, not the clock time. So you may have to use some offset to line up your clock hour to the right table row. -Adam [edited to fix table row syntax ]
  5. The Member Match Expression is an expression that gets evaluated for each entity in the member input buffer. The combiner will batch all members that evaluate that expression to the same value into a batch size set in the “Batch Quantity” property. So in your case, you would like to construct an expression that will match one each of two types of member entities. We also need to clarify what you mean by entity types. In Simio, you create object definitions that you can then place, or instantiate, in the model’s facility view. A default entity definition called “ModelEntity” is already created for you. If you would like entities with completely different definitions, you must create new object definitions with all the corresponding properties, logic, and states. However, in your case (and many cases) I think you are interested in different instances of the same entity type. So, we can place three entity instances of the object “ModelEntity” in the facility view and name them Entity1, Entity2, and Entity3. Importantly, these entity instances are all the same type of entity… namely, ModelEntities. However, each instance can (and usually will) have different property settings (the most obvious one being the name). Now, we need to find a way to match the member entities. Again, that is done by way of an expression that will evaluate to the same value for the members we want to batch together. I’ll make the assumption that we want to batch one of each member entity in a first in first out (by entity instance) fashion. One way to do so is to create a state variable on the ModelEntity object definition that we can use to count the number of entities created at each source. Then, we can just match member entities that have the same count value. 1. Create the integer state variable in the ModelEntity definition tab. 2. Set the state value to the number of entities produced at each source upon entity creation. In each source that makes member entities, under State Assignments, set ModelEntity.IntegerState1 to Source2.OutputBuffer.NumberExited and Source3.OutputBuffer.NumberExited 3. Batch the entities: Batch Quantity = 2 Matching Rule = Match Members Member Match Expression = ModelEntity.IntegerState1
  6. And, for more fun, here it is with 3D rotation:3DRotatingServer.spfx
  7. I prefer “hack” to “cheat” That’s an interesting comment, though, about sub-models. I feel that in Simio the term ”sub-model” doesn’t really exist; or, rather it describes any model, so it doesn’t really mean anything. I understand the concept of a sub-model, but due to Simio’s object-oriented design any model is a sub-model. The standard library server, for example, is a sub-model. As is the default entity “ModelEntity” and the default model “Model”. So yes, in the sense that I created a custom object (or model) and then used it in another model, the Spinning Server is a sub-model. But then again so is the regular server The real "cheat" here is that the “server” is actually an entity and requires logic (i.e. processes) at the model level to assist with instantiation, (also, most of the parameters are hard-coded, which introduces scalability issues).
  8. Hi All, This is not the most useful model. With that disclaimer, I present the spinning server: RotatingServer.spfx It is inspired by some of the logic/features of the (very cool) crane library. Although this particular model may not be very useful, it might provide some inspiration for others looking for more "dynamic" animation -Adam
  9. That is super cool! Two hiccups I had on installation: 1. You need to "unblock" the dlls 2. This requires .NET 4.5 I did not need VS2012, and I have it working on sprint 78. Thanks for this (and the info on the Roslyn compliler API)! -Adam
  • Create New...