Advertisement
Guest User

Untitled

a guest
May 8th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 7.89 KB | None | 0 0
  1. WITH Ada.Text_IO; USE ADA.Text_IO;
  2. WITH Ada.Integer_Text_IO; USE ADA.Integer_Text_IO;
  3. WITH Ada.Float_Text_IO; USE Ada.Float_Text_IO;
  4. with ada.Unchecked_Deallocation;
  5. with P_SIMU_ATELIER_io; use P_SIMU_ATELIER_io;
  6. with P_SEMAPHORE; use P_SEMAPHORE;
  7. with p_fifo;
  8. --with P_SIMU_ATELIER_IO; use P_SIMU_ATELIER_IO;
  9.  
  10.  
  11.  
  12.  
  13. procedure soupe is
  14.  
  15.    package p_fifo_piece is new p_fifo(T_PIECE);
  16.    use p_fifo_piece;
  17.  
  18.  
  19.  
  20.    semaphorePiece : Semaphore_exclusion_mutuelle ;
  21.    file : T_fifo ;
  22.  
  23.  
  24.    task S_Am is
  25.       entry init (numGamme : T_NUM_GAMME ; numPiece : T_NUM_PIECE) ;
  26.       entry prendre(numCellule:T_Num_Cellule) ;
  27.       entry fin_prendre(numCellule:T_Num_Cellule) ;
  28.       entry Transfert(pieceTour:in out T_PIECE) ;
  29.    end S_Am;
  30.  
  31.    task S_Av is
  32.       entry poser(numCellule:T_Num_Cellule; piece :T_piece) ;
  33.       entry fin_poser(numCellule:T_Num_Cellule) ;
  34.    end S_Av;
  35.  
  36.    task T_R_G is
  37.  
  38.       entry poser(numCellule:T_Num_Cellule; numTour:T_NUM_TOUR; pieceTour:in out T_PIECE); --idem que précedemment, prend en entrée les paramètres nécessaires pour les différentes procédures
  39.       entry fin_poser(numCellule:T_Num_Cellule; numTour:T_Num_Tour);
  40.    end T_R_G;
  41.  
  42.    task T_R_D is
  43.  
  44.       entry prendre(numCellule:T_Num_Cellule;  numTour:T_Num_Tour); --le robot prend de la tour et le place dans le stock aval
  45.       entry fin_prendre(numCellule:T_Num_Cellule;  numTour:T_Num_Tour; piece: T_PIECE); --le robot finit dde prendre
  46.    end T_R_D;
  47.  
  48.  
  49.    task body S_Am is
  50.       piece : T_PIECE;
  51.    begin
  52.  
  53.  
  54.  
  55.       loop
  56.          select
  57.  
  58.             accept init(numGamme : T_NUM_GAMME ; numPiece : T_NUM_PIECE) do
  59.                piece.num_piece := numPiece ;
  60.                piece.num_gamme := numGamme ;
  61.                file.POSER(piece);
  62.             end init;
  63.          or
  64.             accept prendre(numCellule:T_Num_Cellule) do
  65.  
  66.                file.PRENDRE(piece);
  67.                deplacer_robot(numCellule, 1, repos, STOCK_AMONT_1); --on déplace le robot vers le stock amont
  68.                fermer_pince(numCellule,1);
  69.  
  70.             end prendre;
  71.             accept fin_prendre(numCellule:T_Num_Cellule) do
  72.                --on ferme la pince, implicitement cela veut dire que la matière première a été prise
  73.  
  74.                deplacer_robot(numCellule,1,STOCK_AMONT_1,REPOS); --on déplace le robot vers la position de repos : le chargement de la tour se fait donc en deux temps
  75.  
  76.             end fin_prendre;
  77.          or
  78.             accept Transfert(pieceTour : in out T_PIECE) do
  79.                pieceTour.num_gamme:=piece.Num_Gamme ;
  80.                pieceTour.num_piece:=piece.Num_Piece;
  81.             end Transfert ;
  82.          or
  83.             terminate;
  84.          end select;
  85.  
  86.       end loop;
  87.    end S_Am;
  88.  
  89.    task body S_Av is
  90.    begin
  91.       loop
  92.          select
  93.             accept poser(numCellule:T_Num_Cellule; piece : T_PIECE) do
  94.  
  95.  
  96.                deplacer_robot(numCellule,2,repos,STOCK_AVAL_1) ;
  97.                ouvrir_pince(numCellule,2);
  98.                file.POSER(piece) ;
  99.              --  Put_Line("Num piece : " & integer'image(T_Num_Piece'pos(piece.num_piece)));
  100.  
  101.                      --   Put_Line("Num gamme : " & integer'image(T_Num_Gamme'pos(piece.num_gamme)));
  102.                           end poser ;
  103.  
  104.                           accept fin_poser(numCellule:T_Num_Cellule) do
  105.  
  106.                           deplacer_robot(numCellule,2, STOCK_AVAL_1, REPOS);
  107.  
  108.  
  109.                           end fin_poser;
  110.                           or
  111.                           terminate;
  112.                           end select;
  113.                           end loop;
  114.                           end S_Av;
  115.  
  116.  
  117.  
  118.                           task body T_R_G is
  119.  
  120.  
  121.                           begin
  122.  
  123.                           loop
  124.                           select
  125.  
  126.  
  127.                           accept poser(numCellule:T_Num_Cellule; numTour:T_Num_Tour; pieceTour:in out T_PIECE) do --same
  128.                           S_Am.prendre(1);
  129.                           S_Am.fin_prendre(1);
  130.                           S_am.Transfert(pieceTour) ;
  131.                           deplacer_robot(numCellule, 1, repos, T_LIEU'val(numTour)); -- on déplace le robot vers la tour concernée
  132.                           engager_robot(numCellule, 1, numTour); -- on engage le robot
  133.  
  134.                           serrer_mandrin(numCellule,numTour);
  135.                           ouvrir_pince(numCellule, 1); -- on ouvre la pince
  136.  
  137.  
  138.  
  139.                           end poser;
  140.  
  141.                           accept fin_poser(numCellule:T_Num_Cellule ; numTour:T_Num_Tour) do
  142.                           desengager_robot(numCellule,1,numTour); --on désengage
  143.  
  144.  
  145.                           deplacer_robot(numCellule,1,T_Lieu'val(numTour),repos); --on le fait revenir en position de repos
  146.                           end fin_poser;
  147.                           or
  148.  
  149.  
  150.  
  151.                           terminate ;
  152.                           end select;
  153.                           end loop;
  154.  
  155.                           end T_R_G;
  156.  
  157.                           task body T_R_D is
  158.  
  159.                           begin
  160.                           loop
  161.                           select
  162.  
  163.                           accept prendre(numCellule:T_Num_Cellule;  numTour:T_Num_Tour) do
  164.                           deplacer_robot(numCellule,2,repos,T_Lieu'val(numTour));
  165.                           engager_robot(numCellule,2,numTour);
  166.                           fermer_pince(numCellule,2) ;
  167.  
  168.                           end prendre;
  169.  
  170.                           accept fin_prendre(numCellule:T_Num_Cellule;  numTour:T_Num_Tour ; piece:T_piece) do
  171.                           DESSERRER_MANDRIN(numCellule,numTour) ;
  172.                           desengager_robot(numCellule,2,numTour);
  173.                           deplacer_robot(numCellule,2,T_Lieu'val(numTour),repos);
  174.                           S_Av.poser(1,piece);
  175.                           S_Av.fin_poser(1);
  176.  
  177.                           end fin_prendre;
  178.                           end select;
  179.                           end loop;
  180.  
  181.  
  182.  
  183.                           end T_R_D;
  184.  
  185.  
  186.  
  187.  
  188.    task type T_Tours ;
  189.  
  190.    type T_T_Tours is array(1..3) of T_Tours;
  191.    type ptr is access T_T_Tours ;
  192.  
  193.    tableauTours : T_T_Tours;
  194.    x : ptr := new tableauTours ;
  195.  
  196.    -- tableauTours(1).T_R_G.poser(1, T_Num_Tour'val'2);
  197.  
  198.  
  199.                           task body T_Tours is
  200.  
  201.                           pieceBis:T_PIECE;
  202.                           numGamme, numPiece:integer:=0;
  203.                           --numPiece:T_Num_Piece:=T_Num_Piece'first;
  204.                           begin
  205.  
  206.                           loop
  207.                           for i in 1..3 loop
  208.                           S_Am.init(T_Num_Gamme'val(numGamme),T_Num_Piece'val(numPiece));
  209.                           T_R_G.poser(1,T_Num_Tour'val(i),pieceBis);
  210.                           T_R_G.fin_poser(1,T_Num_Tour'val(i));
  211.  
  212.  
  213.                           usiner(1,T_Num_Tour'val(i),pieceBis);
  214.                           numGamme:=numGamme+1;
  215.                           numPiece:=numPiece+1;
  216.  
  217.                          -- if numGamme=T_Num_Gamme'last then
  218.                           --numGamme:=0; end if;
  219.                           --if numPiece=T_Num_Piece'last then
  220.                           --numPiece:=0;
  221.                           --end if;
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.                           T_R_D.prendre(1,T_Num_Tour'val(i));
  229.                           T_R_D.fin_prendre(1,T_Num_Tour'val(i),piecebis);
  230.  
  231.  
  232.  
  233.  
  234.  
  235.                           end loop;
  236.                           end loop;
  237.    end T_Tours;
  238.  
  239.  
  240.  
  241.  
  242.                           begin
  243.  
  244.                           --  semaphorePiece.init(1);
  245.  
  246.  
  247.                           --for i in 1..5 loop
  248.                           -- for j in 1..5 loop
  249.  
  250.  
  251.                           --  S_Am.init(T_Num_Gamme'val(i),T_Num_Piece'val(j));
  252.  
  253.                           null;
  254.                           --end loop;
  255.                           --end loop;
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.                           end soupe;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement