#include "global.h" #if XI_DONG_MACHINE void HL_InitAction(void); void HL_Action(void); void HL_SetAlarmCode(unsigned alarm_code); void HL_StartStopAction(void); void HL_AutoRunStep(void); void HL_Motor(void); void HL_Step(void); unsigned char cDWflg=0,cZCXflg=0,cHLflg=0,HL_StopFlg; short *offset_length_buff; unsigned char HL_X02_IN_FLAG,HL_X02_IN_FLAG_OLD; unsigned short HL_X02_FILTER; void HL_SetAlarmCode(unsigned alarm_code) { SetAlarmCode(HL_ALARM_ADDR,alarm_code); HL_bAlarmStop = 1; } void HL_InitAction(void) { CalFreqTab_X_Free(14); XGearRatio = 1; HL_X02_IN_FLAG = HL_GUO_LIAN_IN; HL_X02_IN_FLAG_OLD = HL_X02_IN_FLAG; } //手动动作 void HL_ManualAction(void) { if(!HL_bRunning) { //警告跳出 if(bClearTotal) { bClearTotal = 0; ClrcToTal(HL_TOTAL_ADDR); HL_bSetWorkData = 1; } if(HL_bAdd) { HL_bAdd = 0; HL_PARAM_DELAY_STOP += 10; } if(HL_bDec) { HL_bDec = 0; if(HL_PARAM_DELAY_STOP >= 10)HL_PARAM_DELAY_STOP -= 10; } if(HL_bHM) { HL_bHM = 0; HL_HM_VAVLE = ~HL_HM_VAVLE; } if(HL_bTFK) { HL_bTFK = 0; HL_TFK_VAVLE = ~HL_TFK_VAVLE; } if(HL_bBB) { HL_bBB = 0; HL_BB_VAVLE = ~HL_BB_VAVLE; } if(HL_bJD) { HL_bJD = 0; HL_JD_VAVLE = ~HL_JD_VAVLE; } if(HL_bCCX) { HL_bCCX = 0; HL_CCX_VAVLE = ~HL_CCX_VAVLE; } if(HL_bSL) { HL_bSL = 0; HL_SL_MOTOR = ~HL_SL_MOTOR; } if(HL_bDK) { HL_bDK = 0; HL_DK_VAVLE = ~HL_DK_VAVLE; } if(HL_bMotor) { SetEn(X_AXIS,HL_MOTOR_EN); if(!X_DRV)AxisContinueMove(X_AXIS,10,HL_DIR_P); } else { if(X_DRV)AxisDecStop(X_AXIS); } } } //合链动作 void HL_Action(void) { HL_ManualAction(); HL_StartStopAction(); HL_Motor(); HL_Step(); HL_AutoRunStep(); } //启动停止故障停止动作 void HL_StartStopAction(void) { static unsigned long dwstop_cnt = 0; if((START_IN_UP || HL_bStart || HL_bSingStart || HL_bDW || HL_bZCX || HL_bHL) && !HL_bRunning && (HL_AutoStep ==0)) { if(!HL_CCX_LIMIT_IN)HL_SetAlarmCode(HL_CCX_LIMIT_ALARM); else if(!HL_CCX_ORIGIN_IN)HL_SetAlarmCode(HL_CCX_ORIGIN_ALARM); else { SetAlarmCode(HL_ALARM_ADDR,HL_NO_ALARM); HL_bRunning = 1; HL_StopFlg = 0; dwZipCnt = 0; if(HL_bSingStart) { HL_bSingStart = 0; SingOneFlg = 1; } if(HL_bDW) { cDWflg = 1; dwZipCnt = 1; } if(HL_bZCX)cZCXflg = 1; if(HL_bHL)cHLflg = 1; if(HL_bZCX)HL_AutoStep = 4; else if(HL_bHL)HL_AutoStep = 1; else HL_AutoStep = 1; } HL_bDW = 0; HL_bZCX = 0; HL_bHL = 0; HL_bSingStart = 0; HL_bStart = 0; } if(!HL_bMotor && !X_DRV && !HL_bRunning && (HL_MotorStep==0))SetEn(X_AXIS,HL_MOTOR_DISEN); if(HL_bStop) { HL_bStop = 0; if(HL_bRunning) SingOneFlg = 1; else { HL_HM_VAVLE = 0; HL_JD_VAVLE = 0; HL_CCX_VAVLE = 0; HL_DK_VAVLE = 0; HL_SL_MOTOR = 0; HL_bRunning = 0; HL_AutoStep = 0; HL_MotorStep = 0; SingOneFlg = 0; HL_bMotor = 0; cDWflg = 0; cZCXflg = 0; cHLflg = 0; AxisEgmStop(X_AXIS); SetAlarmCode(HL_ALARM_ADDR,HL_NO_ALARM); HL_StopFlg = 1; } } if(STOP_IN_UP) { if(HL_bRunning) { HL_bStop = 0; HL_DK_VAVLE = 0; HL_JD_VAVLE = 0; HL_CCX_VAVLE = 0; HL_SL_MOTOR = 0; HL_bRunning = 0; HL_AutoStep = 0; HL_MotorStep = 0; HL_HLStep = 0; SingOneFlg = 0; HL_bMotor = 0; cDWflg = 0; cZCXflg = 0; cHLflg = 0; SetAlarmCode(HL_ALARM_ADDR,HL_NO_ALARM); AxisEgmStop(X_AXIS); } else { HL_bStop = 0; HL_DK_VAVLE = 0; HL_JD_VAVLE = 0; HL_CCX_VAVLE = 0; HL_SL_MOTOR = 0; HL_bRunning = 0; HL_AutoStep = 0; HL_MotorStep = 0; HL_HLStep = 0; SingOneFlg = 0; HL_bMotor = 0; cDWflg = 0; cZCXflg = 0; cHLflg = 0; SetAlarmCode(HL_ALARM_ADDR,HL_NO_ALARM); AxisEgmStop(X_AXIS); HL_HM_VAVLE = 0; HL_StopFlg = 1; } } if(HL_StopFlg) { if(!HL_SM_LIMIT_IN && !HL_XM_LIMIT_IN) { HL_BB_VAVLE = 0; HL_TFK_VAVLE = 0; HL_StopFlg = 0; } } if(HL_bAlarmStop) { HL_bAlarmStop = 0; AxisEgmStop(X_AXIS); HL_AutoStep = 0; HL_ManDKStep = 0; HL_MotorStep = 0; HL_HLStep = 0; HL_bRunning = 0; SingOneFlg = 0; cDWflg = 0; cZCXflg = 0; cHLflg = 0; } if(HL_KA_DAI_IN) { HL_SetAlarmCode(HL_KD_ALARM); } else { // if(GetAlarmCode(HL_ALARM_ADDR) == HL_KD_ALARM)SetAlarmCode(HL_ALARM_ADDR,HL_NO_ALARM); } } void HL_Step(void) { static long hm_save_buff; switch(HL_HLStep) { case 1: if(HL_GUO_LIAN_IN_UP) { hm_save_buff = dwRealPos; HL_HLStep = 2; } break; case 2: if((dwRealPos + HL_PARAM_DELAY_HM_BACK) <= hm_save_buff) { HL_HM_VAVLE = 0; HL_HLDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_HLStep = 3; } else if(!X_DRV)HL_SetAlarmCode(HL_HM_BACK_ALARM); break; case 3: if(!HL_SM_LIMIT_IN && !HL_XM_LIMIT_IN) { HL_HLStep = 4; HL_HLDelay = dwTickCount + HL_PARAM_DELAY_BB_BACK; } else if(dwTickCount >= HL_HLDelay) { if(HL_SM_LIMIT_IN)HL_SetAlarmCode(HL_SM_LIMIT_ALARM); else HL_SetAlarmCode(HL_XM_LIMIT_ALARM); } break; case 4: if(dwTickCount >= HL_HLDelay) { HL_HLStep = 5; HL_BB_VAVLE = 0; HL_HLDelay = dwTickCount + HL_VAVLE_ALARM_TIME; } break; case 5: if(!HL_BB_LIMIT_IN) { HL_HLStep = 0; if(SingOneFlg) { SingOneFlg = 0; HL_AutoStep = 0; HL_bRunning = 0; HL_MotorStep = 0; } HL_HLDelay = dwTickCount; } else if(dwTickCount >= HL_HLDelay) { HL_SetAlarmCode(HL_BB_LIMIT_ALARM); } break; } } //电机动作 void HL_Motor(void) // { static long save_buff,hm_save_buff; DISPLAY_DATA0 = dwRealPos; DISPLAY_DATA1 = HL_AutoStep; DISPLAY_DATA2 = HL_MotorStep; DISPLAY_DATA3 = HL_HLStep; HL_X02_IN_FLAG_OLD = HL_X02_IN_FLAG; if(HL_GUO_LIAN_IN) { if(HL_X02_FILTER < HL_PARAM_FILTER_TIMES) { HL_X02_FILTER++; } else HL_X02_IN_FLAG = 1; } else if(HL_X02_FILTER > (HL_PARAM_FILTER_TIMES/2)) { HL_X02_FILTER--; } else HL_X02_IN_FLAG = 0; dwRealPos = GetPos(X_AXIS); switch(HL_MotorStep) { case 0:break; case 1: if(GetEn(X_AXIS) == 0) { SetEn(X_AXIS,HL_MOTOR_EN); HL_MotorDelay = dwTickCount + 100; } HL_MotorStep = 2; break; case 2: if(dwTickCount >= HL_MotorDelay) { HL_MotorDelay = dwTickCount + HL_PARAM_MOTOR_ALARM_TIME; if(!HL_GUO_LIAN_IN) { MoveAction_Const_AccDec(X_AXIS,HL_DIR_P,HL_PARAM_LOW_SPEED,1,5,1); HL_MotorStep = 4; } else { if(dwZipCnt == 0) MoveAction_Const_AccDec(X_AXIS,HL_DIR_P,HL_PARAM_HIGH_SPEED/2,1,5,1); else MoveAction_Const_AccDec(X_AXIS,HL_DIR_P,HL_PARAM_HIGH_SPEED,1,5,1); HL_MotorStep = 3; } if(HL_HM_VAVLE) { *offset_length_buff = 0; if(HL_HLStep == 0)HL_HLStep = 1; } else { *offset_length_buff = 0; // offset_length_buff = &user_datas[22]; } } break; case 3: if(HL_GUO_LIAN_IN_DW) { AxisChangeSpeed(X_AXIS,HL_PARAM_LOW_SPEED); HL_MotorDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_MotorStep = 4; } else if((dwTickCount >= HL_MotorDelay) || HL_GUO_LIAN_IN_UP) HL_SetAlarmCode(HL_GUOLIAN_ALARM); break; case 4: if((HL_X02_IN_FLAG && !HL_X02_IN_FLAG_OLD)) { save_buff = dwRealPos; HL_MotorStep = 5; } else if(dwTickCount >= HL_MotorDelay) HL_SetAlarmCode(HL_GUOLIAN_ALARM); break; case 5: if((dwRealPos + HL_PARAM_DELAY_STOP) <= save_buff) { AxisEgmStop(X_AXIS); HL_MotorStep = 6; } break; case 6: if(!X_DRV && (HL_HLStep == 0)) { HL_MotorStep = 0; HL_MotorDelay = dwTickCount; } break; } } //自动运行动作 void HL_AutoRunStep(void) { if(HL_bRunning) { if(HL_AutoStep == 1) { HL_AutoStep = 2; } else if((HL_AutoStep == 2) && (dwTickCount >= HL_AutoDelay)) { if(HL_MotorStep == 0) { HL_AutoStep = 3; HL_MotorStep = 1; } } else if(HL_AutoStep == 3) { if(HL_MotorStep == 0) { if(cDWflg | cHLflg) { cDWflg = 0; cHLflg = 0; HL_AutoStep = 0; HL_bRunning = 0; } else { HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_TFK; HL_AutoStep = 4; } } } else if((HL_AutoStep == 4) && (dwTickCount >= HL_AutoDelay)) { HL_TFK_VAVLE = 0; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 5; } else if(HL_AutoStep == 5) { if(HL_TFK_LIMIT_IN) { HL_AutoStep = 6; HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_HM; } else if(dwTickCount >= HL_AutoDelay) { HL_SetAlarmCode(HL_TFK_LIMIT_ALARM); } } else if((HL_AutoStep == 6) && (dwTickCount >= HL_AutoDelay)) { HL_HM_VAVLE = 1; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 7; } else if(HL_AutoStep == 7) { if(HL_SM_LIMIT_IN && HL_XM_LIMIT_IN) { HL_AutoStep = 8; HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_TFK_BACK; } else if(dwTickCount >= HL_AutoDelay) { if(!HL_SM_LIMIT_IN) HL_SetAlarmCode(HL_SM_LIMIT_ALARM); else HL_SetAlarmCode(HL_XM_LIMIT_ALARM); } } else if((HL_AutoStep == 8) && (dwTickCount >= HL_AutoDelay)) { HL_AutoStep = 9; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_TFK_VAVLE = 1; } else if(HL_AutoStep == 9) { if(HL_TFK_ORIGIN_IN) { HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_DK; HL_AutoStep = 10; } else if(dwTickCount >= HL_AutoDelay) HL_SetAlarmCode(HL_TFK_ORIGIN_ALARM); } else if((HL_AutoStep == 10) && (dwTickCount >= HL_AutoDelay)) { HL_AutoStep = 11; } else if(HL_AutoStep == 11) { HL_DK_VAVLE = 1; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 12; } else if(HL_AutoStep == 12) { if(HL_DK_LIMIT_IN) { HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_BB; HL_AutoStep = 13; } else if(dwTickCount >= HL_AutoDelay) HL_SetAlarmCode(HL_DK_LIMIT_ALARM); } else if((HL_AutoStep == 13) && (dwTickCount >= HL_AutoDelay)) { HL_BB_VAVLE = 1; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 14; } else if(HL_AutoStep == 14) { if(HL_BB_LIMIT_IN) { HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_JD; HL_AutoStep = 15; } else if(dwTickCount >= HL_AutoDelay) HL_SetAlarmCode(HL_BB_LIMIT_ALARM); } else if((HL_AutoStep == 15) && (dwTickCount >= HL_AutoDelay)) { HL_JD_VAVLE = 1; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 16; } else if(HL_AutoStep == 16) { if(HL_JD_LIMIT_IN) { HL_AutoDelay = dwTickCount + HL_PARAM_DELAY_CCX; HL_AutoStep = 17; } else if(dwTickCount >= HL_AutoDelay) HL_SetAlarmCode(HL_JD_LIMIT_ALARM); } else if((HL_AutoStep == 17) && (dwTickCount >= HL_AutoDelay)) { HL_CCX_VAVLE = 1; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_CheckDelay = dwTickCount + HL_PARAM_DELAY_CHECK_CCX; HL_AutoStep = 18; } else if((HL_AutoStep == 18) && (dwTickCount >= HL_CheckDelay)) { if(HL_CCX_LIMIT_IN) { if(!X_DRV)AxisMovePosAccDec(X_AXIS,HL_PARAM_LOW_SPEED,HL_PARAM_CCX_LENGTH,1,5,5); HL_JD_VAVLE = 0; HL_DK_VAVLE = 0; HL_AutoDelay = dwTickCount + HL_VAVLE_ALARM_TIME; HL_AutoStep = 19; } else if(dwTickCount >= HL_AutoDelay) HL_SetAlarmCode(HL_CCX_LIMIT_ALARM); } else if(HL_AutoStep == 19) { if(HL_DK_ORIGIN_IN && !HL_JD_LIMIT_IN && !X_DRV) { HL_CCX_VAVLE = 0; HL_AutoStep = 20; } else if(dwTickCount >= HL_AutoDelay) { if(!HL_DK_ORIGIN_IN) HL_SetAlarmCode(HL_DK_ORIGIN_ALARM); else HL_SetAlarmCode(HL_CCX_ORIGIN_ALARM); } } else if(HL_AutoStep == 20) { HL_AutoStep = 21; } else if(HL_AutoStep == 21) { HL_AutoStep = 22; } else if(HL_AutoStep == 22) { HL_AutoStep = 23; } else if(HL_AutoStep == 23) { HL_AutoDelay = dwTickCount; HL_AutoStep = 24; } else if(HL_AutoStep == 24) { if(cZCXflg) { cZCXflg = 0; HL_AutoStep = 0; HL_bRunning = 0; } else { HL_AutoStep = 25; } } else if(HL_AutoStep == 25) { AddToTal(HL_TOTAL_ADDR); dwZipCnt++; HL_AutoStep = 2; HL_AutoDelay = HL_PARAM_CYCLE_DELAY + dwTickCount; CalProSP(HL_PROSPEED_ADDR); } } } #endif