-
Posts
1,654 -
Joined
-
Last visited
-
Days Won
52
Content Type
Profiles
Forums
Events
Gallery
Downloads
Everything posted by dsturrock
-
RandomRow for only part of a table
dsturrock replied to JaimeSotomayor94's topic in SI General Discussions
To start with, Destinations in Simio are always nodes. So the table should have a column of type Object Reference Property > Node. Although its not on the pull-down list, when you specify a entity destination as Select From List, you can also specify a table column of type node list and it will automatically respect the table rows associated with that entity. Model_RandomRow_FilteredTable.spfx -
For each location where you want to start a time interval (Server 1 and "the very beginning" in your example) you would need to add a state to the ModelEntity (NOT to the model). Then for each place you want to end a time interval (server6, "the very end", and server4 in your example), you would need to add a TallyStatistic element and Tally and observation at the point. For example to record the time between between Server1 and Server6: create a modelentity state named TimeDepartingServer1 assign TimeDepartingServer1 the value of TimeNow when entity departs Server1 create a TallyStatistic element named Server1ToServer6Time record a Tally observation (using node or Tally step) at Server6 recording the value TimeNow-TimeDepartingServer1 to Server1ToServer6Time add a status or floor label using the expression Server1ToServer6Time.Average
-
Yes, you can certainly model this in Simio, and can easily make it terminating. I would suggest reviewing any simulation textbook for verification and validation techniques. The general answer for number of replications is to run for a few (5-10?) replications and look at the half-width on your key output measures. If the HW is too wide, then run additional replications until all your key measures are at the precision you need.
- 1 reply
-
- 1
-
-
Multiple servers with single shared capacity
dsturrock replied to Hristiyan Petkov's topic in SI General Discussions
Tricky problem. If you had posted this in a Simio Insiders forum instead of the public forum I could have replied with a model and figures. I would probably take the opposite approach - instead of adding additional "fake" machines, I would consider representing each workcell as a single server that makes use of associated resources for metrology, CNC, and airblast. I'd use Task Sequences to do the sequential processing of each part, then use the associated Loopback feature of Task Sequences to start over with the subsequent parts. There are a number of SimBits demonstrating task sequences. Unfortunately the only one demonstrating loopback (ServerUsingTaskSequencesWithDataTables_Loopback) uses data tables (which complicates things) but you might get the idea. Or you could do a similar approach with process logic steps. If you repost this in Simio Insiders you might get more help. -
Default Unit Settings (Imperial vs. Metric)
dsturrock replied to JohnWV's topic in SI General Discussions
I assume that you are aware that on the Run Ribbon > Units Settings you can set any of the units defaults. For example, you can change the default Length & Distance from Meters to Feet. While this does not change the default in any object, it does change things like: the grid in the facility view will now be in feet, distances in the trace window with be in feet, and output statistics of type length or distance will be reported in feet. I expect that you are requesting that when you place a object with a distance-related property like Initial Desired Speed on ModelEntity, that it would automatically be labeled in Feet per Minute rather than Meters per Second. Of course you would also want the corresponding default value to change along with it, for example from 1.4 m/s to 275 f/m. While I expect that is possible, it seems to me that is best as defined object behavior. For example, you could easily subclass ModelEntity to create a ModelObjectImperial that has those values and units as you desire and simply use that in all your models. -
Any entity traveling on a path at a faster speed than the entity ahead of it with catch up to that lead entity, and continue following it as long as the path Passing property is False. I have used this as a quick way to model things like a vehicle that tows several carts around the model. You might also look to the Trains or Transportation library that is in the shared items folder.
-
There is no easy way to automatically convert an Arena model into Simio. But more important, you probably wouldn't want to. I am reminded of the early days when Siman was written in FORTRAN and we wanted it to be in C. We ran it through the best automatic FORTRAN to C translator of the day. While it "technically" worked, what we got was a whole bunch of FORTRAN code that was expressed in the C language. It used algorithms and constructs that were inappropriate to C and was extremely hard to read and maintain. We ultimately manually recoded everything into "good" C code. Likewise, Simio has many advanced constructs that are not found in Arena. The modeling approach that you would take with Simio's object orientation, would be very different that you would take with Arena's limited set of procedural modules. So while it is theoretically possible, I would recommend giving no further thought to an automatic translation. Instead I would: go back to the modeling objectives and constraints which guided your Arena model, consider all the things you learned about the system as you developed the Arena model, and consider the trade offs that you had to make in Arena to model your system with enough accuracy. Then I would design a Simio model using all the Simio features available and design the best model to meet your current needs. When complete, I expect that you would find the Simio model to be smaller, more accurate, and easier to use and maintain than the original Arena model.
-
An Arrivals table with 3 entries would cover your request: Time EntityType Quantity 10.0 TypeA 100 20.0 TypeB 200 30.0 TypeC 300
-
How to choose between resource when there are conditions.
dsturrock replied to htatton's topic in SI General Discussions
I suggest exploring Task Sequences on the Server. It has much better capability than the Workstation. -
You asked for "a way to start/stop timers on a specific entity without creating a bunch of different events". As I understand it, Enable is just a switch that stops/starts the Timer clock. It has nothing to do with triggering events and does not require any events. So if you set a timer to fire in 60 minutes, then after 10 minutes disable the timer, the timer should fire its event 50 minutes after it is enabled.
-
Simio conveyors do not currently support discretely modeling two or more entities side by side. That feature has been proposed and designed, but it not yet scheduled for development (just a priority thing). One choice is to use the Flow constructs to model it as some combination of discrete and continuous. Another possible approach is to Combine discrete entities together or to have a single entity represent 2 or more entities - perhaps use a Separator when you need discrete processing. Yes, there is extensive information available about each entity (see screen shot from Watch window below). You can write this data to a file using the Write or ExcelWrite step.
- 1 reply
-
- conveyor belt
- parallel entities
-
(and 1 more)
Tagged with:
-
There is a user assignable enabled state associated with each timer. For example you can assign Timer1.Enabled to False or True.
-
Simio B2MML data tables and importing are compatible with the standard. It is my understanding that it is common that adopting companies will customize the data to their own needs, just as we have done by example within Simio. B2MML consists of a set of XML schemas that implement the data models in the ISA-95 standard. Companies may use B2MML to integrate business systems such as ERP and supply chain management systems with manufacturing systems such as control systems and manufacturing execution systems. The actual standard is an XML implementation of the ANSI/ISA-95 (IEC/ISO 62264) Enterprise-Control System Integration Standard. Searching on them will yield more information. The e-book Planning and Scheduling with Simio that is included on the Support Ribbon, explains more about B2MML.
- 1 reply
-
- 1
-
-
I think I know which video you are mentioning and it is quite old - perhaps from Simio 1.0. Many things, especially building objects, have gotten much easier since then. The interface you still mentioned is still available -- it is the External view found under the Definitions tab. But there is a much easier way now. In my classes, I typically give a demonstration where I start by building a TandemServer, then hierarchically build 3-4 more objects, revise all the objects, save the project as a library, then load that library and build a model from that new library - all in the space of 10 minutes! I have attached a very informally recorded snippet of a class. Perhaps it will be helpful. BuildingObjects_QuickDemo.mp4
-
Either in the Load Time property or the Loaded add-on process trigger of the object (let's say Worker1) you could add an expression something like this: (Worker1[1].CurrentNode==TransferNode1)* 5 to get a delay of 5 only when at that specific node.
-
While I think all approaches mentioned above are good depending on the situation, I'll mention one more advanced approach, perhaps just for the educational value. While most people think of balking and reneging as a Server-type of option, it is actually implemented as a feature on every Station. So another approach, particularly if you encountered this situation a lot, might be to subclass the Server and change the properties of the Processing station to implement reneging on that station.
-
There are several ways. One very efficient way to to simply hard code the row number for each object. So if Server7 happened to be a type of machine2 (in row 2) its process time expression could be machineProperties[2].ProcessingTime. A bit more difficult is to use a custom server (call it myServer) that has a myRow state. On initialization each myServer would search the table to find its row and store that in its myRow state. Then, its process time expression would be machineProperties[myRow].ProcessingTime.
-
Simio does not have a specific machine learning feature, but many people still implement a form of machine learning in one of two ways: 1) Data-driven models, and particularly data-generated models, will improve their operation with better data. As you system runs, and the data improves, the model will automatically improve. 2) Particularly in scheduling applications - a model is never static. Every time your run a model and discover the possibility of creating a better solution (better schedule) you manually improve the built-in heuristics to it generates a better solution the next time.
-
Use the Entities Per Arrival property on the Source
-
-
Moving Worker to a-priori unknown position
dsturrock replied to bscandi's topic in SI General Discussions
Entities don't have a facility view , so they can't contain nodes, so they cannot themselves be a destination. --One option is that when the machine fails, have it move to a node to fail, and then have the worker go to that node to work on it. --Another possible approach is to model the machine as a node or a server. As long as there are no links to the node(s), you can use the RelocateObject user defined step to move the object around at runtime. Then you could move the worker through free space to get to the machine's current location. -
Combine several entities in to one entity
dsturrock replied to BTECHStudent's topic in SI General Discussions
It's not appropriate for all situations, but the easiest way to solve this problem is to represent the component parts as Materials (an element) and define a Bill of Materials (BOM) that must be Consumed to create your new assembly. The big downside to this approach is the inability to animate the movement of the component materials. But if you can work around that limitation, this approach is MUCH easier. -
Since you are learning, I'll give you a nudge in the right direction, rather than providing the answer. Investigate Random.Discrete distribution Use a combiner to create a batch of burgers to be cooked together. The batch size must be specified in the parent. The batch of entities moves to the grill together. The cooking time is a function of the parent entity's batch size.
-
You can get most of what you need using a built in Dynamic Selection Rule like what is highlighted in the attached figure: If the built-in rules don't provide exactly what you want, you might try a clever Filter expression. If that doesn't work, you might consider creating your own custom dynamic selection rule -- see examples in this folder: C:\Users\Public\Documents\Simio\Examples\UserExtensions\SimioSelectionRules The problem you were having is that Simio doesn't have a specific function that says "allocate this entity". It has a Seize step, to request allocation. It has a process (EvaluatingSeizeRequest) to evaluate if a specific entity can get it. And it has an Allocate step to force a resource to reevaluate pending allocations. To use your present approach you would need to flag the entity that you want to get the resource, change the EvaluatingSeizeRequest to allow selection of only that entity, then call the Allocate step to allow allocation to the remaining entity. But I would try Dynamic allocation first, since that is a built-in way designed to do smart allocation.
-
ORDER DECREASING OF A STATE VARIAVEL (VECTOR)
dsturrock replied to luis2810's topic in SI General Discussions
Not directly. Choice 1) You could use the Find step in a loop to find the lowest item and copy it to another array or to an output table. If you don't really need it sorted, but just want to use them in the right order you could just clear each item as you access it and not store it elsewhere. Choice 2) You could write a custom step to do it. Choice 3) You could create an entity for each element of the array, assign a state on the entity and then stick those entities in a queue ranked by that state.
