Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE Module1
  2.     CONST robtarget Target_30:=[[0,0,0],[1,0,0,0],[-2,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
  3.     CONST robtarget Target_20:=[[0,0,0],[1,0,0,0],[0,-1,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
  4. PROC Path_10()
  5.     MoveL Target_20,v1000,z100,tcp_super_hvataljke\WObj:=ulazniWob;
  6.     MoveL Target_30,v1000,z100,tcp_super_hvataljke\WObj:=izlazniWob;
  7. ENDPROC
  8.  
  9. PROC main() !metoda koja se poziva kada se pritisne dugme start
  10.    
  11.     !dimenzije ulaznog skladista
  12.     VAR num a_u := 2;  
  13.     VAR num b_u := 3;
  14.     VAR num c_u := 1;
  15.  
  16.     !dimenzije izlaznog skladista  
  17.     VAR num a_i := 2;
  18.     VAR num b_i := 3;
  19.     VAR num c_i := 1;
  20.  
  21.     !proverava da li obe dimenzija imaju isti broj elemenata, da bi mogao sve predmete rasporediti iz
  22.     !jednog u drugo skladista
  23.     IF (a_u*b_u*c_u)<>0 AND (a_i*b_i*c_i)<>0 AND((a_u*b_u*c_u)=(a_i*b_i*c_i)) then
  24.     pomeraj  a_u,  b_u , c_u,  a_i,  b_i,  c_i,true; !prvo ih prenosimo iz ulaznog u izlazno skladiste
  25.      WaitTime 5;
  26.     pomeraj  a_i,  b_i , c_i,  a_u,  b_u,  c_u,false;!a zatim ih vracamo nazad u ulazno
  27.     endif
  28. ENDPROC
  29.  
  30.  
  31. !metoda koja vrsi premestanje predmeta
  32. PROC pomeraj( num a_u, num b_u ,num c_u, num a_i, num b_i, num c_i,bool status)
  33. !da bi robot znao s kog na koji sto da pomera predmeta, postoji promenjiva status
  34. !       status==true oznacava da robot ide s prvog stola na drugi
  35. !       status==false znaci da robot ide s drugog stola na prvi(kada treba da vrati predmete nazad)
  36. !       posto on u sustini ne zna koji je koji sto
  37.     VAR num ukupno;
  38.     VAR num i;
  39.     VAR num x;
  40.     VAR num y;
  41.     VAR num z;
  42.     VAR num k;
  43.     VAR num i_i;
  44.     i_i:=0;
  45.     ukupno := (a_u*b_u*c_u)-1!racunamo broj predmeta u matrici
  46.     FOR i FROM ukupno TO 0 DO   !krecemo se petljom od krajnjeg predmeta na vrhu gomile, do predmeta na dnu
  47.            k:=i MOD (a_u*b_u);      !zbog toga sto matrica ima vise nivoa(Z osu) pri divisionu/deljenju za y kordinatu
  48.                     !moze doci do buga, pa se uvodi k promenjiva da se sve svede na isti nivo
  49.            x := 100 + 100 * (k MOD a_u);    !racunamo x kordinatu po modulu
  50.            y := 100 + 100 * (k DIV a_u);    !racunamo y kordinatu pomocu deljenja
  51.            z :=-30-20*(i DIV (a_u*b_u));    !i z kordinatu ili visinu na kojoj se predmet nalazi
  52.            prvoskladiste x,y,z,status;      !pozivamo metodu koja ce reci roboti da ode na tu kordinatu i uzme predmet
  53.  
  54.            k:=i_i MOD (a_i*b_i);    !racunamo kordinate izlaznog skladista, tj gde bi trebao da ostavi predemt
  55.            x := 100 + 100 * (k MOD a_i);
  56.            y := 100 + 100 * (k DIV a_i);
  57.            z :=-30-20*(i_i DIV (a_i*b_i));
  58.             drugoskladiste x,y,z,status;    !pozivamo metodu koja ce reci robotu da odnese predmet
  59.                         !i ostavi ga na drugom stolu
  60.             i_i:=i_i+1; !u petlji imamo jos jedan brojac koji ce predmete na drugom stolu, gde ih robot postavlja
  61.             !stavljati od dna do vrha
  62.     ENDFOR
  63. ENDPROC
  64.  
  65. PROC prvoskladiste(num x,num y,num z,bool status)
  66.     IF status then  !ako ide iz ulaznog u izlazno skladiste da uzme predmet
  67.       MoveJ Offs(Target_20, x, y, -80), v500, z0, tcp_super_hvataljke\WObj:=ulazniWob;
  68.       MoveL Offs(Target_20, x, y, z), v100, z0, tcp_super_hvataljke\WObj:=ulazniWob;
  69.       WaitRob \InPos;
  70.       ! zatvori hvataljku
  71.       SetDO signal_hvataljke, 1;
  72.       WaitTime 3;
  73.       MoveL Offs(Target_20, x, y, -80), v100, z0,  tcp_super_hvataljke\WObj:=ulazniWob;
  74.     else    !ako vraca predmete iz izlaznog u ulazno skladiste, tj ide prvo u izlazno skladiste
  75.       MoveJ Offs(Target_30, x, y, -80), v500, z0, tcp_super_hvataljke\WObj:=izlazniWob;
  76.       MoveL Offs(Target_30, x, y, z), v100, z0, tcp_super_hvataljke\WObj:=izlazniWob;
  77.       WaitRob \InPos;
  78.       ! zatvori hvataljku
  79.       SetDO signal_hvataljke, 1;
  80.       WaitTime 3;
  81.       MoveL Offs(Target_30, x, y, -80), v100, z0,  tcp_super_hvataljke\WObj:=izlazniWob;
  82.     ENDIF
  83. ENDPROC
  84.  
  85.  
  86. PROC drugoskladiste(num x,num y,num z,bool status)
  87.     IF status THEN !ako predmete ostavlja u izlaznom skladistu
  88.             MoveJ Offs(Target_30, x, y, -80), v500, z0, tcp_super_hvataljke\WObj:=izlazniWob;
  89.             MoveL Offs(Target_30, x, y, z), v100, z0, tcp_super_hvataljke\WObj:=izlazniWob;
  90.             WaitRob \InPos;
  91.             ! otvori hvataljku
  92.             SetDO signal_hvataljke, 0;
  93.             WaitTime 3;
  94.             MoveL Offs(Target_30, x, y, -80), v100, z0,  tcp_super_hvataljke\WObj:=izlazniWob;
  95.     ELSE !ako predmete ostavlja u ulaznom skladistu
  96.             MoveJ Offs(Target_20, x, y, -80), v500, z0, tcp_super_hvataljke\WObj:=ulazniWob;
  97.             MoveL Offs(Target_20, x, y, z), v100, z0, tcp_super_hvataljke\WObj:=ulazniWob;
  98.             WaitRob \InPos;
  99.             ! otvori hvataljku
  100.             SetDO signal_hvataljke, 0;
  101.             WaitTime 3;
  102.             MoveL Offs(Target_20, x, y, -80), v100, z0,  tcp_super_hvataljke\WObj:=ulazniWob;
  103.     endif
  104. ENDPROC
  105.  
  106.  
  107. ENDMODULE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement