Jump to content

ASagan

Members
  • Posts

    341
  • Joined

  • Last visited

Everything posted by ASagan

  1. Very powerful... I like the transportation aisles which allows for some limited obstacle avoidance. Is it possible to combine multiple bays with different transportation aisles but only use one bridge, such that the transportation aisle changes as the crane traverses to its destination?
  2. This newest version seems to be fairly bugged with 'simple' models. I can't get it to work... two different types of errors keep showing up. I've attached a project file that shows both these errors. CraneError.spfx
  3. No, as if entities could physically queue, they would no longer have a travel time equal to the input. The definition of a timepath is that when an entity enters, it takes a set amount of time to reach the end. A way to achieve what you want would be to subclass the path, add a new property called 'travel time', hide the speed limit property, and change the logic to use this travel time property for setting the entities movement.rate rather than using the entities desired speed combined with the paths speed limit. Just as before, set passing to 'false'. Alternatively, try animating the queue of entities attempting to enter the node/path/station after the timepath to visualise the queue.
  4. The attached add-in up above didn't support changing the width/height of links. I modified the source code to include this capability. Updated 2016-01-27...Updated DLL / Code to use Microsoft .NET Framework 4.5. I also included Alan's changes for changing the width / height on links. (Glen Wirth..Simio). 2016-10-24....See first post for latest files.
  5. Wasn't Simio written in C#? Any simulator X is written in a "separate software" package Y. I meant programming directly in C#/java would probably produce a much faster package than creating a simulation in a specialized software package. If you working on simple SSS models, forget all this and just go straight to assembly... (joking)
  6. That's right... use maximize expression with the Search step, set limit to 1 (default). The new token will be associated with the row. Alternatively, you can save the row index using the advanced properties of the search step. The Search step feels like the most powerful step in Simio to me...
  7. I believe the costs are often attributed to the entity/object that seized the resource, rather than the resource itself.
  8. This could be set up to work with optQuest. You could create some different schedules that manipulate the currentCapacity and then link these schedules to input properties that can be manipulated by optQuest. This would be the same approach when using the work schedules as well.
  9. Almost. The state you're looking for is 'CurrentCapacity'.
  10. Agreed Adam, very counter intuitive... especially considering that an entity can have a 'acceleration' of 0.1, an 'accelerationDuration' of 10, but NOT be accelerating because its already completed the acceleration. Therefore, the actual (non Simio) state of the entity is acceleration of zero as it is not accelerating. Regarding the unit conversion Adam, you can safely take the 3600 out of the expression if you ignore the units and set them as 'hours' for duration. You are double unit converting... first you are taking an hours expression (the calculation) and dividing it by 3600 to put it in seconds, then telling Simio it is in seconds. Just leave it as hours and it works. The calculation in your step is as follows: ModelEntity.DesiredSpeed/(ModelEntity.Movement.Acceleration/3600) in seconds. Desired Speed = 1 m/s, or 1/3600 h Acceleration = 1 m/s/s, or 1/3600^2 m/h/h Therefore, the calculation carried out is: (1/3600) / ((1/(3600^2))/3600) *3600 -- the final 3600 is the conversion from hours to seconds that Simio does because you have selected a unit of seconds. Leave it in hours and take off your 3600 conversion factor and it will all work. PS. The above reads clear as a good stout to me. If anyone feel frees to convert it to a nice light beer go right ahead!
  11. I've done this similar to how Christine has done it, but using the built in parking station of a node. I've taken Christine's model and modified it to use the parking station. A small trick -- to get the statistics on the node you'll need to set the 'Report Statistics' property of the node to True. It defaults to False. Another option, with significantly more overhead, would be to use a server that you turn on and off. WaitInParking.spfx
  12. Two ways come to mind off the top of my head: Create three separate instances of vehicles with different work schedules. Give each vehicle instance the population that you're looking for. Create one instance of a vehicle with a population of 24. Use processes to set the capacity of the various specific realizations based on your shift pattern.
  13. CGGericke, I've attached a sample model that uses entities instead of vehicles and using the enhanced flow library (available on this forum in shared items). UsingEntitiesAsFlowTransporters.spfx
  14. lhu123, Your model is working -- transport requests are rejected. However, pickup requests (at the node itself) are not, so the vehicle picks entities up. This is because you have not modified the vehicles 'OnEvaluatingRiderAtPickup' process. The standard library vehicle calls the 'Evaluating Transport Request' add on from both the OnEvaluatingTransportRequest and OnEvaluatingRiderAtPickup processes. To bring this logic into the vehicle, you will need to subclass both processes.
  15. I almost always simulate this using fillers/extractors from the extended flow library rather than directly filling a container on a vehicle/entity. It sounds like you could do this with entities or vehicles as long as your decision making for entities is as simple as you describe. If you do it with entities, you will have to write a bit of decision logic to the entity. I would recommend doing this on the 'onVisitNode' process, which would basically be a decision of 'Should I park now?'... true being to park and then wait for some event (wake him up), false being to keep on towards the destination. If you do it with vehicles, you will need to make some sort of decision request for the vehicle to go to the relevant node for pick-up. Normally this is done by an entity at a transfer node using the 'ride' step. However, riding a vehicle is about transferring into the ride station, not filling a container.... I foresee many pitfalls with this methodology! I might have time to take a crack at this later -- no promises though.
  16. If its a table import, you can change the column type to be 'object' instead of 'string' once the table is initially set up -- it will remember this type on future imports. It might be possible to write a custom step that finds an object based on a string, too, if the search step doesn't work for you.
  17. You might be able to use a search step to search for an object with the name. Usually its easier just to pass object references around than using string searching though...
  18. Pedro, the model posted earlier looked to me to do exactly what you wanted. It used the 'set node' step with add-on processes, and used decisions based on entity states that tracked which servers had been visited. Did you take a look at the processes in the model? If so, did they do what you want?
  19. Yup! It looks to me like it can be created through the 'right-click' context menu for setting properties. 1) Add a workstation to your model. 2) Set 'setup time type' to sequence dependent. This will allow you to set a changeover matrix on the workstation. 3) Right click on the 'Changeover Matrix' label, select 'Set Referenced Property', then select 'Create New Referenced Property'.
  20. I'm not sure about the answer to your question, although I believe it dynamically creates the times. However, I WAS able to change the factor on the time varying arrival rate... the attached model uses an arrival rate of 60/hour for the first hour, then i change the rate factor to 1/60 so it will have a rate of 1/hour. This drastic difference is immediately noticeable. Is this what you were trying to do? testRateFactors.spfx
  21. The attached model relates to the discussion at the following post: http://www.simio.com/forums/viewtopic.php?f=1&t=1165 I created a very basic, not quite fully functional, 'dwell time' model that calculates the dwell time based on how soon the next departure slot is according to Dave's example above. I don't feel this approach is very elegant but it can help others get started. sampleDwellTimeModel.spfx
  22. I would abandon using Simio's built-in elements and do this all in a process with repeat groups plus delay steps and custom token states as you describe in Option 1. You could use the search step to spawn a new token for each row in the repeat group which would provide scalability, which then gets a delay time randomized according to an input distribution for that row of the repeat group. At the end of the delay time it would trigger a failure. These tokens effectively become your timers instead of using timer elements. The failure could suspend this 'timer' process such that the other delays stop counting during a timer. This token would then loop back on itself, having a different delay again. However, my conclusion (but not implemented yet) was that I would use the 'non-scalable' approach. The reason for this is that adding more than 2-3 failure distributions is getting overly complex/detailed and isn't likely to add value and could even possibly subtract from it! Not only that but I've found that when I combine different types of events (in reality, not modelled) they almost always result in some fairly good erlang/exponential/log-normal distributions. These only need to be split out to remove multiple peaks rather than getting to the exact causes. Not only that, but I've often found that failure data (not models) is recorded very poorly, and often mis-reported. For example a 'slow operation' is instead recorded as a failure. Alternatively, short failures are not recorded at all because the operators are busy fixing the problem. Because of this going into the level of detail you've described is going beyond the quality of the data. If you actualy trust your failure data, by all means go to town with the scalable approach. If you were part of my firm, I would give you feedback along the lines of "never trust failure data" However, a colleague of mine does feel differently so this is not a hard and fast rule -- just my experience.
  23. I've copied the vehicle from the standard library vehicle and revised it to include: Travel time based failures, calculated from the resource state Transporting. This failure time does not include OffShiftTransporting or FailedTransporting. These failures will occur mid-link. Distance travelled failures, recorded from the link length when the transporter arrives at the end of the link. These failures can only occur at the end of a link. Created in Sprint 4.72. VehicleWithTravelTimeBasedFailures.zip VehicleWithTravelTimeBasedFailures.zip
  24. I thought it might be useful to share this step and object I use. I wrote a simple custom step (using some internet resources) a few months ago that allows me to take screenshots of my model. I then often stitch these screenshots together to create a video. Unfortunately this object doesn't seem to work when used as an outside library. This means that to use the object, it will need to be cloned/copied/subclassed straight into your model and then instantiated from there. I've attached: The object I use the step in The dll file for the step The Visual C# solution files for the step Simio PrintScreen Step VisualC#.zip PrintScreenDLL.zip Picturerecorder.zip Picturerecorder.zip
×
×
  • Create New...