Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <semaphore.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <sys/fcntl.h>
- #include <stdio.h>
- #include <signal.h>
- #include <stdlib.h>
- #define shm_size 4000
- /* gcc -std=c99 gripper_auto.c -lpthread -lrt -Wall -o gripper */
- int count=0;
- int main()
- {
- void* shmptr;
- int shm_mach,index,i,j,k,licznik=0;
- char shm_m[] = "shared";
- char sem_m[] = "semaphore";
- sem_t *sem_mach;
- shm_mach=shm_open(shm_m, O_RDWR ,0);
- if(shm_mach == -1)
- {
- perror("SHM_OPEN FAILED/TURN ON INTERFACE FIRST");
- exit(-1);
- }
- shmptr=mmap(0,shm_size,PROT_WRITE|PROT_READ,MAP_SHARED,shm_mach,0);
- if(shmptr == MAP_FAILED)
- {
- perror("MMAP FAILED");
- exit(-1);
- }
- sem_mach = sem_open(sem_m,0);
- if(sem_mach==SEM_FAILED)
- {
- perror("SEN_OPEN FAILED");
- exit(-1);
- }
- char *shm_ptr = shmptr;
- int value;
- sem_getvalue(sem_mach,&value);
- for(index=0;index<100000;index++)
- {
- //sem_wait(sem_mach);
- //STANOWISKO 1
- 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)
- {
- //sem_post(sem_mach);
- for(i=0;i<15;i++)
- {
- sleep(1);
- printf("\n GRIPPER: TAŚMA ====> WORK-STATION 1 \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=-1;
- count=-1;
- licznik++;
- if(shm_ptr[2]==0)
- {
- printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
- for(k=0;k<licznik;k++)
- {
- sleep(1);
- printf("\n ====> SERWIS \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=-1;
- //sem_post(sem_mach);
- }
- k=0;
- sleep(1);
- printf("\n MASZYNA WRÓCIŁA \t");
- licznik=0;
- //sem_wait(sem_mach);
- shm_ptr[7]=0;
- //sem_post(sem_mach);
- count=0;
- }
- if(count==0)
- goto przeskok;
- //sem_post(sem_mach);
- }
- i=0;
- for(j=0;j<2;j++)
- {
- sleep(1);
- printf("\n GRIPPER: WORK-STATION 1 - GRABBING \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=-2;
- count=2;
- //sem_post(sem_mach);
- }
- j=0;
- sleep(1);
- printf("\n ODNOSIMY! \t");
- shm_ptr[2]=0;
- //sem_wait(sem_mach);
- shm_ptr[50]=0;
- //sem_post(sem_mach);
- for(k=0;k<3;k++)
- {
- sleep(1);
- printf("\n WORK-STATION 1 ====> TAŚMA \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=-1;
- //sem_post(sem_mach);
- }
- k=0;
- sleep(1);
- printf("\n WORK-STATION 1 EMPTIED \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=0;
- count=0;
- //sem_post(sem_mach);
- }
- 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)
- {
- //sem_post(sem_mach);
- for(i=0;i<3;i++)
- {
- sleep(1);
- printf("\n SERWIS ====> WORK-STATION 2 \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=1;
- count=1;
- licznik++;
- if(shm_ptr[3]==0)
- {
- printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
- for(k=0;k<licznik;k++)
- {
- sleep(1);
- printf("\n ====> SERWIS \t");
- //sem_wait(sem_mach);
- shm_ptr[1]=1;
- //sem_post(sem_mach);
- }
- k=0;
- sleep(1);
- printf("\n MASZYNA WRÓCIŁA \t");
- licznik=0;
- //sem_wait(sem_mach);
- shm_ptr[7]=0;
- //sem_post(sem_mach);
- count=0;
- }
- if(count==0)
- goto przeskok;
- //sem_post(sem_mach);
- }
- i=0;
- for(j=0;j<2;j++)
- {
- sleep(1);
- printf("\n WORK-STATION 2 - GRABBING \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=2;
- count=2;
- //sem_post(sem_mach);
- }
- j=0;
- sleep(1);
- printf("\n ODNOSIMY! \t");
- shm_ptr[3]=0;
- //sem_wait(sem_mach);
- shm_ptr[51]=0;
- //sem_post(sem_mach);
- for(k=0;k<3;k++)
- {
- sleep(1);
- printf("\n WORK-STATION 2 ====> SERWIS \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=1;
- count=1;
- //sem_post(sem_mach);
- }
- k=0;
- sleep(1);
- printf("\n WORK-STATION 2 EMPTIED \t");
- //sem_wait(sem_mach);
- shm_ptr[7]=0;
- count=0;
- //sem_post(sem_mach);
- }
- else if(count==0)
- {
- przeskok:
- //sem_post(sem_mach);
- sleep(1);
- //sem_wait(sem_mach);
- shm_ptr[7]=0;
- //sem_post(sem_mach);
- printf("\n GRIPPER AT CONVEYOR / WAITING FOR READY BOX \t [%d]",index);
- }
- else
- {
- printf("\n INTERFACE CLOSED \n");
- sem_post(sem_mach);
- sem_unlink(sem_m);
- munmap(shmptr,shm_size);
- close(shm_mach);
- sem_close(sem_mach);
- shm_unlink(shm_m);
- exit(0);
- }
- }
- munmap(shmptr,shm_size);
- close(shm_mach);
- sem_close(sem_mach);
- sem_unlink(sem_m);
- shm_unlink(shm_m);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement