首頁的列表是不是變得清爽且具備吸引力了?


這裡放標題 (二級標題)

準備用來撰寫玩張用的測試文件。這裡可以自由使用 粗體斜體 或者 連結

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*---------------------------------------------------------------------------*/
/* FRLR 馬達驅動設置 */
static GRESULT GCMCMotorDriveFRLRSetup(GCMCCDS GGD_XMEM *lpControlDS)
  {
    /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
    /* -= 操作 =- */
    /*-----------------------------------------*/
    /* 處理動作選擇 */
    switch(lpControlDS->bytActionSelection)
      {
        /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
        /* -= homing =- */
        case GCMC_ACTION_SELECTION_HOMING:
          {
            lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_REAR;
            
            GCMCMotorDriveRearSetup(lpControlDS);
            
            break;
          }
        
        /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
        /* -= step counting =- */
        case GCMC_ACTION_SELECTION_STEP_COUNTING:
          {
            int GGD_DMEM iDelta;
            
            /* 避免在此之前曾有被人為推動改變刻度,這裡在重讀一次並進行檢查 */
            GCSCCControl(GCSCC_CONTROL_CODE_GET_COUNTER_VALUE, lpControlDS->lpDeviceSetupDS->bytStepCounterDevice, &(lpControlDS->iStepCounterCurrentValue));
            iDelta = (lpControlDS->iStepCounterLastCurrentValue - lpControlDS->iStepCounterCurrentValue);
            iDelta = GGD_GET_ABSOLUTE(iDelta);
            if(iDelta > lpControlDS->lpDeviceSetupDS->iEvaluationStepCounterExternalForceChangeValue)
              {
                return GGD_ERROR_ABORT;
              }
            
            /*  */
            if(lpControlDS->iStepCounterTargetValue == lpControlDS->iStepCounterCurrentValue)
              {
                lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_STOP;
                
                return GGD_FALSE;
              }
            else if(lpControlDS->iStepCounterTargetValue > lpControlDS->iStepCounterCurrentValue)
              {
                lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_FRONT;
                
                GCMCMotorDriveFrontSetup(lpControlDS);
              }
            else
              {
                lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_REAR;
                
                GCMCMotorDriveRearSetup(lpControlDS);
              }
            
            break;
          }
        
        /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
        /* -= front direction =- */
        case GCMC_ACTION_SELECTION_FRONT_DIRECTION:
          {
            int GGD_DMEM iDelta;
            
            /* 避免在此之前曾有被人為推動改變刻度,這裡在重讀一次並進行檢查 */
            GCSCCControl(GCSCC_CONTROL_CODE_GET_COUNTER_VALUE, lpControlDS->lpDeviceSetupDS->bytStepCounterDevice, &(lpControlDS->iStepCounterCurrentValue));
            iDelta = (lpControlDS->iStepCounterLastCurrentValue - lpControlDS->iStepCounterCurrentValue);
            iDelta = GGD_GET_ABSOLUTE(iDelta);
            if(iDelta > lpControlDS->lpDeviceSetupDS->iEvaluationStepCounterExternalForceChangeValue)
              {
                return GGD_ERROR_ABORT;
              }
            
            lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_FRONT;
            
            GCMCMotorDriveFrontSetup(lpControlDS);
            
            break;
          }
        
        /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
        /* -= rear direction =- */
        case GCMC_ACTION_SELECTION_REAR_DIRECTION:
          {
            int GGD_DMEM iDelta;
            
            /* 避免在此之前曾有被人為推動改變刻度,這裡在重讀一次並進行檢查 */
            GCSCCControl(GCSCC_CONTROL_CODE_GET_COUNTER_VALUE, lpControlDS->lpDeviceSetupDS->bytStepCounterDevice, &(lpControlDS->iStepCounterCurrentValue));
            iDelta = (lpControlDS->iStepCounterLastCurrentValue - lpControlDS->iStepCounterCurrentValue);
            iDelta = GGD_GET_ABSOLUTE(iDelta);
            if(iDelta > lpControlDS->lpDeviceSetupDS->iEvaluationStepCounterExternalForceChangeValue)
              {
                return GGD_ERROR_ABORT;
              }
            
            lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_REAR;
            
            GCMCMotorDriveRearSetup(lpControlDS);
            
            break;
          }
        
        /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
        /* -= others =- */
        default:
          {
            lpControlDS->bytDirectionSelection = GCMC_DIRECTION_SELECTION_STOP;
            
            return GGD_FALSE;
          }
      }
    
    return GGD_OK;
  }
  • 項目一
  • 項目二

💡 馬達控制實戰系列