Solution Implementing

a. Global scheduler(holarchy controller)

In this second stage of the RVHOLON project we have developed the Global Assembley Scheduler, which is responsable with the allocation in time of the operations needed to complete the orders existing in the system on the existing resources, and for establishing the manner in which the orders(represented physically by the palettes) are going to circulate on the conveyor.

In this architecture the GAS is a central control unit which provides an optimum global schedule for the resources when the system operates under normal conditions.

The description of the problem

Given:

  • the products assembley plans,
  • the number of pieces and
  • the functionalities of the processing and transporting system,

it is demanded the sequence of processing operations and the afferent resources, as well as the times when the operations begin and finish. Besides the processing operations which must be executed with or without precedence, the scheduler must generate the optimum path of each palette in the system, that is to specify the sequence of belts on which the palette moves.

b. The types of holons involved in the system and their characterization

none

Fig.1 - Basic building blocks of a HMS and their relations

Resource holon is described by the following informations:

//Resource holon class constants:
const int maximum_operations
const int maximum_resources

//Informations that characterize a resource:
//String of characters that give the resource name
string name
//Number representing the resource index
int index
//Integer that represnets the number of operations that the current resource can //process
int operation_number
public string[] operations = new string[maximum_operations]
public int[] tip_operatie=new int[maximum_operations]
public float[] timp_executie = new float[maximum_operations]

//Information needed for scheduling:
//Integer that represents the number of the holon for which the resource is reserved.
//Obs: when there are more palettes that should arrive in the same workstation this is //reserved for the the first palette. A workstation that is reserved is equivalent to an //unavailable workstation.
int reserved_for
//The name of the operation that is curently executing on the resource
string operatie_curenta
//The index of the holon that uses the current resource
int holon_curent
//Integer that represents the current state of the resource. The resource can be //operational and available, operational and unavailable and faulty
int stare_curenta

//Methodes for the Resource holon class:
//Constructor
public resource_holon()
//Copy constructor
public resource_holon(resource_holon rh)
//Function that adds an operation to the resource
public void add_operation(string op_name,int op_time)
//Function that tests if a resource is free or not
public bool test_resource(int nr_holon)
//Function that verifies if an operation can be executed on the current resource
bool find_operation(string op_name)

Order holon is described by the following informations:

//Constante ale clasei Order holon:
const int maximum_operations
const int maximum_resources
const float maximum_processing_time
const int maxim_planning

//Informations regarding the execution plan of a product:
//String that represents the order name. The order's name is the same with the product's //name.
string name
//Integer that represents the current holon index
int holon_index
//Integer that represents the number of operations that must be performed on the current //holon.
int operation_number
//Vector with the operations that must be performed
String[] operations=new String[maximum_operations]
//Vector with the precedences of the operations that must be performed (Ex : if //operation i must pe performed after operation j then precendece[i]=j.
int[] precedence = new int[maximum_operations]

//Information regarding the system resources:
//Number of processing and transporting resources from the system
int resource_number
//Matrix in which it is stored information about the operations that can be executed on //the resources.
int[,] resources = new int[maximum_operations, maximum_resources]
//Matrix in which there are stored the times for each operation.
float[,] operation_time = new float[maximum_operations, maximum_resources]

//Unique information obtained from scheduling:
//Vector that contains the processing time for each operation
float[] planning_time = new float[maxim_planning]
//Vector that contains the scheduled operations.
int[] operation_planning = new int[maxim_planning]
//Vector that contains the resources on which the operations are scheduled
int[] resource_planning = new int[maxim_planning]
//Number of planned operations
int var_planning

//Informations used for planification:
//The index of the resource on which the current holon is located.
int actual_position
//Holon state: scheduled or unscheduled.
bool holon_status
//The state of each operation: unplanned, chosen for scheduling and planned.
int[] operation_status = new int[maximum_operations]
//The resource wich processes the current holon.
int current_resource
//The current operation that is executed on the current holon
int current_operation
//The remaining time for the current operation. It is different from the execution time.
float remaining_time
//Vector that denotes if the operation has been chosen or not.
bool[] operation_checked = new bool[maximum_operations]

//Methodes for Order holon class:
//Constructor
public order_holon()
//Copy constructor
public order_holon(order_holon oh)
//Operator == (two holons are equl)
public static bool operator ==(order_holon oh1, order_holon oh2)
//Operator != (two holons are different)
public static bool operator !=(order_holon oh1, order_holon oh2)
//Function that tests if a holon is valid for planning
public bool valid_holon(int index_op)
//Function that tests if it is needed to insert transport operations
public bool test_transport(int index_op,int index_res)
//Function that inserts an operation for planning
public void insert_operation(string operation_name,int index_resource,float prel_time, int prec)
//Function that inserts a planned operation
public void add_planned_op(int index_op, float time)
//Function that returns the execution time for an operation with a specified name
public float duration(int op)

Product holon is described by the following informations:

Execution model(the sequence of operations which must be executed)

  1. Name
  2. Operations
  3. Operations indexes
  4. Operations order (a vector in which are stored the predecessors for each operation)
  5. Resources needed
  6. Materials needed
  7. Programs(a vector with the addresses of the programs which must be executed)

Characteristics:

  1. it is stored as a data base and replicated on the existing PC's
  2. the containing informations are accessed by the order holon(they are copied in it and then the program works just with the structure Order holon

 

Decision holon

In an architecture based on autonomous agents like this holonic architecture, the controll of the processes can be done centralised, by a special entity which administrates all the holons, or descentralised through a dialog between holons. The decision holon's role is to calculate optimum production plans taking into account the transport system(conveyor) and the processing ressources. This type of holon is materialized by the scheduling algorithm which runs on the server and provides informations for the controller that runs the cell.

c. The transfer of orders into the controller for execution

For the orders(palettes) to move according to the sequence determined by the scheduling, this information is sent to the controller that runs the conveyor as a text file for which a standard format has been imposed. The structure imposed for the binary file is given below:

  • Number of palettes [1 byte] (the number of palettes is limited at 256 because the identification system can only identify 256 different palettes)
    • Palette code/index[1 byte]
    • Number of operations[1 byte]
      • Machine numar/index[1 byte]
      • Operation name/index[1 byte]
      • Operation minimum time[2 bytes]
      • Operation maximum time[2 byte]
      • Operation report[1 byte]

     From the Palette code/index the structure repeats for Number of palettes times. Observation: the indexes used by the algorithm and the ones assigned in reality must be the same, otherwise the system will work faulty.

d. The physical implementation of the transport system

Fig.2 - The location of the sensors and drives on the conveyor

Last updated 29.05.2008