Jump to content

GFurtado

Members
  • Posts

    81
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by GFurtado

  1. On 2/19/2020 at 3:34 PM, GFurtado said:

    I would suggest to expand this model I sent before by creating new states inside your ModelEntity.

    • Two states when the entity leaves a station (one updates the station name and one updates the time it left).
    • A state when the entity enters a station.
    • Maybe another states registering how many rows in your sheet were written.

    The columns of your sheet would be ModelEnity.FromStation, ModelEntity.ToStation and (ModelEntity.TimeLeftStation - TimeNow).

    Let me know if you need help building this model.

  2. 29 minutes ago, GFurtado said:

    ModelEntity.CurrentStation.Name

    Be aware that this will return an error in the case the entity is not at a station.

    Wait, actually this doesn't work.

    Check the attached model:

    1. Create a new ContainerEntity with a string state named whatever you like;
    2. Assign NewContainerEntity.NewStringState = Filler.Name when entering the filler.
    3. Use this expression any time you need the name of the last station that entity visited.

    Get Station Name.spfx

  3. 4 hours ago, Wsimio said:

    Is this also possible if the model is extended to 6 servers?

    So each server processing time is dependent upon the one in front? I thought I would need to make different state variables for every server (machine)

    Sure. It depends on your model logic/design.

     

    4 hours ago, Wsimio said:

    For example:a machine in a production line needs to slow down with a delay if the machine upfront has reduced or zero speed because of failure.

    I would suggest using Server1.Failure.Active expression as a process time parameter. This expression return 1 when Server1 stops due a failure, otherwise it returns 0.

    1. Open your ModelEntity and add a new Real State variable named TimeInServer1 or whatever;
    2. Set ModelEntity.TimeInServer1 = TimeNow when the entity enters Server1;
    3. Set ModelEntity.TimeInServer1 = TimeNow - ModelEntity.TimeInServer1 when the entity exits Server1;
    4. Set Server2 processing time to ModelEntity.TimeInServer1 * E + delay (hours).

    Check the attached model for some extra help.

    Register Server1 Processing Time.spfx

  4. It is possible. There's several ways to solve this. It is just a matter of model designing.

    Some tips:

    1. You can use expressions like TimeNow or ModelEntity.TimeInSystem to check how much time processing time has passed.

    2. Interrupt step might help you remove the entity from the process.

    3. A State inside the ModelEntity will help your entities to take the right path or take the right decisions. Open you entity model, create a boolean state named Failed (or whatever the name you like), set ModelEntity.Failed to True or False, and use this same expression to steer you entity to the right direction.

    4. Be creative. Your solution heavily depends on your problem.

  5. I believe you can't create of vector of elements. Although, you can create a element reference state vector, which might be helpful.

    Your best bet would probably be modelling your process logic to trigger events through the Fire step, instead of using a timer.

    Or maybe adding a timer inside a object model, so every instance of that object has its own timer.

  6. Check my attached model.

    I'm not sure if this was the best approach, but it works.

    I created two events:

    • One is triggered 100 times to executes another process 100 times.
    • Each process will run its own Delay step and fire the second event to trigger the source.

    Let me know if this isn't what you need.

    100 entities.spfx

  7. At some point I would start looking for a SCADA system, write it in Python or anything outside Simio.

    A Simio Engineer would be better suited to help you, but I still believe you could build this inside Simio (maybe through an API?).

     

    I manage to build a very ugly version of this that kinda works. It's not real real-time, because I still need to click on the manual import button (I don't know how to help you with this).

    • I set my source's Arrival Mode to On Event;
    • Create a process with a Decide step that checks if the table received a new value:
      • If it received a new value, trigger SourceEvent;
      • If it didn't, check again a second later.

    466982411_Fireevent.png.6e6a26a5722c12ef1bd96774c15b7a90.png

    As I said, it's not very elegant, but I hope it inspires you to find the right solution.

    • Thanks 2
×
×
  • Create New...