-
Notifications
You must be signed in to change notification settings - Fork 1
1. Overview
Intralogistics in a modern manufacturing area consists of multiple different elements and especially various individual processing steps which are linked to each other. In the course of a simulation, these processes in intralogistics are modelled, benchmarked and optimized by measuring and analyzing material flows. The elements provided by this library for modelling and designing a simulation are oriented on the real conditions of a manufacturing environment and can be separated into three categories:
Material & Working Packages (Entity & Bundle):
Simulating a material flow without material is pointless. Hence, the library provides a class called Entity whose instances can be considered as a units of material. It is your decision, to define the exact meaning of such a unit, e.g. in terms of material quantity. An instance of Entity could represent 200 screws, 10 tons of stel or whatever you want to simulate. To achieve a higher granularity between different types of materials, you could also define additional classes extending Entity where each class represents another type of material.
Materials (i.e. instances of Entity) are collated in groups, so-called Bundles such that they can be passed in groups from one processing step to another. Hence, a Bundle is a container for Entities and can be considered as a working package. The same rule applies here again: It is your decision, to define the exact meaning of a Bundle depending on the current processing step. A Bundle might be considered as a shipment containing many Entity objects representing multiple units of material in a processing step called “Goods Receiving”. In the course of the next processing step it might be considered as a pallet of a forklift. Bundles, especially the underlying units of materials can be redistributed, by Splitters and Mergers.
Processors & Connectors:
A simulation as well as it real representation in intralogistics consist of multiple individual processing steps which are linked to each other such that there is a defined material flow through the single working steps. The library provides so-called Processors representing the processing steps and Connectors being the links between these steps. A Processor can be considered as a workstation where a defined process is executed since the actual work is done by so-called Workers. Since time is an elementary unit of measurement, a Processor is clocked, which means that the processing of a working package (i.e. Bundle) takes a defined interval of time until the working package is passed to the next step. For that purpose, a Processer receives a periodical clock signal, such that the time of processing a working package can be strictly adhered to and additionally measured.
Connectors, on the other hand, are not driven by a clock signal, which means, that an incoming working package is immediately split, merged or routed (depending on the type of the Connector) and forwarded to the next step.
Workers:
Without the presence of Workers, the whole intralogistics process stands still. A Processor represents a certain processing step, but the actual work is done by these Workers. The library defines different types of Workers which can be assigned to a Processor. By assigning multiple Workers to a processing step the throughput of a processing step can be increased and scale-up scenarios can be tested. Together with their underlying workstation (i.e. Processor) they are driven by a periodic clock signal, such that the work is carried out at a certain time and for a certain duration.
As already mentioned, time plays a decisive role in modeling, simulating, analyzing and optimizing intralogistic processes. Time is therefore often used as a KPI (Key Performance Indicator) to rate the efficiency, effectiveness and suitability of processes as well as to identify weaknesses and bottlenecks. Processes happening in reality in real time can be accelerated in a simulation as if in a time-lapse, because often someone is only interested in the final results. Therefore, a simulation run is a sequence of time intervals or clocks in which a new state of the individual elements is calculated for each new clock. Hence, many of the element of the library defines the method Update(long) for receiving a clock signal where the parameter is the number of the current clock. With each call of Update(long) the state of the element is recalculated, meaning that the processing of a Bundle is continued or even completed in case of a Processor, for instance. The library does not prescribe specific time units (like seconds or minutes) or a granularity for the clock. Instead, you have to define the unit and granularity of a clock for your simulation. These clock signals are called ticks. Commonly, the unit and granularity is determined by the fastest processing step of your simulation.
Example:
Consider the following scenario: There are three processing steps which should be simulated. The first step takes 10 minutes for one working package in reality. The second takes one only five seconds. The third one takes two minutes. The goal is to simulate a time span of 20 minutes. Since the second step is the shortest processing step, the duration of five seconds should define your unit of time, meaning that one tick is equivalent to five seconds. This means that it takes only one clock signal, i.e tick, to process one Bundle in the second step, but 120 ticks for the first and 24 ticks for the third step. The whole simulation runs for 240 ticks (= 20 minutes). If you would choose a higher value conversion factor for ticks, e.g. one tick is equivalent to 20 seconds, than you cannot simulate the second step properly but the whole simulation would require less ticks for a complete run meaning that less new states must be calculated. With a lower conversion factor the granularity is increased as well as the number of iterations for recalculation.
The easiest way to run a simulation modeled with this library is to implemented a loop counting over the whole time span you want to simulate (i.e. beginning with zero until the highest value, e.g. from 0 to 239 ticks for 20 minutes) and call the Update(long) method for all used Processor instances (the clock signal is automatically forwarded to the assigned Workers) for each iteration. Make sure that Update(long) methods of the individual Processors are called in the opposite direction to the flow direction starting with the last Processor in the flow. Otherwise, a Bundle is processed, completed and passed to the next processing step and processed there again with the same clock signal.