Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.67 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <semaphore.h>
  3. #include <errno.h>
  4. #include <sys/types.h>
  5. #include <sys/mman.h>
  6. #include <sys/stat.h>
  7. #include <sys/fcntl.h>
  8. #include <stdio.h>
  9. #include <signal.h>
  10. #include <stdlib.h>
  11. #define shm_size 4000
  12. /* gcc -std=c99 gripper_auto.c -lpthread -lrt -Wall -o gripper */
  13.  
  14. int count=0;
  15.  
  16. int main()
  17. {
  18. void* shmptr;
  19. int shm_mach,index,i,j,k,licznik=0;
  20. char shm_m[] = "shared";
  21. char sem_m[] = "semaphore";
  22. sem_t *sem_mach;
  23.  
  24. shm_mach=shm_open(shm_m, O_RDWR ,0);
  25. if(shm_mach == -1)
  26. {
  27. perror("SHM_OPEN FAILED/TURN ON INTERFACE FIRST");
  28. exit(-1);
  29. }
  30.  
  31. shmptr=mmap(0,shm_size,PROT_WRITE|PROT_READ,MAP_SHARED,shm_mach,0);
  32. if(shmptr == MAP_FAILED)
  33. {
  34. perror("MMAP FAILED");
  35. exit(-1);
  36. }
  37.  
  38. sem_mach = sem_open(sem_m,0);
  39. if(sem_mach==SEM_FAILED)
  40. {
  41. perror("SEN_OPEN FAILED");
  42. exit(-1);
  43. }
  44.  
  45. char *shm_ptr = shmptr;
  46. int value;
  47. sem_getvalue(sem_mach,&value);
  48.  
  49.  
  50. for(index=0;index<100000;index++)
  51. {
  52. //sem_wait(sem_mach);
  53. //STANOWISKO 1
  54. if(shm_ptr[1]!=-1 && shm_ptr[1]!=-2 && shm_ptr[2]==1 && shm_ptr[7]!=1 && shm_ptr[7]!=2 && shm_ptr[50]==1)
  55. {
  56. //sem_post(sem_mach);
  57. for(i=0;i<15;i++)
  58. {
  59. sleep(1);
  60. printf("\n GRIPPER: TAŚMA ====> WORK-STATION 1 \t");
  61. //sem_wait(sem_mach);
  62. shm_ptr[7]=-1;
  63. count=-1;
  64. licznik++;
  65. if(shm_ptr[2]==0)
  66. {
  67. printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
  68. for(k=0;k<licznik;k++)
  69. {
  70. sleep(1);
  71. printf("\n ====> SERWIS \t");
  72. //sem_wait(sem_mach);
  73. shm_ptr[7]=-1;
  74. //sem_post(sem_mach);
  75. }
  76. k=0;
  77. sleep(1);
  78. printf("\n MASZYNA WRÓCIŁA \t");
  79. licznik=0;
  80. //sem_wait(sem_mach);
  81. shm_ptr[7]=0;
  82. //sem_post(sem_mach);
  83. count=0;
  84. }
  85. if(count==0)
  86. goto przeskok;
  87. //sem_post(sem_mach);
  88. }
  89. i=0;
  90. for(j=0;j<2;j++)
  91. {
  92. sleep(1);
  93. printf("\n GRIPPER: WORK-STATION 1 - GRABBING \t");
  94. //sem_wait(sem_mach);
  95. shm_ptr[7]=-2;
  96. count=2;
  97. //sem_post(sem_mach);
  98. }
  99. j=0;
  100. sleep(1);
  101. printf("\n ODNOSIMY! \t");
  102. shm_ptr[2]=0;
  103. //sem_wait(sem_mach);
  104. shm_ptr[50]=0;
  105. //sem_post(sem_mach);
  106. for(k=0;k<3;k++)
  107. {
  108. sleep(1);
  109. printf("\n WORK-STATION 1 ====> TAŚMA \t");
  110. //sem_wait(sem_mach);
  111. shm_ptr[7]=-1;
  112. //sem_post(sem_mach);
  113. }
  114. k=0;
  115. sleep(1);
  116. printf("\n WORK-STATION 1 EMPTIED \t");
  117. //sem_wait(sem_mach);
  118. shm_ptr[7]=0;
  119. count=0;
  120. //sem_post(sem_mach);
  121. }
  122. else if(shm_ptr[1]!=1 && shm_ptr[1]!=2 && shm_ptr[3]==1 && shm_ptr[7]!=-1 && shm_ptr[7]!=-2 && shm_ptr[51]==1)
  123. {
  124. //sem_post(sem_mach);
  125. for(i=0;i<3;i++)
  126. {
  127. sleep(1);
  128. printf("\n SERWIS ====> WORK-STATION 2 \t");
  129. //sem_wait(sem_mach);
  130. shm_ptr[7]=1;
  131. count=1;
  132. licznik++;
  133. if(shm_ptr[3]==0)
  134. {
  135. printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
  136. for(k=0;k<licznik;k++)
  137. {
  138. sleep(1);
  139. printf("\n ====> SERWIS \t");
  140. //sem_wait(sem_mach);
  141. shm_ptr[1]=1;
  142. //sem_post(sem_mach);
  143. }
  144. k=0;
  145. sleep(1);
  146. printf("\n MASZYNA WRÓCIŁA \t");
  147. licznik=0;
  148. //sem_wait(sem_mach);
  149. shm_ptr[7]=0;
  150. //sem_post(sem_mach);
  151. count=0;
  152. }
  153. if(count==0)
  154. goto przeskok;
  155. //sem_post(sem_mach);
  156. }
  157. i=0;
  158. for(j=0;j<2;j++)
  159. {
  160. sleep(1);
  161. printf("\n WORK-STATION 2 - GRABBING \t");
  162. //sem_wait(sem_mach);
  163. shm_ptr[7]=2;
  164. count=2;
  165. //sem_post(sem_mach);
  166. }
  167. j=0;
  168. sleep(1);
  169. printf("\n ODNOSIMY! \t");
  170. shm_ptr[3]=0;
  171. //sem_wait(sem_mach);
  172. shm_ptr[51]=0;
  173. //sem_post(sem_mach);
  174. for(k=0;k<3;k++)
  175. {
  176. sleep(1);
  177. printf("\n WORK-STATION 2 ====> SERWIS \t");
  178. //sem_wait(sem_mach);
  179. shm_ptr[7]=1;
  180. count=1;
  181. //sem_post(sem_mach);
  182. }
  183. k=0;
  184. sleep(1);
  185. printf("\n WORK-STATION 2 EMPTIED \t");
  186. //sem_wait(sem_mach);
  187. shm_ptr[7]=0;
  188. count=0;
  189. //sem_post(sem_mach);
  190. }
  191. else if(count==0)
  192. {
  193. przeskok:
  194. //sem_post(sem_mach);
  195. sleep(1);
  196. //sem_wait(sem_mach);
  197. shm_ptr[7]=0;
  198. //sem_post(sem_mach);
  199. printf("\n GRIPPER AT CONVEYOR / WAITING FOR READY BOX \t [%d]",index);
  200. }
  201. else
  202. {
  203. printf("\n INTERFACE CLOSED \n");
  204. sem_post(sem_mach);
  205. sem_unlink(sem_m);
  206. munmap(shmptr,shm_size);
  207. close(shm_mach);
  208. sem_close(sem_mach);
  209. shm_unlink(shm_m);
  210. exit(0);
  211. }
  212.  
  213. }
  214.  
  215.  
  216.  
  217. munmap(shmptr,shm_size);
  218. close(shm_mach);
  219. sem_close(sem_mach);
  220. sem_unlink(sem_m);
  221. shm_unlink(shm_m);
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement