⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 movementcontrol_function.c.bak

📁 UCOSii for c8051f020
💻 BAK
📖 第 1 页 / 共 3 页
字号:

/****************************************************************************************************************
 FUNCTON NAME              : Longitud_Execute
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/	
void Longitud_Execute(void)
{
    //1--床面板纵向向头端运动
    if(CHECK_STATUS(Control_1,C_L_MoveHead) && CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag))
    {
        if(!CHECK_STATUS(Output_1,Q_L_MoveFoot))   
        {
            SET_STATUS(Output_1,Q_L_MoveHead); 
        }
    }

    if(CHECK_STATUS(Longitud_Switch,V_L_Head) || !CHECK_STATUS(Control_1,C_L_MoveHead)) 
    {
        CLR_STATUS(Output_1,Q_L_MoveHead); 
    }
    
    
    
    //2--床面板纵向向足端运动
    if(CHECK_STATUS(Control_1,C_L_MoveFoot) && CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag))
    {
        if(!CHECK_STATUS(Output_1,Q_L_MoveHead))   
        {
            SET_STATUS(Output_1,Q_L_MoveFoot); 
        }
    }

    if(CHECK_STATUS(Longitud_Switch,V_L_Foot) || !CHECK_STATUS(Control_1,C_L_MoveFoot)) 
    {
        CLR_STATUS(Output_1,Q_L_MoveFoot); 
    }
    
    if(CHECK_STATUS(Control_1,C_L_MoveHead) && CHECK_STATUS(Control_1,C_L_MoveFoot))
    {
        CLR_STATUS(Output_1,Q_L_MoveHead);
        CLR_STATUS(Output_1,Q_L_MoveFoot); 
    }
    
    //保护程序
    if(CHECK_STATUS(Protect_Flag_1,V_T_ProtectTL))
    {
        if(CHECK_STATUS(Longitud_Switch,I_L_NLevelHead) && CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag)) 
        {
            SET_STATUS(Output_1,Q_L_MoveFoot); 
        }  
        if(CHECK_STATUS(Longitud_Switch,I_L_NLevelFoot) && CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag)) 
        {
            SET_STATUS(Output_1,Q_L_MoveHead); 
        }  
    }
    
    if(IS_NEG_EDGE(Protect_Flag_1,V_T_ProtectTL))
    {
        CLR_STATUS(Output_1,Q_L_MoveHead);
        CLR_STATUS(Output_1,Q_L_MoveFoot); 
    }
    
    UPDATE_EDGE(Protect_Flag_1);
    
    
    //当已经到达限位位置  继续运动或脱离限位时,清标志
    if(CHECK_STATUS(Longitud_Switch,A_L_NLevelHead) && CHECK_STATUS(Output_1,Q_L_MoveHead))
    {
        CLR_STATUS(Longitud_Switch,A_L_NLevelHead);
    }
    if(!CHECK_STATUS(Longitud_Switch,I_L_NLevelHead) && CHECK_STATUS(Output_1,Q_L_MoveFoot))
    {
        CLR_STATUS(Longitud_Switch,A_L_NLevelHead);
    }
    
    if(CHECK_STATUS(Longitud_Switch,A_L_NLevelFoot) && CHECK_STATUS(Output_1,Q_L_MoveFoot))
    {
        CLR_STATUS(Longitud_Switch,A_L_NLevelFoot);
    }
    if(!CHECK_STATUS(Longitud_Switch,I_L_NLevelFoot) && CHECK_STATUS(Output_1,Q_L_MoveHead))
    {
        CLR_STATUS(Longitud_Switch,A_L_NLevelFoot);
    }
}
//---------------------------------------------------------------------------------------------------------------





/****************************************************************************************************************
 FUNCTON NAME              : ImageLinkage_Status
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/	
void ImageLinkage_Status(void)
{
    TL_Position = TL_Pulse * 0.1212655;
    SC_Position = SC_Pulse * 0.0942478;
    TL_SC_Error = TL_Position - SC_Position;
}
//---------------------------------------------------------------------------------------------------------------

/****************************************************************************************************************
 FUNCTON NAME              : ImageLinkage_Execute
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/	
void ImageLinkage_Execute(void)
{
   if(CHECK_STATUS(Control_1 ,C_IL_MoveHead) && !CHECK_STATUS(Control_1 ,C_IL_MoveFoot))
   {
       if(!CHECK_STATUS(Output_1 ,Q_TL_AngulationFoot) && !CHECK_STATUS(Control_1 ,Q_SC_MoveFoot))
       {
           SET_STATUS(Output_1 ,Q_TL_AngulationHead);
           SET_STATUS(Output_1 ,Q_SC_MoveHead);
       }
   }
   else if(CHECK_STATUS(Control_1 ,C_IL_MoveFoot) && !CHECK_STATUS(Control_1 ,C_IL_MoveHead))
        {
            if(!CHECK_STATUS(Output_1 ,Q_TL_AngulationHead) && !CHECK_STATUS(Control_1 ,Q_SC_MoveHead))
            {
                SET_STATUS(Output_1 ,Q_TL_AngulationFoot);
                SET_STATUS(Output_1 ,Q_SC_MoveFoot);
            }
        }
   
   if(CHECK_STATUS(Control_1 ,C_IL_MoveFoot) || CHECK_STATUS(TubeLongitud_Switch,I_TL_Head) || CHECK_STATUS(Scanning_Switch,I_SC_LevelHead))
   {
       CLR_STATUS(Output_1 ,Q_TL_AngulationHead);
       CLR_STATUS(Output_1 ,Q_SC_MoveHead);
   }
    
   if(CHECK_STATUS(Control_1 ,C_IL_MoveHead) || CHECK_STATUS(TubeLongitud_Switch,I_TL_Foot) || CHECK_STATUS(Scanning_Switch,I_SC_LevelFoot))
   {
       CLR_STATUS(Output_1 ,Q_TL_AngulationFoot);
       CLR_STATUS(Output_1 ,Q_SC_MoveFoot);
   }
   
}
//---------------------------------------------------------------------------------------------------------------



/****************************************************************************************************************
 FUNCTON NAME              : SID_Execute
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/ 
void SID_Execute(void)
{
     
    if(IS_POS_EDGE(Control_1,C_SID_MoveUp) || IS_POS_EDGE(Control_1,C_SID_MoveDown))
    {
        SOFT_TIMER_RUN(SID_Timer,TOF,1500);
    }

    if(IS_NEG_EDGE(Control_1,C_SID_MoveUp) || IS_NEG_EDGE(Control_1,C_SID_MoveDown))
    {
        SOFT_TIMER_STOP(SID_Timer);
        CLR_STATUS(Output_1,Q_SID_MoveDown);
        CLR_STATUS(Output_1,Q_SID_MoveUp);
    }
    
    if(CHECK_STATUS(Control_1,C_SID_MoveUp) && !CHECK_STATUS(Control_1,C_SID_MoveDown) && !CHECK_STATUS(Output_1,Q_SID_MoveDown))
    {
        if(!CHECK_STATUS(SID_Switch,I_SID_5))
        {
            SET_STATUS(Output_1,Q_SID_MoveUp);
            CLR_STATUS(Output_1,Q_SID_MoveDown);
        }
    }
	  else if(CHECK_STATUS(Control_1,C_SID_MoveDown) && !CHECK_STATUS(Control_1,C_SID_MoveUp) && !CHECK_STATUS(Output_1,Q_SID_MoveUp))
         {
             if(!CHECK_STATUS(SID_Switch,I_SID_1))
             {
                 SET_STATUS(Output_1,Q_SID_MoveDown);
                 CLR_STATUS(Output_1,Q_SID_MoveUp);
             }
         }
         else if(CHECK_STATUS(SID_Switch,I_SID_1) || CHECK_STATUS(SID_Switch,I_SID_2) || CHECK_STATUS(SID_Switch,I_SID_3)
                || CHECK_STATUS(SID_Switch,I_SID_4) || CHECK_STATUS(SID_Switch,I_SID_5))
             {
                 CLR_STATUS(Output_1,Q_SID_MoveDown);
                 CLR_STATUS(Output_1,Q_SID_MoveUp);
             }

    if(
       	CHECK_STATUS(SID_Switch,I_SID_2) && (abs(TL_SC_Distance > 923))  ||
       	CHECK_STATUS(SID_Switch,I_SID_3) && (abs(TL_SC_Distance > 1007)) ||
       	CHECK_STATUS(SID_Switch,I_SID_4) && (abs(TL_SC_Distance > 1091)) ||
       	CHECK_STATUS(SID_Switch,I_SID_5) && (abs(TL_SC_Distance > 1175))
      	)
    {
        CLR_STATUS(Output_1,Q_SID_MoveDown);
    }

	if(CHECK_STATUS(SID_Switch,I_SID_5)) 
	{
   		CLR_STATUS(Output_1,Q_SID_MoveUp);
	}

	if(CHECK_STATUS(SID_Switch,I_SID_1)) 
	{
   		CLR_STATUS(Output_1,Q_SID_MoveDown);
	}

	//边沿更新
	UPDATE_EDGE(Control_1);

}
//---------------------------------------------------------------------------------------------------------------




/****************************************************************************************************************
 FUNCTON NAME              : ZeroPosition_Status
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/	
void ZeroPosition_Status(void)
{
    TubeLongitud_Status();
    Tabletop_LateralStatus();
    Longitud_Status();
}
//---------------------------------------------------------------------------------------------------------------


/****************************************************************************************************************
 FUNCTON NAME              : ZeroPosition_Execute
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/	
void ZeroPosition_Execute(void)
{
    //影像复位_Execute
    if(!CHECK_STATUS(TubeLongitud_Switch ,V_TL_ZERO))
    {
        if(CHECK_STATUS(Control_2,C_MoveAllToZero))   
        {
            if(TL_SC_Error >= 0) 
            {
                 SET_STATUS(Output_1,Q_TL_AngulationFoot);
                 CLR_STATUS(Output_1,Q_TL_AngulationHead);
            }
            else
            {
                 SET_STATUS(Output_1,Q_TL_AngulationHead);
                 CLR_STATUS(Output_1,Q_TL_AngulationFoot);
            }
        }
    }
    else if(CHECK_STATUS(TubeLongitud_Switch ,V_TL_ZERO))
         {
             CLR_STATUS(Output_1,Q_TL_AngulationHead);
             CLR_STATUS(Output_1,Q_TL_AngulationFoot);
         }
         
    //床面板横向复位_Execute
    if(!CHECK_STATUS(Lateral_Switch,A_La_Middle))
    {
        if(CHECK_STATUS(Control_2,C_MoveAllToZero))   
        {
            if(CHECK_STATUS(Lateral_Switch,A_La_Outside)) 
            {
                 SET_STATUS(Output_1,Q_La_MoveInside);
                 CLR_STATUS(Output_1,Q_La_MoveOutside);
            }
            if(CHECK_STATUS(Lateral_Switch,A_La_Inside)) 
            {
                 SET_STATUS(Output_1,Q_La_MoveOutside);
                 CLR_STATUS(Output_1,Q_La_MoveInside);
            }
        }
    }
    else if(CHECK_STATUS(Lateral_Switch,A_La_Middle))
         {
             CLR_STATUS(Output_1,Q_La_MoveOutside);
             CLR_STATUS(Output_1,Q_La_MoveInside);
         } 
         
         
    //床面板纵向复位
    if(!CHECK_STATUS(Longitud_Switch,A_L_Middle))
    {
        if(CHECK_STATUS(Control_2,C_MoveAllToZero))   
        {
            if(!CHECK_STATUS(Longitud_Switch,I_L_Middle) || CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag)) 
            {
                 SET_STATUS(Output_1,Q_L_MoveHead);
                 CLR_STATUS(Output_1,Q_L_MoveFoot); 
            }
            else
            {
                if(CHECK_STATUS(Soft_Timer[BX_Timer],Timer_Flag))
                {
                    SET_STATUS(Output_1,Q_L_MoveFoot); 
                }
                
            }
        }
    }
    else if(CHECK_STATUS(Longitud_Switch,A_L_Middle))
         {
             CLR_STATUS(Output_1,Q_L_MoveHead);
             CLR_STATUS(Output_1,Q_L_MoveFoot); 
         } 
         
    
   //防止误复位标志有效
   if(!CHECK_STATUS(Control_2,C_MoveAllToZero))
   {
       CLR_STATUS(Output_1,Q_TL_AngulationHead);
       CLR_STATUS(Output_1,Q_TL_AngulationFoot);
       CLR_STATUS(Output_1,Q_La_MoveOutside);
       CLR_STATUS(Output_1,Q_La_MoveInside);
       CLR_STATUS(Output_1,Q_L_MoveHead);
       CLR_STATUS(Output_1,Q_L_MoveFoot); 
   }
         
    
}

//---------------------------------------------------------------------------------------------------------------




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -