Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.93 KB | None | 0 0
  1. #include "vxWorks.h"
  2. #include "sysLib.h"
  3. #include "taskLib.h"
  4. #include "stdio.h"
  5. #include "stdlib.h"
  6. #include "cinterface.h"
  7. #include "wdLib.h"
  8. #include "semLib.h"
  9.  
  10. char state;
  11. char sizeState2;
  12. char sizeState1;
  13. int blockSizeTaskFront;
  14. int gateControlTaskFront;
  15. int countBlocksTask;
  16. int sizeStorageFront = 0;
  17. int smallBlockCountFront = 0;
  18. int largeBlockCountFront = 0;
  19. int queFront = 0;
  20. int blockSizeTimerFrontRes;
  21. int gateControlTimerFrontRes;
  22. int gateControlTimerFrontRes2;
  23. int countBlocksTimerRes;
  24. WDOG_ID gateControlTimerFront;
  25. WDOG_ID gateControlTimerFront2;
  26. WDOG_ID countBlocksTimer;
  27. WDOG_ID blockSizeTimerFront;
  28. SEM_ID gateControlFrontSem;
  29. SEM_ID countBlocksSem;
  30. SEM_ID blockSizeFrontSem;
  31.  
  32. void timerCallBack (void)
  33. {
  34.  semGive(blockSizeFrontSem);
  35.  blockSizeTimerFrontRes = wdStart(blockSizeTimerFront, 0.7 * sysClkRateGet(), (FUNCPTR)timerCallBack, 0);
  36. }
  37.  
  38. void timerCallBack1 (void)
  39. {
  40.  semGive(gateControlFrontSem);
  41. }
  42.  
  43. void timerCallBack2 (void)
  44. {
  45.  semGive(gateControlFrontSem);
  46. }
  47.  
  48. void timerCallBack3 (void)
  49. {
  50.  semGive(countBlocksSem);
  51. }
  52.  
  53.  
  54. void countBlocks(void)
  55. {
  56.  while(1)
  57.   {
  58.    resetCountSensor(0);
  59.    state =  readCountSensor(0);
  60.   if(state == 1)
  61.    {
  62.     largeBlockCountFront = largeBlockCountFront + 1;
  63.     printf("Large Block Count =  %d \n", largeBlockCountFront);
  64.     printf("small Block Count =  %d \n", smallBlockCountFront);
  65.    }
  66.    semTake(countBlocksSem, WAIT_FOREVER);
  67.  }
  68. }
  69.  
  70. void gateControlFront(void)
  71. {
  72.  while(1)
  73.  {
  74.   printf("close gate \n");
  75.   queFront = 0;
  76.   setGates(1);
  77.   taskDelay(1.45 * sysClkRateGet());
  78.   setGates(0);
  79.   semTake(gateControlFrontSem, WAIT_FOREVER);
  80.  }
  81. }
  82.  
  83. void blockSizeFront(void)
  84. {  
  85.     while(1)          
  86.     {
  87.       resetSizeSensors(0);
  88.       sizeState2 = readSizeSensors(0); /* read the size sensors on the front belt*/
  89.       printf("sizesensor read 1 =  %d \n", sizeState2);
  90.      
  91.      
  92.      if(sizeState2 == 1 && sizeStorageFront == 0)
  93.      {
  94.        sizeStorageFront = 1;
  95.        printf("sizesensor read 2 =  %d \n", sizeState2);
  96.  
  97.        resetSizeSensors(0);
  98.        taskDelay(0.45 * sysClkRateGet());
  99.        sizeState2 = readSizeSensors(0);      
  100.      }
  101.      if(sizeState2 == 0 && sizeStorageFront ==1)
  102.      {
  103.        smallBlockCountFront = smallBlockCountFront + 1;  
  104.        resetSizeSensors(0);
  105.        printf("sizesensor read 3 =  %d \n", sizeState2);
  106.  
  107.        sizeStorageFront = 0;
  108.        printf("Small block detected \n");
  109.        queFront = queFront + 1;
  110.        
  111.        if(queFront == 2)
  112.     {
  113.       gateControlTimerFrontRes2 = wdStart(gateControlTimerFront2, 3.45 * sysClkRateGet(),(FUNCPTR)timerCallBack2, 0);
  114.     }
  115.        else
  116.        {
  117.            gateControlTimerFrontRes = wdStart(gateControlTimerFront, 3.45 * sysClkRateGet(),(FUNCPTR)timerCallBack1, 0);
  118.        }
  119.      }
  120.  
  121. else if(sizeState2 == 3 && sizeStorageFront == 1)
  122.      {
  123.        resetSizeSensors(0);
  124.        sizeStorageFront = 0;
  125.        printf("Large block detected \n");
  126.  
  127.        countBlocksTimerRes = wdStart(countBlocksTimer, 5 * sysClkRateGet(),(FUNCPTR)timerCallBack3, 0);
  128.      }
  129.        semTake(blockSizeFrontSem, WAIT_FOREVER);
  130.  }
  131. }    
  132.  
  133. void main(void)
  134. {
  135.  startMotor();
  136.  
  137.  blockSizeFrontSem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
  138.  gateControlFrontSem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
  139.  countBlocksSem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
  140.  
  141.  gateControlTimerFront = wdCreate();
  142.  gateControlTimerFront2 = wdCreate();
  143.  countBlocksTimer = wdCreate();
  144.  blockSizeTimerFront = wdCreate();
  145.  
  146.  blockSizeTimerFrontRes = wdStart(blockSizeTimerFront, 0.7* sysClkRateGet(),(FUNCPTR)timerCallBack, 0);
  147.  
  148.  gateControlTaskFront = taskSpawn("Gate control task Front", 100, 0, 20000, (FUNCPTR)gateControlFront, 0,0,0,0,0,0,0,0,0,0);
  149.  countBlocksTask = taskSpawn("Count blocks task", 100, 0, 20000, (FUNCPTR)countBlocks, 0,0,0,0,0,0,0,0,0,0);
  150.  blockSizeTaskFront = taskSpawn("Block size task Front", 150, 0, 20000, (FUNCPTR)blockSizeFront, 0,0,0,0,0,0,0,0,0,0);
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement