Implementare

a. Planificatorul global (meta-controllerul holarhiei)

In aceasta a doua etapa a proiectului RVHOLON s-a dezvoltat, printre altele, si planificatorul global (Global Assembly Scheduler – sau meta-controllerul holarhiei), care se ocupa de asignarea in timp a operatiilor necesare efectuarii ordinelor existente in sistem pe masinile disponibile, si de stabilirea modului in care ordinele (reprezentate fizic de palete) vor circula prin sistemul de transport.

In aceasta arhitectura GAS este de fapt o unitate centrala de control care furnizeaza o planificare (optima) globala a resurselor atunci cand sistemul functioneaza in conditii normale.

Enuntarea problemei

Dandu-se:

  • modurile de executie a pieselor,
  • numarul de piese si
  • functionalitatile disponibile in sistem,
se cere succesiunea operatiilor de prelucrare si a resurselor aferente, cat si timpii de start/stop ai fiecarei operatii. Pe langa operatiile de prelucrare care trebuiesc efectuate, cu precedenta sau fara precedenta, planificatorul trebuie sa genereze si traseul optim al paletei in sistem, adica sa specifice succesiunea de benzi pe care se misca paleta.

b. Tipurile de holoni implicati in sistem si caracterizarea lor

none

Fig.1 - Componentele de bază ale SHF şi relaţiile între ele

Resource holon

//Constante ale clasei Resource holon:
const int maximum_operations
const int maximum_resources

//Informatii ce caracterizeaza o resursa:
//Sir de caractere ce da numele resursei
string name
//Numar ce reprezinta indexul unei resurse
int index
//Intreg care reprezinta numarul de operatii ce poate efectua resursa curenta
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]

//Informatii necesare executiei/planificarii:
//Intreg care reprezinta numarul holonului pentru care este rezervata resursa
//Obs: atunci cand avem mai multe palete consecutive care trebuie sa ajunga in acelasi //post acesta este rezervat pentru prima, un post rezervat este echivalent cu unul //indisponibil
int reserved_for
//Numele operatiei care se executa pe resursa curenta
string operatie_curenta
//Indexul holonului care foloseste resursa curenta
int holon_curent
//Intreg care reprezinta starea curenta a resursei. Aceasta poate fi: operationala si //disponibila, operationala si indisponibila sau defecta.
int stare_curenta

//Metode de prelucrare pentru clasa Resource holon:
//Constructor
public resource_holon()
//Constructor de copiere
public resource_holon(resource_holon rh)
//Functie care adauga o operatie la o resursa
public void add_operation(string op_name,int op_time)
//Functie care testeaza daca o resursa este ocupata sau nu
public bool test_resource(int nr_holon)
//Functie care verifica daca operatia op_name poate fi executata pe resursa curenta
bool find_operation(string op_name)

Order holon

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

//Informatii referitoare la planul de executie al unui produs:
//Sir de caractere ce da numele ordinului. Numele ordinului este acelasi cu al //produsului.
string name
//Numar ce reprezinta indexul holonului comanda curent
int holon_index
//Intreg care reprezinta numarul de operatii ce trebuie efectuat asupra holonului curent.
int operation_number
//Vector cu numele operatiilor ce trebuiesc efectuate
String[] operations=new String[maximum_operations]
//Vector de precedente (Ex : fie i indexul unei operatii oarecare din vectorul //operations, atunci precendece[i] avem indexul operatiei care trebuie executate inaintea //acesteia.
int[] precedence = new int[maximum_operations]

//Informatii referitoare la resursele din sistem:
//Numarul de resurse din sistem
int resource_number
//Matrice in care avem stocata informatia despre operatiile care se executa pe resurse
int[,] resources = new int[maximum_operations, maximum_resources]
//Matrice in care se memoreaza timpii de executie ai operatiilor pe fiecare resursa in //parte, se poate ca aceeasi operatie sa se execute diferit pe resurse diferite.
float[,] operation_time = new float[maximum_operations, maximum_resources]

//Informatii unice rezultate in urma planificarii:
//Vector care contine timpul la care trebuie introdusa port-paleta in sistem
float[] planning_time = new float[maxim_planning]
//Vector care contine operatiile care se executa asupra produsului in ordinea in care au //fost planificate
int[] operation_planning = new int[maxim_planning]
//Vector care contine resursele pe care se face planificarea in ordinea in care au fost //planificate
int[] resource_planning = new int[maxim_planning]
//Intreg care reprezinta numarul de operatii planificate
int var_planning

