jsimIO Production

Case description

The system consists in an assembly line to produce hinges.

The assembly line is composed of a linear conveyor belt, 20 stations and 4 buffers. It is assumed that the buffer of each part feeder has such capacity that there is no starvation risk. In this way it is possible to exclude the feeding system from the analysis of the system. The time required for each task is considered deterministic thanks to the high level of automation.

The stations are subject to failures.

Formal model

System design

  1. Import the libraries required to instantiate the objects, perform the simulation and export the log file.

     from jsimIO import *
  2. Define and initialize the objects required: Model, Source, Station, Sink, Part.

    Buffers are included in the object Station.

    Each instance has to be linked with the model taken into consideration.

     # Create a Model instance, with the name of the model
    
     model = Model("JSIM_production")
    
     # Create network nodes
    
     source = Source(model, "Source")  # 1
    
     sink = Sink(model, "Sink")  # 2

    In this model, the components are neglected and the machines are modelled as manufacturing stations instead of assembly ones.

    This simplification is allowed because such components can be considered always available thanks to the above assumptions, so their assembly can be considered simply as a manufactuirng process.

    The buffer size of the machines is unitary since the buffers are modelled as independent stations.

     m1 = Station(model, "PPW1", buffer_size=1)
    
     ...

    The rotating transfer station is modelled as a set of machines, each one representative of one available position in the rotating table.

     b1 = Station(model, "RT1_1", buffer_size=1)
     b2 = Station(model, "RT1_2", buffer_size=1)
     b3 = Station(model, "RT1_3", buffer_size=1)
     b4 = Station(model, "RT1_4", buffer_size=1)
     b5 = Station(model, "RT1_5", buffer_size=1)
    
     ...

    The conveyor belt acts also as buffer and processes the parts with a FIFO logic.

    Each buffer is modelled as a set of 5 machines with unitary capacity, each one representative of one available space.

    The number of available spaces depends on the distance between each set of stations.

     c1_1 = Station(model, "B1_1", buffer_size=1)
     c1_2 = Station(model, "B1_2", buffer_size=1)
     c1_3 = Station(model, "B1_3", buffer_size=1)
     c1_4 = Station(model, "B1_4", buffer_size=1)
     c1_5 = Station(model, "B1_5", buffer_size=1)
    
     ...
  3. Define the part types, specifying the source and the interarrival time.

     # Define customer class
    
     part = OpenClass(model, "Part", source, Dist.Determ(8))
  4. Define the processing time of the machines (buffers and conveyors included). The rotating transfer station and the conveyor have a fixed processing time to take into account the transportation time required to move the pallets.

     m1.set_service(part, Dist.Determ(7))
     b1.set_service(part, Dist.Determ(4))
     b2.set_service(part, Dist.Determ(4))
     b3.set_service(part, Dist.Determ(4))
     b4.set_service(part, Dist.Determ(4))
     b5.set_service(part, Dist.Determ(4))
     ...
  5. Define the routing of the parts specifying the successors of each instance.

     # routing
    
     source.add_route(part, m1, 1)
     m1.add_route(part, b1, 1)
     b1.add_route(part, b2, 1)
     b2.add_route(part, b3, 1)
     b3.add_route(part, b4, 1)
     ...
     m18.add_route(part, m19, 1)
     m19.add_route(part, sink, 1)
     model.add_measure()
  6. Run the simulation.

     path = model.write_jsimg()
     ret = model.solve_jsimg()

Results

A folder named "HingeLine""date"_"time" is created. It containins "simulation.jsim" with the model in JSIM, the results of the simulation in "results.jsim" and "global.csv" recording the LOG.

The LOG table is created as shown below.

The columns indicate in order:

  • Loggername: referred to the name of the station

  • Timestamp

  • Job_ID: referred to the number of the job

  • Class_ID: referred to the name of the part type.

LOG

This is part of the jsimGRAPH model created.

Among the evaluated performances, the throughput can be visualised as below:

Last updated