Jump to content

ViniciusF

Members
  • Posts

    40
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by ViniciusF

  1. You have to take some care though. Is it possible that entities rework more than once? If it is, the solution above is fine. If it is not you would need to take some care on how you setup your link weights.
  2. You could improve this with a monitor inside a subclassed vehicle verifying the ResourceState change and executing a process to add the wages aswell. But for now, I think the solution above is fine.
  3. That can be exponentially harder if: the vehicles have different wages between them; rates differ from day to day. Considering the simple case where the vehicles have the same wage rate and all days have the same wage rate (but rates changing during certain hours), I would suggest you: Create a table with the a column for each state of the vehicle (idle, busy.. etc) and 24 lines (one for each hour of the day). You can create only one column if the wages are the same for all states. Considering the first case, it will be something like: Create a Process On Run Initialized. Search through the vehicles populations. Put a delay of how often you want to verify its state and an assign that will add the wage to a variable that you want based on the current ResourceState, like: DateTime.Hour returns the hour of the day. At the beginning of the day it returns 0, and will add 1 for each hour. Since in Simio tables starts on row one, I had to add one. Here I was verifying every 5 minutes, so I had to divide the value by 12. (60min/12) = 5min. You could verify it more often to be more precise also, but you will have to divide the value accordingly. You don't need many decides to verify the current ResourceState, just skip the assignment if it is not the right ResourceState.
  4. You are correct. When they are moving to pickup the cost is not considered. Easy way to verify is to change the velocity of the vehicle to a really high value. You'll get the 1440 as expected. I would probably not use Costs directly. Instead, I would create a Process on Run Ending. Search through the population of vehicles and save the values accordingly, like: vehicle.resourcestate.TotalTime(0)*2 -> would give you 2 USD per hour on a given state, in this case state 0 (idle). vehicle.resourcestate.TotalTime(1)*2 -> would give you 2 USD per hour on a given state, in this case state 1 (busy). If you need to see these values separated, you would need a matrix to save these values depending on the number of the vehicles. Or, you subclass the vehicle and create a vector where each element of the vector would save each cost. Else, you just keep adding to a variable for each vehicle on the system. There is probably another way manipulating the cost inside the process of the vehicles, or using a monitor verifying resourcestates changes on a subclassed vehicle.
  5. Hi! Just put a Assign step changing the state of your variable after you clear the Statistics. You can keep the monitor to trigger what you need.
  6. Hi, What I like to do on these cases is to use Resources on a clever way: Create two dummy resources (one for each server). Set the capacity of those resources to how many entities you would allow on the respective conveyor. When an entity hits the Transfernode1, you seize from a list of the two dummy resources. Use a Set Node step to redirect the entity to the according Server depending of the Dummy resource chosen. When the entity leaves the Server (or enters the Server, depending on the logic), release the Dummy resource. You would need only to make the Dummy resource fail together with the server, or just put the failure on the Dummy resources instead of the server. Shouldn't make a big difference depending of what results you would need.
  7. Using a object reference state variable named "Test" on the ModelEntity: (Assign step was just ModelEntity.Test -> Server)
  8. Hi, it worked just fine with a subclassed server here:
  9. I came across with that before, and it is a bit confusing. I'm using version 15.240.27700 I learned that you shouldn't use this Entered Event to control the entity either. For example, If you put a delay on it, the entity will not stop for the delay time. If you trace it, you see that Entered Event is fired, but the process is not executed right away. Instead EnteredAddonProcess is executed before. Not only EnteredAddonProcess is executed before, but the entire logic is executed, so it executes ToOutboundLink before executing the process activated by the EnteredEvent. The reason it works on EnteredAddonProcess is because the token stops there, executes the addon process, then continue. With the Entered Event, the token does not wait.
  10. Ok, just to be sure: Entities on stop1 cannot choose stop1 as a destination, entities on stop 2 cannot choose either stop1 or stop2, and so on. Is your logic already doing that? Personally, I would create a node just before each "Stop" node (which I'm assuming are the nodes of the sources). I would drop the entities there, sending them to their sink (you can use by link weight here, with "!Is.Vehicle" so the entities go to the sink). If the process of loading/unloading is necesseraly simultaneous you need to take some care with what happens if the bus arrives full, but has some entities to drop/pick-up. If you want, dm me with the model, I could help.
  11. Use a search with Maximize Expression. The queue should be ServerX.InputBuffer.Contents and the expression: Candidate.ModelEntity.Variable.
  12. Hi, there is a simple approach you can use. Use Connectors between the queue server and the desks. At Buffer Logic of the Desks, change the Input Buffer Capacity to 0. Create a List with the Input nodes of the seven Desks. On the Output of the queue server change Entity Destination Type to Select From List and the goal to Smallest Value. Keep the default expression. It should work fine.
  13. Hi, You won't need batch logics of the definition. Just the combiner is enough. I made a simplified version of your model. Producto1 requires 1 med and 1 big, while Producto 2 requires 1 small and 1 big. Pay attention to the process that I created at TransferNode1, you'll need to adjust it for the Producto3 and 4. Watch the Combiner Object aswell. Hope it helps. ExampleSimplified.spfx
  14. Hello, I wouldn't use process for this one. There is a simple approach that you can use by modifying the SimBit "CombineMultipleEntityTypeOntoPallets". You'll need 3 ModelEntity Integer States to identify the quantity required of each Bin according to the Product. Let's say ModelEntity.Big, ModelEntity.Small and ModelEntity.Med. You can modify "Ops_Exited" step to assign those quantities. For the Producto1 for example, you'll have ModelEntity.Big == 1, ModelEntity.Med == 1 and ModelEntity.Small == 0. A little tip: you can use "Is.Producto1" (or "Is.Producto2", etc) on a decide step to identify which Producto is it. Now on the Combiner Object, follow the Simbit and change the BatchQuantity, to ModelEntity.Big, ModelEntity.Med and ModelEntity.Small. This should work.
  15. Hi, Usually what I do in cases that I want to check capacity before sending is create a "dummy" Resource. This way I seize its capacity before sending the entity forward. If it has no capacity for a given entity, the entity will just wait until it has capacity.
  16. Hi, it creates a token for each row that matches the condition (given that you did not limit the search). You can access it using TableName.ColumnName.
  17. Hi, One way to do this is put a Dynamic Selection Rule: Smallest Value First on the Worker, with the value expression of: Candidate.Entity.DirectDistanceTo.Object(Worker). This could work.
  18. Hi! I don't think you need to save those times stamps on MyVehicle. I would suggest you to use processes that triggers when the entity leaves the Output Buffer of the source and enters the Input Buffer of the server. To do that, create two process with the corresponding Triggering Event Name: Source1.OutputBuffer.Exited or Server1.InputBuffer.Entered, saving time stamps directly on the MyModelEntity.
  19. Hi! Yes, there is a way. What you could do is use a String.Format expression. This way you can show multiple variables on the dynamic text. On your case something like: String.Format("{0}: {1} {2}{3}: {4}", "Material Costs", MyModelEntity.MaterialCosts, String.NewLine, "ProductionCosts", MyModelEntity.ProductionCosts) should work. As a plus, you could use a state to disable/enable these labels with a button and a process. Something like: Math.If(EnableTxT, String.Format("{0}: {1} {2}{3}: {4}", "State1", ModelEntity.State1, String.NewLine, "State2", ModelEntity.State2), "")
  20. Import ALL gates to the gate data table, regardless if they have flights or not. Make sure all Gate objects are following the departure arrivals. Done. If you have any questions, pm me.
  21. Well, there are two problems in your model: First, there are many gates that are not following the data table. Second: every gate should be on the Gate table, regardless if they will have flights or not. If not, they will create entities on every single arrival of the departure table. You have many gates that are not included on Gate table.
  22. First of all, your column of gates should be of the type Object Property, not String. After you change its type, you need to set Auto-Set Table Row Reference to True. It should work now.
  23. One way to do it is to have two tables. One with the gates (object property) to be a column key, and another with foreign key property and the departure times. Below follows an example. Hope it helps. Arrival_Gates.spfx
  24. What you can do is set up a table with a column of DateTime Property for the arrivals and change the Source Arrival Mode accordingly. I strongly recommend you guys to take a look on the Simbits available, they are a really good tool to guide you through your first steps into Simio. For instance, you can find the solution for your problem on a Simbit called AppointmentArrivals.
  25. To make an entity wait until the runway is free what you could do is set the Initial Traveler Capacity of the Runway path to 1. This way entities will wait at the node before entering the path. I did not understand the first question, but if you need entities to visually appear behind one another, set Allow Passing to False on the path. Alternatively, you could use conveyor instead of path to make entities allign and respect some distance. Hope it helps.
×
×
  • Create New...