//Informatii folosite la planificare:
//Indexul resursei pe care se afla holonul curent
int actual_position
//Starea holonului: poate sau nu sa fie planificat.
bool holon_status
//Starea fiecarei operatii in parte: neplanificata, aleasa pentru planificare si planificata
int[] operation_status = new int[maximum_operations]
//Resursa pe care se afla holonul curent
int current_resource
//Operatia care se efectueaza la momentul prezent asupra holonului curent
int current_operation
//Timpul in care se termina executia operatiei curente. Este diferit de timpul de executie //al operatiei
float remaining_time
//Vector care indica daca operatia a fost aleasa pentru planificare sau nu
bool[] operation_checked = new bool[maximum_operations]

//Metode de prelucrare pentru clasa Order holon:
//Constructor
public order_holon()
//Constructor de copiere
public order_holon(order_holon oh)
//Operatorul == indica daca doi holoni sunt egali
public static bool operator ==(order_holon oh1, order_holon oh2)
//Operatorul != indica daca doi holoni sunt diferiti
public static bool operator !=(order_holon oh1, order_holon oh2)
//Functie care testeaza daca un holon e valid pentru planificare
public bool valid_holon(int index_op)
//Functie care testeaza necesitatea inserarii de operatii de transport
public bool test_transport(int index_op,int index_res)
//Functie care insereaza o operatie de planificat
public void insert_operation(string operation_name,int index_resource,float prel_time, int prec)
//Functie care insereaza o operatie planificata
public void add_planned_op(int index_op, float time)
//Functie care returneaza durata operatiei cu numele specificat
public float duration(int op)

Product holon

Modelul de executie (succesiunea de operatii ce se executa)

  1. Nume(sir de caractere)
  2. Operatii (vector cu numele operatiilor)
  3. Indecsi operatii (vector cu indecsii operaiilor)
  4. Ordinea operatiilor (vector in care se memoreaza predecesorii fiecarei operatii)
  5. Masini necesare (este echivalent cu operatii)
  6. Materiale necesare (matrice 2XN cu indexul piesei necesare si numarul de exemplare necesare) – de adaugat si tipul de material
  7. Programe (vector cu adresele programelor ce se executa)

Pot aparea operatii de control al calitatii care nu trebuiesc executate pentru toate produsele existente, ci doar din cand in cand. – obligatoriu produs cu produs
Anumite tipuri de ctrl speciale se fac in postul mobil

  1. este retinut sub forma unei baze de date pe un calculator
  2. informatiile din el sunt accesate de holonul ordin, sunt copiate in el si apoi se lucreaza doar cu structura Order holon

 

Decision holon

Holoni de decizie
Intr-o arhitectura bazata pe agenti autonomi cum este cea holonica, controlul produselor se poate face fie centralizat, de catre o entitate speciala care gestioneaza toti holonii, fie descentralizat printr-un dialog intre holoni. Holonul de decizie are rolul de a gestiona acesti holoni prin calcularea de planuri de productie optimale tinand cont de incarcarea sistemului de transport si a resurselor. Acesta este materializat prin algoritmul de planificare ce ruleaza pe server si furnizeaza informatii catre automatul care piloteaza celula.

c. Transferul ordinelor de productie in automatul programabil in vederea executiei lor

Pentru ca ordinele (paletele) sa circule in conformitate cu secventa rezultata din planificare, aceasta informatie se transmite automatului programabil care piloteaza care controleaza banda transportoare (conveior) si interactiunile banda-masini de prelucrare (roboti, MUCN) sub forma unui fisier pentru care a fost impus un format standard. Aceasta structura a fisirului binar de date rezultat in urma planificarii este data mai jos.

  • Numar palete[1 byte] (numarul de palete este limitat la 256 deoarece fizic sistemul de identificare prezent pe linia de transport permite doar identificarea a 256 palete)
    • Cod/index paleta[1 byte]
    • Numar operatii[1 byte]
      • Numar/index masina[1 byte]
      • Nume/index operatie[1 byte]
      • Timp minim operatie[2 bytes]
      • Timp maxim operatie[2 byte]
      • Raport operatie[1 byte]

     
      Structura de la Cod/index paleta se repeta de Numar palete de ori.
Observatie: indecsii operatiilor cat si ai paletelor pot diferi in reprezenatrea folosita de algoritm fata de cei din realitate, important fiind ca in acest fisier ei sa aiba valorile corecte.

d. Implementarea fizica a structurii de transport

none

Fig.2 - Amplasamentul senzorilor si a actionarilor pe banda

 

 

Ultima modificare 29.05.2008