#include "global.h" #if XIN_YE_MACHINE == 1 unsigned long PRE_CLT_Runtime,CLT_Runtime,CLT_PD_Runtime; unsigned char FeiDai_Num; //故障报警 void QDCT_SetAlarmCode(unsigned alarm_code) { SetAlarmCode(QDCT_ALARM_ADDR,alarm_code); QDCT_AlARM_LED_FLAG=1; } //一周切断 void QDCT_FirstQDAction(void) { switch(QDCT_cFristQDStep) { case 1://装拉头 QDCT_cMOTORStep=1; QDCT_cFristQDStep=2; break; case 2://装完拉头--穿链 if(!QDCT_SQD_LIMIT_IN&&!QDCT_SQD_VAVLE&&QDCT_XQD_ORIGIN_IN&&!QDCT_XQD_VAVLE)//上刀、下刀在原位 { if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE||QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE )//穿头模在原位 { QDCT_cFristQDStep=3; QDCT_CLT_VAVLE=1; QDCT_cFristQDStep_DELAY=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } break; case 3://穿头模到位,机械手夹带 if(QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE&&QDCT_cMOTORStep==0) { QDCT_cFristQDStep=4; QDCT_JIALIAN_VAVLE=1; QDCT_cFristQDStep_DELAY=dwTickCount+QDCT_PARAM_HJL_OVERTIME*10; } else if(dwTickCount>=QDCT_cFristQDStep_DELAY) { QDCT_SetAlarmCode(QDCT_CLTM_LIMIT_ALARM);//穿拉头模到位故障 QDCT_bAlarmStop=1; } break; case 4://松夹布带 if(dwTickCount>=QDCT_cFristQDStep_DELAY) { QDCT_cFristQDStep=5; QDCT_JBD_VAVLE=1; QDCT_cFristQDStep_DELAY=dwTickCount+QDCT_PARAM_SJBD_OVERTIME*10; } break; case 5://机械手拉带,穿头模回退 if(dwTickCount>=QDCT_cFristQDStep_DELAY) { QDCT_CLT_VAVLE=0; QDCT_cFristQDStep_DELAY=dwTickCount+QDCT_VAVLE_ERROR_TIME; if(QDCT_cMOTORStep==0) { QDCT_cMOTORStep=40; QDCT_cFristQDStep=6; } } break; case 6://机械手拉带完成,切断 if(QDCT_cMOTORStep==0&&QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE) { if(QDCT_QDLLStep==0) { QDCT_QDLLStep=1; QDCT_cFristQDStep=7; } } else if(dwTickCount>=QDCT_cFristQDStep_DELAY) { if(QDCT_CLT_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_CLTM_ORIGIN_ALARM); } break; case 7://切断完成,拉带 if(QDCT_QDLLStep==0) { QDCT_cFristQDStep=8; } break; case 8://拉带完成,计算产量、扎数等 if(QDCT_cMOTORStep==0) { QDCT_cFristQDStep=0; QDCT_bFristQDing=0; } break; } } //一键清料 void QDCT_CLEARHDLT_Proc(void) { switch(QDCT_cClearHDLTStep) { case 1: if(!QDCT_TLGQ_CHECK_IN&&!QDCT_HDGQ_CHECK_IN)//滑道无拉头 { QDCT_HDDL_VAVLE=0; QDCT_cClearHDLTStep=0; QDCT_bClearHDLTing=0; QDCT_LTCC_COUNT=0; } else { QDCT_HDDL_VAVLE=1; QDCT_cClearHDLTStep=2; QDCT_cClearHDLTStep_DELAY=dwTickCount+200; } break; case 2: if(dwTickCount>=QDCT_cClearHDLTStep_DELAY) { QDCT_TL_VAVLE=1; QDCT_cClearHDLTStep_DELAY=dwTickCount+QDCT_VAVLE_ERROR_TIME; QDCT_cClearHDLTStep=3; } break; case 3: if(QDCT_TL_LIMIT_IN&&QDCT_TL_VAVLE) { QDCT_cClearHDLTStep=4; QDCT_cClearHDLTStep_DELAY=dwTickCount+100; } else if(dwTickCount>=QDCT_cClearHDLTStep_DELAY) { QDCT_SetAlarmCode(QDCT_TuiL_LIMIT_ALARM); } break; case 4: if(dwTickCount>=QDCT_cClearHDLTStep_DELAY)//离开原点计数破链时间 { QDCT_TL_VAVLE=0; QDCT_cClearHDLTStep=5; QDCT_cClearHDLTStep_DELAY=dwTickCount+100; } break; case 5: if(!QDCT_TL_LIMIT_IN&&dwTickCount>=QDCT_cClearHDLTStep_DELAY)//离开原点计数破链时间 { QDCT_cClearHDLTStep=1; } break; } } void QDCT_STOPACTION_Proc(void) { static long tmp_local; switch(QDCT_cSTOPStep) { case 1: if(QDCT_bRunning) { QDCT_JIALIAN_VAVLE=0; if(QDCT_cMOTORStep!=0&&X_DRV) { AxisContinueMoveChangeSpeed(X_AXIS,2000,1000,10,10); } if(QDCT_PARAM_ZPSL_MODE==0) { if(QDCT_ZSZLStep!=0&&Y_DRV) { AxisContinueMoveChangeSpeed(Y_AXIS,2000,1000,10,10); } } QDCT_cSTOPStep=2; QDCT_STOPStepDelay=dwTickCount+1000; } else { QDCT_cSTOPStep=3; QDCT_STOPStepDelay=dwTickCount+10; } break; case 2: if(GetCurSpeed(X_AXIS)<=2500)AxisEgmStop(X_AXIS); if(QDCT_PARAM_ZPSL_MODE==0) { if(GetCurSpeed(Y_AXIS)<=2500)AxisEgmStop(Y_AXIS); } if(dwTickCount>=QDCT_STOPStepDelay) { AxisEgmStop(X_AXIS); AxisEgmStop(Y_AXIS); } if(!X_DRV&&!Y_DRV) { QDCT_cSTOPStep=3; QDCT_STOPStepDelay=dwTickCount+50; } break; case 3: if(dwTickCount>=QDCT_STOPStepDelay) { QDCT_cSTOPStep=4; if(QDCT_PARAM_ZPSL_MODE==0) { tmp_local=QDCT_PARAM_WLTBJ_WAIT; tmp_local=tmp_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_YREST_SPEED,tmp_local,1000,1000,50,50,30); } tmp_local=QDCT_PARAM_HAND_STOP_LOCAL; tmp_local=tmp_local-dwXRealPos; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_XREST_SPEED,tmp_local,1000,1000,50,50,30); } break; case 4: if(!X_DRV&&!Y_DRV) { QDCT_bRunning=0; QDCT_cSTOPStep=0; } break; } } //振盘动作 void QDCT_ZHENPAN_Proc(void) { switch(QDCT_cZHENPANStep) { case 1: if(QDCT_ZPYL_CHECK_IN) { QDCT_ZPKZ_VAVLE=0; QDCT_cZHENPANStep=2; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTOP_TIME*10; if(QDCT_AlARM_STOP_FLAG)QDCT_cZHENPANStep=0; } else { QDCT_ZPKZ_VAVLE=1; QDCT_cZHENPANStep=2; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTART_TIME*10; } break; case 2: QDCT_cZHENPANStep=3; break; case 3: if(dwTickCount>=QDCT_ZHENPANDelay) { QDCT_cZHENPANStep=1; } break; } } //振盘动作 void QDCT_ZHENPAN_COM_Proc(void) { switch(QDCT_cZHENPANStep) { case 1: if(!QDCT_ZPYL_COM_CHECK_IN) { QDCT_ZPKZ_VAVLE=1; QDCT_cZHENPANStep=2; } break; case 2: if(QDCT_ZPYL_COM_CHECK_IN) { QDCT_cZHENPANStep=3; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTOP_TIME*10; } break; case 3: if(dwTickCount>=QDCT_ZHENPANDelay) { if(QDCT_ZPYL_COM_CHECK_IN) { QDCT_cZHENPANStep=4; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTART_TIME*10; } else { QDCT_cZHENPANStep=2; } } break; case 4: if(dwTickCount>=QDCT_ZHENPANDelay) { QDCT_ZPKZ_VAVLE=0; QDCT_cZHENPANStep=5; } break; case 5: if(QDCT_AlARM_STOP_FLAG)QDCT_cZHENPANStep=0; if(!QDCT_ZPYL_COM_CHECK_IN) { QDCT_cZHENPANStep=6; QDCT_ZHENPANDelay=dwTickCount+500; } break; case 6: if(dwTickCount>=QDCT_ZHENPANDelay) { if(!QDCT_ZPYL_COM_CHECK_IN) { QDCT_cZHENPANStep=1; } else { QDCT_cZHENPANStep=4; } } break; } } void QDCT_AlarmProtect(void) { } //穿拉头模处理 void QDCT_CLTM_Proc(void) { //1~3穿入 switch(QDCT_CLTMStep) { case 1: if(!QDCT_SQD_LIMIT_IN&&!QDCT_SQD_VAVLE&&QDCT_XQD_ORIGIN_IN&&!QDCT_XQD_VAVLE) { QDCT_JBD_VAVLE=0; QDCT_CLTMStep=2; QDCT_CLTMDelay=dwTickCount+30; } else { if(QDCT_SQD_LIMIT_IN)QDCT_SetAlarmCode(QDCT_SDQD_LIMIT_ALARM); else if(!QDCT_XQD_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XDQD_ORIGIN_ALARM); } break; case 2: if(dwTickCount>=QDCT_CLTMDelay) { QDCT_FDAI_VAVLE=1; QDCT_CLTMStep=3; QDCT_CLTMDelay=dwTickCount+50; } break; case 3: if(dwTickCount>=QDCT_CLTMDelay) { QDCT_CLT_VAVLE=1; QDCT_CLTMStep=4; QDCT_KKPOLIANDelay=dwTickCount+QDCT_PARAM_KKPL_TIME*10; QDCT_CLTMDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 4: if(!QDCT_CLT_ORIGIN_IN&&dwTickCount>=QDCT_KKPOLIANDelay)//离开原点计数破链时间 { QDCT_FDAI_VAVLE=0; } if(QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE) { QDCT_CLTMStep=0; } else if(dwTickCount>=QDCT_CLTMDelay) { QDCT_CLTMStep=0; QDCT_SetAlarmCode(QDCT_CLTM_LIMIT_ALARM); } break; //穿头模退出10~13 case 10: QDCT_JBD_VAVLE=1; QDCT_CLTMStep=11; QDCT_CLTMDelay=dwTickCount+30; break; case 11: if(dwTickCount>=QDCT_CLTMDelay) { QDCT_CLT_VAVLE=0; QDCT_CLTMStep=12; QDCT_CLTMDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 12: if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE) { QDCT_CLTMStep=13; QDCT_CLTMDelay=dwTickCount+QDCT_PARAM_TJHJBD_DELAY*10+20; } else if(dwTickCount>=QDCT_CLTMDelay) { QDCT_CLTMStep=0; QDCT_SetAlarmCode(QDCT_CLTM_ORIGIN_ALARM); } break; case 13: if(dwTickCount>=QDCT_CLTMDelay) { QDCT_JBD_VAVLE=0; QDCT_XM_VAVLE=0; QDCT_CLTMStep=0; } break; } } //切断处理 void QDCT_QDLL_Action() { switch(QDCT_QDLLStep) { case 1: if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE&&!QDCT_SQD_LIMIT_IN&&!QDCT_SQD_VAVLE) { QDCT_XQD_VAVLE=1; QDCT_QDLLStep=2; QDCT_JBD_VAVLE=0; QDCT_QDLLDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; QDCT_QD_HM_TIME_TOTAL=dwTickCount; } else { if(!QDCT_CLT_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_CLTM_ORIGIN_ALARM);//穿头模不在原位 else if(QDCT_SQD_LIMIT_IN)QDCT_SetAlarmCode(QDCT_SDQD_LIMIT_ALARM);//上刀不在原位 QDCT_bAlarmStop=1; } break; case 2: if(QDCT_XQD_LIMIT_IN&&QDCT_XQD_VAVLE) { if(QDCT_bRunning&&QDCT_PARAM_ZPSL_MODE==1)AxisMovePosAccDec(X_AXIS,5000,-30,1000,1000,20,20,0); QDCT_SQD_VAVLE=1; QDCT_QDLLStep=3; QDCT_QDLLDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(dwTickCount>=QDCT_QDLLDelay) { QDCT_SetAlarmCode(QDCT_XDQD_LIMIT_ALARM); QDCT_bAlarmStop=1; } break; case 3: if(QDCT_SQD_LIMIT_IN&&QDCT_SQD_VAVLE) { QDCT_QDLLStep=4; QDCT_QDLLDelay=dwTickCount+QDCT_PARAM_HEMO_TIME; QDCT_QD_HM_TIME_TOTAL=dwTickCount-QDCT_QD_HM_TIME_TOTAL; } else if(dwTickCount>=QDCT_QDLLDelay) { QDCT_SetAlarmCode(QDCT_SDQD_LIMIT_ALARM); QDCT_bAlarmStop=1; } break; case 4: if(dwTickCount>=QDCT_QDLLDelay) { QDCT_ZYCS_VAVLE=1; QDCT_QDLLStep=5; QDCT_QDLLDelay=dwTickCount+QDCT_PARAM_CAOSHENG_TIME; } break; case 5: if(dwTickCount>=QDCT_QDLLDelay) { QDCT_ZYCS_VAVLE=0; QDCT_QDLLStep=6; QDCT_SQD_VAVLE=0; QDCT_cMOTORStep=60; QDCT_QDLLDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 6: if(!QDCT_SQD_LIMIT_IN&&!QDCT_SQD_VAVLE) { QDCT_QD_KM_TIME_TOTAL=dwTickCount; QDCT_XQD_VAVLE=0; QDCT_QDLLStep=0; if(QDCT_PARAM_WORK_MODE==0&&!QDCT_bFristQDing) { QDCT_FDAI_VAVLE=1; QDCT_FDAI_FLAG=1; } QDCT_PKLLDelay=dwTickCount+QDCT_PARAM_PKLL_TIME*10; QDCT_QDLLDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; if(GetAlarmCode(QDCT_ALARM_ADDR)==QDCT_SDQD_LIMIT_ALARM)QDCT_SetAlarmCode(0); } else if(dwTickCount>=QDCT_QDLLDelay) { QDCT_SetAlarmCode(QDCT_SDQD_LIMIT_ALARM); } break; } if(dwTickCount>=QDCT_PKLLDelay&&QDCT_FDAI_VAVLE&&QDCT_FDAI_FLAG&&(QDCT_PARAM_WEIBA_TYPE==0)) { QDCT_FDAI_VAVLE=0;//破链脉冲动作 QDCT_FDAI_FLAG=0; } } //抓手装料动作 void QDCT_ZhuaShouZL_Proc(void) { static long zhuashou_local; dwXRealPos = GetPos(X_AXIS); dwYRealPos = GetPos(Y_AXIS); switch(QDCT_ZSZLStep) { case 1://判断是否复位 if(GetEn(X_AXIS)!=1||Y_Reset_Flag!=0) { QDCT_bZS_Rsting=1; SetEn(Y_AXIS, QDCT_MOTOR_EN); YRunResetOStep=1; ReSetYDelay = dwTickCount + 100; QDCT_ZSZLStep=2; QDCT_ZHL_VAVLE=0; } else { QDCT_ZSZLStep=2; } QDCT_ZSZL_TIME=0; break; case 2://判断抓料是否夹料 if(YRunResetOStep==0&&Y_Reset_Flag==0) { if(QDCT_ZHL_VAVLE)//有料就去放料,若是视觉是否检测 { QDCT_ZSZLStep=7; } else//无料这回到上料位置 { if(!QDCT_bRunning) QDCT_ZLSZLCHECKDelay=dwTickCount+3500; else QDCT_ZLSZLCHECKDelay=dwTickCount+QDCT_PARAM_ZSWL_CHECK_MODE*10; //zhuashou_local=*QDCT_PARAM_YORIGN_WAIT; zhuashou_local=0-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED/2,zhuashou_local,1000,1000,50,50,30); QDCT_ZSZLStep=3; } } break; case 3://判断是否有料 if(!Y_DRV) { if(QDCT_TLGQ_CHECK_IN)QDCT_CONT_ZLT_TIMES=0; if(QDCT_TLGQ_CHECK_IN&&QDCT_HDGQ_CHECK_IN&&(QDCT_LTCC_COUNT>=QDCT_PARAM_ZLSCL_NUM))//两个位置有料等待 { QDCT_ZPCQ_VAVLE=0;//等待; QDCT_CONT_ZLT_TIMES=0; //QDCT_ZLSZLCHECKDelay=dwTickCount+3500; if(dwTickCount>=QDCT_ZLSZLCHECKDelay&&!QDCT_bRunning||QDCT_AlARM_STOP_FLAG) { zhuashou_local=QDCT_PARAM_WLTBJ_WAIT; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED/2,zhuashou_local,1000,1000,50,50,30); QDCT_ZSZLStep=13; } } else if(QDCT_HDGQ_CHECK_IN)//滑倒有料 { if(dwTickCount>=QDCT_ZLSZLCHECKDelay) { QDCT_ZSZLStep=12; } QDCT_ZPCQ_VAVLE=1; if(!QDCT_TL_LIMIT_IN) { QDCT_HDDL_VAVLE=1; } if(QDCT_ZPYL_CHECK_IN) { QDCT_ZPKZ_VAVLE=0; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTART_TIME*10; QDCT_ZSZLStep=60; QDCT_HUDAO_CHECK_FLAG=1; QDCT_QD_HUADAO_CHECK_DELAY=dwTickCount+5000; } } else//推料有料,滑倒物料或都无料 { if(dwTickCount>=QDCT_ZLSZLCHECKDelay) { QDCT_ZSZLStep=12; } QDCT_HDDL_VAVLE=0; QDCT_ZPCQ_VAVLE=1; if(QDCT_ZPYL_CHECK_IN) { QDCT_ZPKZ_VAVLE=0; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTART_TIME*10; QDCT_ZSZLStep=4; QDCT_ZSZLDelay=dwTickCount+10; } } } break; case 60: if(!QDCT_TL_LIMIT_IN&&!QDCT_TL_VAVLE) { QDCT_HDDL_VAVLE=1; QDCT_ZSZLStep=4; QDCT_ZSZLDelay=dwTickCount+50; } break; case 4://到上料位置取料 if(dwTickCount>=QDCT_ZSZLDelay&&QDCT_ZPYL_CHECK_IN) { QDCT_ZSZLStep=5; zhuashou_local=*QDCT_PARAM_ZSSL_LOCAL; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSSL_SPEED,zhuashou_local,1000,1000,50,50,50); } break; case 5://到位停顿 if(!Y_DRV) { QDCT_HDDL_VAVLE=0; QDCT_ZSZLStep=6; QDCT_ZSZLDelay=dwTickCount+30; } break; case 6://夹料 if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_ZSZLStep=7; QDCT_ZHL_VAVLE=1; QDCT_ZSZLDelay=dwTickCount+QDCT_PARAM_ZSJL_TIME*10; } break; case 7://移动到上料位置 if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_ZPKZ_VAVLE=1; QDCT_ZHENPANDelay=dwTickCount+QDCT_PARAM_ZPSTART_TIME*5; if(QDCT_PARAM_SJCHECK_USE) { QDCT_ZSZLStep=20; } else { QDCT_ZSZLStep=8; zhuashou_local=QDCT_PARAM_ZSFL_LOCAL; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSFOR_SPEED,zhuashou_local,1000,QDCT_PARAM_ZSXL_SPEED,50,50,QDCT_PARAM_LOWSP_LENGTH); } } break; case 8: //if(QDCT_bZPSTARTing) { //QDCT_ZPKZ_VAVLE=1; //QDCT_ZHENPANDelay=dwTickCount; } if(!Y_DRV) { QDCT_ZSZLStep=9; QDCT_ZSZLDelay=dwTickCount+30; } break; case 9: if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_ZSZLStep=10; QDCT_ZHL_VAVLE=0; QDCT_ZSZLDelay=dwTickCount+QDCT_PARAM_ZSFL_TIME*10; } break; case 10://回到待机位置 if(dwTickCount>=QDCT_ZSZLDelay) { // zhuashou_local=*QDCT_PARAM_YORIGN_WAIT; zhuashou_local=0-dwYRealPos; AxisMovePosAccDecNotStop(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED,zhuashou_local,1000,1000,50,50, PosToPulse(Y_AXIS,QDCT_PARAM_RORIGIN_LENGTH)); QDCT_ZSZLStep=11; QDCT_YORIGIN_FLAG=1; } break; case 11: if(QDCT_HZLT_ORIGIN_IN&&QDCT_YORIGIN_FLAG) { SetPos(Y_AXIS,0); QDCT_YORIGIN_FLAG=0; AxisEgmStop(Y_AXIS); } if(!Y_DRV) { if(!QDCT_bRunning) QDCT_ZLSZLCHECKDelay=dwTickCount+3500; else QDCT_ZLSZLCHECKDelay=dwTickCount+QDCT_PARAM_ZSWL_CHECK_MODE*10; if(QDCT_HDGQ_CHECK_IN) { QDCT_ZSZL_TIME=0; QDCT_ZSZLStep=3; QDCT_ZSZLDelay=dwTickCount+10; QDCT_CONT_ZLT_TIMES++; QDCT_LTCC_COUNT++; if(QDCT_CONT_ZLT_TIMES>=10)//未检测道推料光纤信号,连续装10次,超过次数报警 { QDCT_ZPCQ_VAVLE=0; QDCT_SetAlarmCode(QDCT_TLGQ_CHECK_ALARM); zhuashou_local=QDCT_PARAM_WLTBJ_WAIT; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED,zhuashou_local,1000,1000,50,50,30); QDCT_ZSZLStep=13; } } else { QDCT_ZSZL_TIME++; if(QDCT_ZSZL_TIME>=QDCT_PARAM_ZSLTFALUE_NUM) { QDCT_ZSZL_TIME=0; QDCT_ZSZLStep=12; } else { QDCT_ZSZLStep=3; QDCT_ZSZLDelay=dwTickCount+10; } } } break; case 12: QDCT_ZPCQ_VAVLE=0; QDCT_SetAlarmCode(QDCT_ZLSWL_ZDPWL_ALARM); zhuashou_local=QDCT_PARAM_WLTBJ_WAIT; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED,zhuashou_local,1000,1000,50,50,30); QDCT_ZSZLStep=13; break; case 13: if(!Y_DRV) { if(QDCT_bRunning) { if(QDCT_START_IN_UP) { QDCT_ZSZL_TIME=0; QDCT_ZSZLStep=3; QDCT_ZSZLDelay=dwTickCount+10; } } else { QDCT_ZSZLStep=0; QDCT_bManu_ZSZLing=0; } } break; case 20://移动到机械手检测位置 QDCT_ZSZLStep=21; zhuashou_local=QDCT_PARAM_SJCHECK_LOCAL; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSFOR_SPEED,zhuashou_local,1000,QDCT_PARAM_ZSXL_SPEED,50,50,QDCT_PARAM_LOWSP_LENGTH); break; case 21: if(!Y_DRV) { QDCT_ZSZLDelay=dwTickCount+QDCT_PARAM_SJCHECK_DELAY*10; QDCT_ZSZLStep=220; } break; case 220: if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_ZSZLDelay=dwTickCount+QDCT_PARAM_SJCHECK_TIME*10; QDCT_SJ_CHECK_OUT=1; QDCT_ZSZLStep=22; } break; case 22: if(dwTickCount>=QDCT_ZSZLDelay) { if(QDCT_SHIJ_CHECK_IN)//坏的,仍掉 { QDCT_ZSZLStep=23; QDCT_SJ_CHECK_OUT=0; QDCT_ZHL_VAVLE=0; QDCT_ZSZLDelay=dwTickCount+QDCT_PARAM_ZSFL_TIME*10; } else { QDCT_SJCHECK_TIME=0; QDCT_SJ_CHECK_OUT=0; QDCT_ZSZLStep=8; zhuashou_local=QDCT_PARAM_ZSFL_LOCAL; zhuashou_local=zhuashou_local-dwYRealPos; AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_ZSFOR_SPEED,zhuashou_local,1000,QDCT_PARAM_ZSXL_SPEED,50,50,QDCT_PARAM_LOWSP_LENGTH); } } break; case 23: if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_SJCHECK_TIME++; if(QDCT_SJCHECK_TIME>=QDCT_PARAM_ZSLTFALUE_NUM) { QDCT_ZSZL_TIME=0; QDCT_ZSZLStep=12; } else { QDCT_ZSZLStep=24; } } break; case 24: if(dwTickCount>=QDCT_ZSZLDelay) { QDCT_ZSZLStep=25; //zhuashou_local=*QDCT_PARAM_YORIGN_WAIT; zhuashou_local=0-dwYRealPos; AxisMovePosAccDecNotStop(Y_AXIS,QDCT_PARAM_ZSBACK_SPEED,zhuashou_local,1000,1000,50,50,PosToPulse(Y_AXIS,QDCT_PARAM_RORIGIN_LENGTH)); QDCT_YORIGIN_FLAG=1; } break; case 25: if(QDCT_HZLT_ORIGIN_IN&&QDCT_YORIGIN_FLAG) { SetPos(Y_AXIS,0); QDCT_YORIGIN_FLAG=0; AxisEgmStop(Y_AXIS); } if(!Y_DRV) { QDCT_ZSZLStep=3; QDCT_ZSZLDelay=dwTickCount+20; } break; } //if(QDCT_HUDAO_CHECK_FLAG&&dwTickCount>=QDCT_QD_HUADAO_CHECK_DELAY) //{ //} } //推送料旋转处理 void QDCT_TSXZLT_Proc(void) { switch(QDCT_TSXZLTStep) { case 1://侧原位 if(QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_TSXZLTStep=2; QDCT_CJL_VAVLE=0; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 2://旋转到位 if(QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE) { QDCT_XZ_VAVLE=1; QDCT_TSXZLTStep=3; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_CSL_ORIGIN_ALARM);//侧送料到位告警 } break; case 3://旋转到位, if(QDCT_XZ_LIMIT_IN&&QDCT_XZ_VAVLE) { QDCT_TSXZLTStep=0; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_XZLT_LIMIT_ALARM);//旋转原位告警 } break; case 10://旋转复位 QDCT_XZ_VAVLE=0; QDCT_TSXZLTStep=11; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; break; case 11://旋转复位 if(QDCT_XZ_ORIGIN_IN&&!QDCT_XZ_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_CJL_VAVLE=1; QDCT_TSXZLTStep=12; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(dwTickCount>=QDCT_TSXZLTDelay) { if(!QDCT_XZ_ORIGIN_IN) QDCT_SetAlarmCode(QDCT_XZLT_ORIGIN_ALARM);//旋转拉头到位告警 else if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM); } break; case 12://到位延时 if(QDCT_CSL_LIMIT_IN&&QDCT_CJL_VAVLE) { QDCT_TSXZLTStep=13; QDCT_TSXZLTDelay=dwTickCount+10; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_CSL_LIMIT_ALARM);//侧送拉头原位告警 } break; case 13://检测有料推料 if(dwTickCount>=QDCT_TSXZLTDelay) { if(QDCT_TLGQ_CHECK_IN) { QDCT_CONT_ZLT_TIMES=0; if(QDCT_LTCC_COUNT>0)QDCT_LTCC_COUNT--; QDCT_TSXZLTStep=14; QDCT_TL_VAVLE=1; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } break; case 14://推拉头到位-延时 if(QDCT_TL_LIMIT_IN&&QDCT_TL_VAVLE) { QDCT_TSXZLTStep=15; QDCT_TSXZLTDelay=dwTickCount+QDCT_PARAM_TUILTBACK_DELAY*10; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_TuiL_LIMIT_ALARM);//侧送拉头原位告警 } break; case 15://到位延时-退推料 if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_TSXZLTStep=16; QDCT_TL_VAVLE=0; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 16://推拉头到位离开后,延时 if(!QDCT_TL_LIMIT_IN) { QDCT_TSXZLTStep=17; QDCT_TSXZLTDelay=dwTickCount+10; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_TuiL_LIMIT_ALARM); } break; case 17://侧送回原位 if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_TSXZLTStep=18; QDCT_CJL_VAVLE=0; } break; case 18://侧送离开限位后延时 if(!QDCT_CSL_LIMIT_IN&&!QDCT_CJL_VAVLE) { QDCT_TSXZLTStep=19; QDCT_TSXZLTDelay=dwTickCount+QDCT_PARAM_TQXZ_TIME*10+10;// } break; case 19://提前旋转 if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_TSXZLTStep=20; QDCT_XZ_VAVLE=1; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 20://旋转到位,侧送到位完成 if(QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE&&QDCT_XZ_LIMIT_IN&&QDCT_XZ_VAVLE) { QDCT_TSXZLTStep=0; } else if(dwTickCount>=QDCT_TSXZLTDelay) { if(!QDCT_CSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_CSL_ORIGIN_ALARM);//侧送拉头到位告警 else if(!QDCT_XZ_LIMIT_IN)QDCT_SetAlarmCode(QDCT_XZLT_LIMIT_ALARM);//旋转拉头原位告警 } break; } } //推送料处理 void QDCT_TSXZLT_COM_Proc(void) { switch(QDCT_TSXZLTStep) { case 1://横送原位 if(QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_TSXZLTStep=2; QDCT_TSXZLTDelay=dwTickCount+10; //QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(dwTickCount>=QDCT_TSXZLTDelay) { if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM); } break; case 2://到位延时 if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_TL_VAVLE=1; QDCT_TSXZLTStep=3; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 3://推拉头到位-延时 if(QDCT_TL_LIMIT_IN&&QDCT_TL_VAVLE) { QDCT_TSXZLTStep=4; QDCT_TSXZLTDelay=dwTickCount+QDCT_PARAM_TUILTBACK_DELAY*10; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_TuiL_LIMIT_ALARM);//推料到位告警 } break; case 4://到位延时-退推料 if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_TSXZLTStep=5; QDCT_TL_VAVLE=0; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 5://推拉头到位离开后,延时 if(!QDCT_TL_LIMIT_IN&&QDCT_TL_COM_ORIGIN_IN) { QDCT_TSXZLTStep=0; } else if(dwTickCount>=QDCT_TSXZLTDelay) { QDCT_SetAlarmCode(QDCT_TuiL_ORIGIN_ALARM); } break; } } //装拉头动作 void QDCT_ZLT_Proc(void) { switch(QDCT_ZLTStep) { case 1://判断拉头是否打开 if(QDCT_TSXZLTStep==0)QDCT_TSXZLTStep=1;//推送旋转物料 if(QDCT_JLT_VAVLE)//夹拉头打开,无拉头 { if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在原位 { QDCT_ZLTStep=4; } else if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在上位 { QDCT_ZLTStep=4; QDCT_XM_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else { if(dwTickCount>=QDCT_ZLTDelay) { if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM);//横送拉头原位告警 if(QDCT_XM_VAVLE) { if(!QDCT_XM_LIMIT_IN)QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM); } else if(!QDCT_XM_VAVLE) { if(!QDCT_XM_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM); } } } } else //夹拉头关闭, { if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在原位 { if(QDCT_XM_UP_FLAG) { QDCT_ZLTStep=2; QDCT_XM_VAVLE=1; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } else if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在上位 { QDCT_ZLTStep=3; QDCT_ZLTDelay=dwTickCount+10; } else { if(dwTickCount>=QDCT_ZLTDelay) { if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM);//横送拉头原位告警 if(QDCT_XM_VAVLE) { if(!QDCT_XM_LIMIT_IN)QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM); } else if(!QDCT_XM_VAVLE) { if(!QDCT_XM_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM); } } } } break; case 2://下模上升 if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE) { QDCT_ZLTStep=3; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_XMDW_DELAY*10+10; } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM);//下模上升到位告警 } break; case 3://判断拉头 if(QDCT_LTQL_CHECK_IN)//有拉头 { QDCT_ZLTStep=10; QDCT_ZLTDelay=dwTickCount+10; } else if(dwTickCount>=QDCT_ZLTDelay)//无拉头 { QDCT_JLT_VAVLE=1; QDCT_ZLTStep=4; QDCT_XM_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 4://横送 if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE) { if(QDCT_TSXZLTStep==0) { QDCT_HSL_VAVLE=1; QDCT_ZLTStep=5; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM);//下模原位告警 } break; case 5://到位延时 if(QDCT_HSL_LIMIT_IN&&QDCT_HSL_VAVLE) { QDCT_ZLTStep=6; QDCT_ZLTDelay=dwTickCount+10; } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_HSL_LIMIT_ALARM);//横送拉头到位告警 } break; case 6://夹拉头 if(dwTickCount>=QDCT_ZLTDelay) { QDCT_ZLTStep=7; QDCT_JLT_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_JLT_OVERTIME*10; } break; case 7://夹拉头到位--横送退 if(dwTickCount>=QDCT_ZLTDelay) { QDCT_ZLTStep=80; QDCT_HSL_VAVLE=0; QDCT_TQSMDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 80://退出限位 提前上下模 if(!QDCT_HSL_LIMIT_IN) { QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_TQSM_TIME*10+10; QDCT_ZLTStep=8; } break; case 8://退出限位 提前上下模 if((dwTickCount>=QDCT_ZLTDelay||QDCT_HSL_ORIGIN_IN)&&(QDCT_XM_UP_FLAG==1)) { QDCT_ZLTStep=9; QDCT_XM_VAVLE=1; if(QDCT_TSXZLTStep==0)QDCT_TSXZLTStep=10; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 9://下模上升 if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE) { QDCT_ZLTStep=10; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_XMDW_DELAY*10+10; } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM);//下模上升到位告警 QDCT_bAlarmStop=1; } break; case 10://判断拉头 if(QDCT_LTQL_CHECK_IN)//有拉头 { QDCT_ZLTStep=0; QDCT_ZLT_TIME=0; QDCT_ZLT_OK_FLAG=1; QDCT_bManu_ZLTing=0; } else if(dwTickCount>=QDCT_ZLTDelay)//无拉头,重装拉头 { QDCT_ZLT_TIME++; if(QDCT_ZLT_TIME>=3) { QDCT_ZLT_TIME=0; QDCT_ZLTStep=0; QDCT_ZLT_OK_FLAG=0; QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; QDCT_SetAlarmCode(QDCT_NO_ZIPPER_ALARM);//无拉头告警 } else { QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; QDCT_ZLTStep=11; } } break; case 11://下模下降 if(QDCT_TSXZLTStep==0) { QDCT_TSXZLTStep=1; QDCT_ZLTStep=4; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; } } //通用装拉头动作 void QDCT_ZLT_COM_Proc(void) { switch(QDCT_ZLTStep) { case 1://判断拉头是否打开 if(QDCT_JLT_VAVLE)//夹拉头打开,无拉头 { if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在原位 { QDCT_ZLTStep=4; } else if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在上位 { QDCT_ZLTStep=4; QDCT_XM_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(!QDCT_XM_LIMIT_IN&&!QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { //QDCT_HSL_VAVLE=1; QDCT_ZLTStep=40; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_TQHS_TIME*10+5; } else { if(dwTickCount>=QDCT_ZLTDelay) { if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM);//横送拉头原位告警 if(QDCT_XM_VAVLE) { if(!QDCT_XM_LIMIT_IN)QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM); } else if(!QDCT_XM_VAVLE) { if(!QDCT_XM_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM); } } } } else //夹拉头关闭, { if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在原位 { if(QDCT_XM_UP_FLAG) { QDCT_ZLTStep=2; QDCT_XM_VAVLE=1; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } else if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE)//下模在上位 { QDCT_ZLTStep=3; } else { if(dwTickCount>=QDCT_ZLTDelay) { if(!QDCT_HSL_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_HSL_ORIGIN_ALARM);//横送拉头原位告警 if(QDCT_XM_VAVLE) { if(!QDCT_XM_LIMIT_IN)QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM); } else if(!QDCT_XM_VAVLE) { if(!QDCT_XM_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM); } } } } break; case 2://下模上升 if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE) { QDCT_ZLTStep=3; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_XMDW_DELAY*10+10; if(GetAlarmCode(QDCT_ALARM_ADDR)==QDCT_XM_LIMIT_ALARM)QDCT_SetAlarmCode(0); } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM);//下模上升到位告警 } break; case 3://判断拉头 if(QDCT_LTQL_CHECK_IN)//有拉头 { QDCT_ZLTStep=10; QDCT_ZLTDelay=dwTickCount+10; } else if(dwTickCount>=QDCT_ZLTDelay)//无拉头 { QDCT_JLT_VAVLE=1; QDCT_ZLTStep=4; QDCT_XM_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 40: if(dwTickCount>=QDCT_ZLTDelay) { QDCT_HSL_VAVLE=1; QDCT_ZLTStep=41; } break; case 41: if(!QDCT_HSL_ORIGIN_IN&&QDCT_HSL_VAVLE) { QDCT_ZLTStep=42; QDCT_ZLTDelay=dwTickCount+20; } break; case 42: if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE) { QDCT_ZLTStep=4; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_HSL_VAVLE=0; QDCT_ZLTStep=4; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 4://横送 if(QDCT_XM_ORIGIN_IN&&!QDCT_XM_VAVLE&&QDCT_TL_COM_ORIGIN_IN) { QDCT_HSL_VAVLE=1; QDCT_ZLTStep=5; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; if(GetAlarmCode(QDCT_ALARM_ADDR)==QDCT_XM_ORIGIN_ALARM)QDCT_SetAlarmCode(0); } else if(dwTickCount>=QDCT_ZLTDelay) { if(!QDCT_XM_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XM_ORIGIN_ALARM);//下模原位告警 else if(!QDCT_TL_COM_ORIGIN_IN&&QDCT_TSXZLTStep==0)QDCT_SetAlarmCode(QDCT_TuiL_ORIGIN_ALARM); } break; case 5://到位延时 if(QDCT_HSL_LIMIT_IN&&QDCT_HSL_VAVLE) { QDCT_ZLTStep=6; QDCT_ZLTDelay=dwTickCount+1; if(GetAlarmCode(QDCT_ALARM_ADDR)==QDCT_HSL_LIMIT_ALARM)QDCT_SetAlarmCode(0); } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_HSL_LIMIT_ALARM);//横送拉头到位告警 } break; case 6://夹拉头 if(dwTickCount>=QDCT_ZLTDelay) { QDCT_ZLTStep=7; QDCT_JLT_VAVLE=0; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_JLT_OVERTIME*10; } break; case 7://夹拉头到位--横送退 if(dwTickCount>=QDCT_ZLTDelay) { QDCT_ZLTStep=80; QDCT_HSL_VAVLE=0; QDCT_TSXZLTStep=1; QDCT_TSXZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; QDCT_TQSMDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 80://退出限位 提前上下模 if(!QDCT_HSL_LIMIT_IN) { QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_TQSM_TIME*10+10; QDCT_ZLTStep=8; } break; case 8://退出限位 提前上下模 if((dwTickCount>=QDCT_ZLTDelay||QDCT_HSL_ORIGIN_IN)&&(QDCT_XM_UP_FLAG==1)) { QDCT_ZLTStep=9; QDCT_XM_VAVLE=1; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } break; case 9://下模上升 if(QDCT_XM_LIMIT_IN&&QDCT_XM_VAVLE) { QDCT_ZLTStep=10; QDCT_ZLTDelay=dwTickCount+QDCT_PARAM_XMDW_DELAY*10+10; } else if(dwTickCount>=QDCT_ZLTDelay) { QDCT_SetAlarmCode(QDCT_XM_LIMIT_ALARM);//下模上升到位告警 QDCT_bAlarmStop=1; } break; case 10://判断拉头 if(QDCT_LTQL_CHECK_IN)//有拉头 { QDCT_ZLTStep=0; QDCT_ZLT_TIME=0; QDCT_ZLT_OK_FLAG=1; QDCT_bManu_ZLTing=0; } else if(dwTickCount>=QDCT_ZLTDelay)//无拉头,重装拉头 { QDCT_ZLT_TIME++; if(QDCT_ZLT_TIME>=3) { QDCT_ZLT_TIME=0; if(QDCT_bRunning)QDCT_ZLTStep=11; else QDCT_ZLTStep=0; QDCT_ZLT_OK_FLAG=0; QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; QDCT_bManu_ZLTing=0; QDCT_SetAlarmCode(QDCT_NO_ZIPPER_ALARM);//无拉头告警 } else { QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; QDCT_ZLTStep=4; } } break; case 11://按下启动后 if(QDCT_bRunning) { if(QDCT_START_IN_UP) { QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; QDCT_ZLTStep=4; QDCT_SetAlarmCode(QDCT_NO_ALARM); } } break; } } //X轴回零 int QDCT_X_ReSetOrigin(void) { switch(XRunResetOStep) { case 1: AxisDisableSoftwarelmt(X_AXIS); if(dwTickCount >= ReSetXDelay) { if(X_Reset_Flag) { AxisDisableSoftwarelmt(X_AXIS); ReSetXOUT_TIME = dwTickCount + 5000; if(!QDCT_HAND_ORIGIN_IN) { XRunResetOStep = 2; AxisContinueMoveAcc(X_AXIS,QDCT_PARAM_XREST_SPEED,DIR_N, 2000,2000,20,20); } else { AxisContinueMoveAcc(X_AXIS,QDCT_PARAM_XREST_SPEED/2,DIR_P,2000,2000,20,20); XRunResetOStep = 4; } } else { if(0-dwXRealPos) AxisMovePosAccDec(X_AXIS,QDCT_PARAM_XREST_SPEED,0-dwXRealPos,1000,1000,50,50,0); XRunResetOStep = 10; ReSetXOUT_TIME = dwTickCount + 10000; } } break; case 2: if(QDCT_HAND_ORIGIN_IN) { AxisDecStop(X_AXIS); XRunResetOStep = 3; ReSetXDelay = dwTickCount + 10; } break; case 3: if(!X_DRV&&dwTickCount >= ReSetXDelay) { AxisContinueMoveAcc(X_AXIS,2000,DIR_P,2000,2000,20,20); XRunResetOStep = 4; } break; case 4: if(!QDCT_HAND_ORIGIN_IN) { XRunResetOStep = 5; ReSetXDelay = dwTickCount + 50; } break; case 5: if(!QDCT_HAND_ORIGIN_IN&&dwTickCount >= ReSetXDelay) { AxisEgmStop(X_AXIS); XRunResetOStep = 6; ReSetXDelay = dwTickCount + 10; } break; case 6: if(!X_DRV&&dwTickCount >= ReSetXDelay) { XRunResetOStep = 7; AxisContinueMoveAcc(X_AXIS,800,DIR_N,800,800,20,20); } break; case 7: if(QDCT_HAND_ORIGIN_IN) { AxisEgmStop(X_AXIS); XRunResetOStep = 9; ReSetXDelay = dwTickCount + 20; } break; case 9: if(!X_DRV&&dwTickCount >= ReSetXDelay) { XRunResetOStep = 10; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_XREST_SPEED,-10,2000,2000,20,20,0); } break; case 10: if(!X_DRV) { SetPos(X_AXIS,0); AxisEnableSoftwarelmt(X_AXIS,QDCT_PARAM_XMAX_LENGTH,*QDCT_PARAM_HAND_WORK_LOCAL); XRunResetOStep = 11; ReSetXDelay = dwTickCount + 50; } else if(dwTickCount >= ReSetXOUT_TIME) //多长时间没回到位警告 { XRunResetOStep = 0; QDCT_bHAND_Rsting=0; QDCT_SetAlarmCode(QDCT_HAND_ORIGIN_ALARM);//机械手回零故障 return 0; } break; case 11: if(dwTickCount>=ReSetXDelay) { AxisMovePosAccDec(X_AXIS,QDCT_PARAM_XREST_SPEED,QDCT_PARAM_HAND_STOP_LOCAL,1000,1000,20,20,0); XRunResetOStep = 12; } break; case 12: if(!X_DRV) { X_Reset_Flag=0; XRunResetOStep = 0; QDCT_bHAND_Rsting=0; } break; } return 0; } // int QDCT_Y_ReSetOrigin(void) { switch(YRunResetOStep) { case 1: AxisDisableSoftwarelmt(Y_AXIS); if(dwTickCount >= ReSetYDelay) { if(Y_Reset_Flag) { ReSetYOUT_TIME = dwTickCount + 15000; if(!QDCT_HZLT_ORIGIN_IN) { YRunResetOStep = 2; AxisContinueMoveAcc(Y_AXIS,QDCT_PARAM_YREST_SPEED,DIR_N, 1000,1000,20,20); } else { AxisContinueMoveAcc(Y_AXIS,QDCT_PARAM_YREST_SPEED/2,DIR_P,1000,1000,20,20); YRunResetOStep = 4; } } else { if(0-dwYRealPos) AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_YREST_SPEED,0-dwYRealPos,1000,1000,50,50,0); YRunResetOStep = 10; ReSetYOUT_TIME = dwTickCount + 10000; } } break; case 2: if(QDCT_HZLT_ORIGIN_IN) { AxisDecStop(Y_AXIS); YRunResetOStep = 3; ReSetYDelay = dwTickCount + 100; } break; case 3: if(!Y_DRV&&dwTickCount >= ReSetYDelay) { AxisContinueMoveAcc(Y_AXIS,1000,DIR_P,1000,1000,20,20); //AxisMovePosAccDec(Y_AXIS,1000,QDCT_PARAM_RORIGIN_LENGTH,1000,1000,20,20,0); YRunResetOStep = 4; //ReSetYDelay = dwTickCount + 100; } break; case 4: if(!QDCT_HZLT_ORIGIN_IN) { AxisEgmStop(Y_AXIS); YRunResetOStep = 5; ReSetYDelay = dwTickCount + 100; } break; case 5: if(dwTickCount >= ReSetYDelay&&!Y_DRV) { AxisMovePosAccDec(Y_AXIS,1000,QDCT_PARAM_RORIGIN_LENGTH,1000,1000,20,20,0); YRunResetOStep = 6; ReSetYDelay = dwTickCount + 10; } break; case 6: if(!Y_DRV&&dwTickCount >= ReSetYDelay) { YRunResetOStep = 7; AxisContinueMoveAcc(Y_AXIS,1000,DIR_N,1000,1000,20,20); } break; case 7: if(QDCT_HZLT_ORIGIN_IN) { SetPos(Y_AXIS,0); AxisEgmStop(Y_AXIS); YRunResetOStep = 9; ReSetYDelay = dwTickCount + 20; } break; case 9: if(!Y_DRV&&dwTickCount >= ReSetYDelay) { YRunResetOStep = 10; } break; case 10: if(!Y_DRV) { AxisEnableSoftwarelmt(Y_AXIS,QDCT_PARAM_ZSFL_LOCAL,(*QDCT_PARAM_ZSSL_LOCAL-2)); YRunResetOStep = 11; ReSetYDelay = dwTickCount + 50; } else if(dwTickCount >= ReSetYOUT_TIME) //多长时间没回到位警告 { QDCT_SetAlarmCode(QDCT_ZLS_ORIGIN_ALARM);//机械手回零故障 YRunResetOStep = 0; QDCT_bZS_Rsting=0; } break; case 11: if(dwTickCount>=ReSetYDelay) { AxisMovePosAccDec(Y_AXIS,QDCT_PARAM_YREST_SPEED,QDCT_PARAM_WLTBJ_WAIT,1000,1000,20,20,0); YRunResetOStep = 12; } break; case 12: if(!Y_DRV) { Y_Reset_Flag=0; YRunResetOStep = 0; QDCT_bZS_Rsting=0; } break; } return 0; } //手动动作 void QDCT_ManualAction(void) { //清除订单产量 if(QDCT_bClearTotal) { QDCT_bClearTotal=0; ClrcToTal(QDCT_TOTAL_ADDR); } //清除当前匝数 if(QDCT_bClerNowTotal) { QDCT_bClerNowTotal=0; ClrcToTal(QDCT_NOWTOTAL_ADDR); } //清除总产量 if(QDCT_bClearAllTOTAL) { QDCT_bClearAllTOTAL=0; ClrcToTal(QDCT_ALL_TOTAL_ADDR); } //清除当班产量 if(QDCT_bClearDateTOTAL) { QDCT_bClearDateTOTAL=0; ClrcToTal(QDCT_DATE_TOTAL_ADDR); } if(QDCT_bRunning == 0) { // if(QDCT_bJiaLian) { QDCT_bJiaLian=0; QDCT_JIALIAN_VAVLE=~QDCT_JIALIAN_VAVLE; } // if(QDCT_bZHLT) { QDCT_bZHLT=0; QDCT_ZHL_VAVLE=~QDCT_ZHL_VAVLE; } //下模 if(QDCT_bXM) { QDCT_bXM=0; if(QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_XM_VAVLE=~QDCT_XM_VAVLE; } else//后面是否考虑,告警提示 { QDCT_HSL_VAVLE=0; } } //横送 if(QDCT_bHSL) { QDCT_bHSL=0; if(QDCT_HSL_VAVLE)QDCT_HSL_VAVLE=0; else { if(QDCT_PARAM_ZPSL_MODE==0)//机械手型 { if(QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE&&QDCT_XM_ORIGIN_IN&&!QDCT_HSL_VAVLE&&QDCT_JLT_VAVLE &&QDCT_XZ_LIMIT_IN&&QDCT_XZ_VAVLE) { QDCT_HSL_VAVLE=1; } else { QDCT_XM_VAVLE=0; QDCT_JLT_VAVLE=1; if(QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_XZ_VAVLE=1; } } } else//通用型 { if(QDCT_XM_ORIGIN_IN&&!QDCT_HSL_VAVLE&&QDCT_JLT_VAVLE) { QDCT_HSL_VAVLE=1; } else { QDCT_XM_VAVLE=0; QDCT_JLT_VAVLE=1; } } } } //推料 if(QDCT_bTLiao) { QDCT_bTLiao=0; if(QDCT_TL_VAVLE)QDCT_TL_VAVLE=0; else { if(QDCT_PARAM_ZPSL_MODE==0)//机械手型 { if(QDCT_CSL_LIMIT_IN&&QDCT_CJL_VAVLE||QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE) { QDCT_TL_VAVLE=1; } } else//通用型 { if(QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_TL_VAVLE=1; } } } } //滑道档料气缸 if(QDCT_bHDDL) { QDCT_bHDDL=0; QDCT_HDDL_VAVLE=~QDCT_HDDL_VAVLE; } //旋转气缸 if(QDCT_bXZQG) { QDCT_bXZQG=0; if(QDCT_CSL_ORIGIN_IN&&!QDCT_CJL_VAVLE&&QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE) { QDCT_XZ_VAVLE=~QDCT_XZ_VAVLE; } else//告警 { QDCT_HSL_VAVLE=0; } } //夹拉头气缸 if(QDCT_bJLT) { QDCT_bJLT=0; QDCT_JLT_VAVLE=~QDCT_JLT_VAVLE; } //分带气缸 if(QDCT_bFDai) { QDCT_bFDai=0; QDCT_FDAI_VAVLE=~QDCT_FDAI_VAVLE; } //穿头气缸 if(QDCT_bCLT) { QDCT_bCLT=0; QDCT_CLT_VAVLE=~QDCT_CLT_VAVLE; } //夹布带气缸 if(QDCT_bJBD) { QDCT_bJBD=0; QDCT_JBD_VAVLE=~QDCT_JBD_VAVLE; } //下切刀 if(QDCT_bXQD) { QDCT_bXQD=0; if(QDCT_XQD_VAVLE)QDCT_XQD_VAVLE=0; else { if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE) { QDCT_XQD_VAVLE=1; } else//告警 { QDCT_CLT_VAVLE=0; } } } //增压/超声 if(QDCT_bZYXS&&!QDCT_ZYCS_VAVLE) { QDCT_bZYXS=0; QDCT_ZYCS_VAVLE=1; QDCT_Manu_CS_FLAG=1; QDCT_ManuCSDelay=dwTickCount+QDCT_PARAM_CAOSHENG_TIME; } else if(dwTickCount>=QDCT_ManuCSDelay&&QDCT_ZYCS_VAVLE&&QDCT_Manu_CS_FLAG) { QDCT_Manu_CS_FLAG=0; QDCT_ZYCS_VAVLE=0; } //上切道 if(QDCT_bSQD) { QDCT_bSQD=0; if(QDCT_SQD_VAVLE)QDCT_SQD_VAVLE=0; else { if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE) { QDCT_SQD_VAVLE=1; } else//告警 { QDCT_CLT_VAVLE=0;; } } } //输送带 if(QDCT_bSSD&&!QDCT_SSD_OUT) { QDCT_bSSD=0; QDCT_ManuSSDelay=dwTickCount +QDCT_PARAM_TMSS_TIME*10; QDCT_SSD_OUT=1; } else if(dwTickCount>=QDCT_ManuSSDelay&&QDCT_SSD_OUT) { QDCT_SSD_OUT=0; } //振盘开关 if(QDCT_bZPKG) { QDCT_bZPKG=0; QDCT_ZPKZ_VAVLE=~QDCT_ZPKZ_VAVLE; } //振盘吹气 if(QDCT_bZPCQ) { QDCT_bZPCQ=0; QDCT_ZPCQ_VAVLE=~QDCT_ZPCQ_VAVLE; } //侧进料气缸 if(QDCT_bCJL) { QDCT_bCJL=0; if(QDCT_CJL_VAVLE) { if(!QDCT_TL_LIMIT_IN&&!QDCT_TL_VAVLE)QDCT_CJL_VAVLE=0; else QDCT_TL_VAVLE=0; } else { if(QDCT_HSL_ORIGIN_IN&&!QDCT_HSL_VAVLE&&QDCT_XZ_ORIGIN_IN&&!QDCT_XZ_VAVLE&& !QDCT_TL_LIMIT_IN&&!QDCT_TL_VAVLE) { QDCT_CJL_VAVLE=1; } else//告警 { QDCT_HSL_VAVLE=0; QDCT_XZ_VAVLE=0; QDCT_TL_VAVLE=0; } } } if(QDCT_bXMotor_N) { SetEn(X_AXIS, QDCT_MOTOR_EN); if(!X_DRV&&!X_SOFT_NLIMIT) AxisContinueMoveAcc(X_AXIS,2000,DIR_N,1000,1000,15,15); } if(QDCT_bXMotor_P) { SetEn(X_AXIS, QDCT_MOTOR_EN); if(!X_DRV&&!X_SOFT_PLIMIT) AxisContinueMoveAcc(X_AXIS,2000,DIR_P,1000,1000,15,15); } if(!QDCT_bXMotor_N&&!QDCT_bXMotor_P&&!QDCT_bHAND_Rsting&&QDCT_cSTOPStep==0&&QDCT_cFristQDStep==0) { AxisEgmStop(X_AXIS); } // if(QDCT_bYMotor_N) { SetEn(Y_AXIS, QDCT_MOTOR_EN); if(!Y_DRV&&!Y_SOFT_NLIMIT) { if(!QDCT_PARAM_SF_BJ_MODE) { if(QDCT_HZLT_ORIGIN_IN) AxisContinueMoveAcc(Y_AXIS,800,DIR_N,800,800,15,15); else AxisContinueMoveAcc(Y_AXIS,2000,DIR_N,1000,1000,15,15); } else { if(QDCT_HZLT_ORIGIN_IN) AxisContinueMoveAcc(Y_AXIS,800/5,DIR_N,800/5,800/5,15,15); else AxisContinueMoveAcc(Y_AXIS,2000/5,DIR_N,1000/5,1000/5,15,15); } } } if(QDCT_bYMotor_P) { SetEn(Y_AXIS, QDCT_MOTOR_EN); if(!QDCT_PARAM_SF_BJ_MODE) { if(!Y_DRV&&!Y_SOFT_PLIMIT) AxisContinueMoveAcc(Y_AXIS,2000,DIR_P,1000,1000,15,15); } else { if(!Y_DRV&&!Y_SOFT_PLIMIT) AxisContinueMoveAcc(Y_AXIS,2000/5,DIR_P,1000/5,1000/5,15,15); } } if(!QDCT_bYMotor_N&&!QDCT_bYMotor_P&&!QDCT_bZS_Rsting &&QDCT_ZSZLStep==0&&QDCT_cSTOPStep==0) { AxisEgmStop(Y_AXIS); } //机械手 if(QDCT_bHAND_REST&&!QDCT_bHAND_Rsting) { QDCT_bHAND_REST=0; QDCT_bHAND_Rsting=1; SetEn(X_AXIS, QDCT_MOTOR_EN); XRunResetOStep=1; ReSetXDelay = dwTickCount + 500; } //抓手 if(QDCT_bZS_REST&&!QDCT_bZS_Rsting) { QDCT_bZS_REST=0; QDCT_bZS_Rsting=1; Y_Reset_Flag=1; SetEn(Y_AXIS, QDCT_MOTOR_EN); YRunResetOStep=1; ReSetYDelay = dwTickCount + 500; } //抓拉头 if(QDCT_bManu_ZSZL&&QDCT_ZSZLStep==0&&!Y_Reset_Flag) { QDCT_bManu_ZSZL=0; QDCT_CONT_ZLT_TIMES=0; QDCT_bManu_ZSZLing=1; QDCT_ZSZLStep=1; } //装拉头 if(QDCT_bManu_ZLT&&QDCT_ZLTStep==0) { QDCT_bManu_ZLT=0; QDCT_ZLTStep=1; QDCT_ZLT_TIME=0; QDCT_bManu_ZLTing=1; QDCT_XM_UP_FLAG=1; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } //穿头mo if(QDCT_bManu_CTM&&(QDCT_CLTMStep==0)) { QDCT_bManu_CTM=0; if(QDCT_bManu_CTMing) { QDCT_bManu_CTMing=0; QDCT_CLTMStep=10; } else { QDCT_bManu_CTMing=1; QDCT_CLTMStep=1; } } //切断 if(QDCT_bQieDuan&&QDCT_QDLLStep==0) { QDCT_bQieDuan=0; QDCT_QDLLStep=1; } //振盘启动 if(QDCT_bZPSTART) { QDCT_bZPSTART=0; if(QDCT_bZPSTARTing) { QDCT_ZPKZ_VAVLE=0; QDCT_cZHENPANStep=0; QDCT_bZPSTARTing=0; } else { QDCT_bZPSTARTing=1; QDCT_cZHENPANStep=1; } } //一周切断 if(QDCT_bFristQD&&QDCT_cFristQDStep==0) { QDCT_bFristQD=0; QDCT_bFristQDing=1; QDCT_cFristQDStep=1; } //一键清料 if(QDCT_bClearHDLT&&QDCT_cClearHDLTStep==0) { QDCT_bClearHDLT=0; QDCT_cClearHDLTStep=1; QDCT_bClearHDLTing=1; } } } //电机控制动作 void QDCT_cMotor_Action(void) // { static long hand_local,move_length; static unsigned short run_once_flag; unsigned short run_speed; dwXRealPos = GetPos(X_AXIS); dwYRealPos = GetPos(Y_AXIS); if(dwTickCount>=QDCT_PD_CHECK_DELAY &&QDCT_ZPYL_FEIDAI_IN_UP&&QDCT_PARAM_FEILIAO_MODE&&!QDCT_CLT_PD_FLAG) { QDCT_PD_NUM++; if(QDCT_PD_NUM==1) { FeiDai_Num=0; QDCT_PD_FZ_FLAG=1; QDCT_PD_XSAVEPOS=dwXRealPos-QDCT_XSAVEPOS; QDCT_CHECK_LD_PD_LENGTH=QDCT_PD_XSAVEPOS+QDCT_PARAM_FEIDAI_LENGTH+QDCT_PARAM_CTM_QD_LENGTH; } if(QDCT_PD_NUM>2)QDCT_PD_NUM=2; QDCT_LD_PD_FLAG=1; QDCT_PD_CHECK_DELAY=dwTickCount+80; } switch(QDCT_cMOTORStep) { case 1://判断是否松轴 if(GetEn(X_AXIS)!=1||X_Reset_Flag!=0) { SetEn(X_AXIS, QDCT_MOTOR_EN); XRunResetOStep=1; QDCT_cMOTORStep=2; ReSetXDelay = dwTickCount + 500; } else { QDCT_cMOTORStep=2; } break; case 2: if(XRunResetOStep==0&&X_Reset_Flag==0) { QDCT_cMOTORStep=3; hand_local=*QDCT_PARAM_HAND_WORK_LOCAL; hand_local=hand_local-dwXRealPos; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_HAND_IDLE_SPEED/2,hand_local,1000,1000,120,120,10); } break; case 3: if(!X_DRV) { QDCT_cMOTORStep=0; } break; case 20://穿链 QDCT_XSAVEPOS=dwXRealPos; QDCT_cMOTORStep=21; // run_speed=QDCT_PARAM_HAND_CLT_SPEED; // // if(QDCT_PARAM_HAND_LT_LENGTH<=QDCT_PARAM_CTM_XMLT_LENGTH) QDCT_PARAM_HAND_LT_LENGTH=QDCT_PARAM_CTM_XMLT_LENGTH; hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH; if(hand_local<=0)//立即脱模 { //脱模速度 hand_local=100; QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_XMTM_SPEED,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } else { hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH-QDCT_PARAM_XMTM_CMP_LENGTH; if(hand_local<=0) { hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH; AxisMovePosAccDecNotStop(X_AXIS,run_speed,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } else { AxisMovePosAccDecNotStop(X_AXIS,run_speed,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } } break; case 21://下模离开,加速 if((dwXRealPos>=QDCT_XSAVEPOS+hand_local)&&(GetCurSpeed(X_AXIS)<=QDCT_PARAM_XMTM_SPEED))QDCT_JLT_VAVLE=1;//打开夹拉链 if((dwXRealPos>=QDCT_XSAVEPOS+hand_local)&&(GetCurSpeed(X_AXIS)<=QDCT_PARAM_XMTM_SPEED))QDCT_XM_VAVLE=0; if(!QDCT_XM_LIMIT_IN&&!QDCT_XM_VAVLE)//下模离开限位后加速 { //下模后开始装拉头 //if(QDCT_ZLTStep==0) { QDCT_ZLTStep=1; QDCT_ZLT_OK_FLAG=0; QDCT_XM_UP_FLAG=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } QDCT_cMOTORStep=22; if(*QDCT_PARAM_HAND_LD_LENGTH<=QDCT_PARAM_CTM_QD_LENGTH+200) *QDCT_PARAM_HAND_LD_LENGTH=QDCT_PARAM_CTM_QD_LENGTH+200; hand_local=*QDCT_PARAM_HAND_LD_LENGTH+*QDCT_PARAM_HAND_LD_CMP-QDCT_PARAM_CTM_QD_LENGTH-(dwXRealPos-QDCT_XSAVEPOS); AxisMovePosAccDec(X_AXIS,QDCT_PARAM_HAND_TLD_SPEED,hand_local,1000,1000,120,120,20); } break; case 22: if(!X_DRV) { QDCT_cMOTORStep=0; } break; case 40:// QDCT_XSAVEPOS=dwXRealPos; QDCT_cMOTORStep=41; // if(QDCT_WorkCnt<=1)run_speed=QDCT_PARAM_KK_First_SPEED; else run_speed=QDCT_PARAM_KK_Work_SPEED; // // if(QDCT_PARAM_HAND_LT_LENGTH<=QDCT_PARAM_CTM_XMLT_LENGTH) QDCT_PARAM_HAND_LT_LENGTH=QDCT_PARAM_CTM_XMLT_LENGTH; hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH; if(hand_local<=0)//立即脱模 { //脱模速度 hand_local=0; QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_XMTM_SPEED,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } else { hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH-QDCT_PARAM_XMTM_CMP_LENGTH; if(hand_local<=0) { hand_local=QDCT_PARAM_HAND_LT_LENGTH-QDCT_PARAM_CTM_XMLT_LENGTH; AxisMovePosAccDecNotStop(X_AXIS,run_speed,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } else { AxisMovePosAccDecNotStop(X_AXIS,run_speed,hand_local,2000,QDCT_PARAM_XMTM_SPEED,120,120,0); } } break; case 41: if((dwXRealPos>=QDCT_XSAVEPOS+hand_local)&&(GetCurSpeed(X_AXIS)<=QDCT_PARAM_XMTM_SPEED))QDCT_JLT_VAVLE=1;//打开夹拉链 if((dwXRealPos>=QDCT_XSAVEPOS+hand_local)&&(GetCurSpeed(X_AXIS)<=QDCT_PARAM_XMTM_SPEED))QDCT_XM_VAVLE=0; if(!QDCT_XM_LIMIT_IN&&!QDCT_XM_VAVLE)//下模离开限位后加速 { //下模后开始装拉头 if(!QDCT_bFristQDing) { QDCT_ZLTStep=1; QDCT_ZLT_OK_FLAG=0; QDCT_XM_UP_FLAG=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } QDCT_cMOTORStep=42; hand_local=QDCT_CHECK_GY_LENGTH-QDCT_PARAM_CTM_QD_LENGTH-(dwXRealPos-QDCT_XSAVEPOS); if(hand_local<0)hand_local=0; if(QDCT_WorkCnt<=1) { ; } else { AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_KK_TD_SPEED,hand_local,2000,QDCT_PARAM_KK_First_SPEED, 120,120,PosToPulse(X_AXIS,QDCT_PARAM_KKKW_LOW_LENGTH)); } } else if(QDCT_KW_CHECK_IN) { QDCT_JLT_VAVLE=1; QDCT_XM_VAVLE=0; //QDCT_FDAI_VAVLE=0; if(!QDCT_bFristQDing) { QDCT_ZLTStep=1; QDCT_ZLT_OK_FLAG=0; QDCT_XM_UP_FLAG=0; QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } QDCT_cMOTORStep=43; AxisContinueMoveChangeSpeed(X_AXIS,QDCT_PARAM_KK_KW_SPEED,1000,10,10); } break; case 42: move_length=dwXRealPos-QDCT_XSAVEPOS; move_length=move_length+QDCT_PARAM_CTM_XMLT_LENGTH; if((QDCT_WorkCnt<=1)&&(move_length>=QDCT_PARAM_KKFIRST_ALARM_LENGTH)|| (QDCT_WorkCnt>1)&&(move_length>=(QDCT_PARAM_KK_ALARM_LENGTH+QDCT_CHECK_LD_LENGTH))) { QDCT_SetAlarmCode(QDCT_LD_LENGTH_ALARM); QDCT_cMOTORStep=100; AxisContinueMoveChangeSpeed(X_AXIS,1000,1000,20,20); } else if(QDCT_KW_CHECK_IN) { //QDCT_FDAI_VAVLE=0; QDCT_cMOTORStep=43; AxisContinueMoveChangeSpeed(X_AXIS,QDCT_PARAM_KK_KW_SPEED,1000,10,10); } break; case 43: move_length=dwXRealPos-QDCT_XSAVEPOS; move_length=move_length+QDCT_PARAM_CTM_XMLT_LENGTH; if((QDCT_WorkCnt<=1)&&(move_length>=QDCT_PARAM_KKFIRST_ALARM_LENGTH)|| (QDCT_WorkCnt>1)&&(move_length>=(QDCT_PARAM_KK_ALARM_LENGTH+QDCT_CHECK_LD_LENGTH))) { QDCT_SetAlarmCode(QDCT_LD_LENGTH_ALARM); QDCT_cMOTORStep=100; AxisContinueMoveChangeSpeed(X_AXIS,1000,1000,20,20); } else if(!QDCT_KW_CHECK_IN) { QDCT_FDAI_VAVLE=0; QDCT_CHECK_GY_LENGTH=dwXRealPos-QDCT_XSAVEPOS+QDCT_PARAM_CTM_QD_LENGTH; if(QDCT_WorkCnt>1) { if(QDCT_CHECK_GY_OLDLENGTH>=QDCT_CHECK_GY_LENGTH+QDCT_PARAM_KK_CDL_ALARM_LENGTH) { QDCT_DUANLIAN_ALARM_FLAG=1; SingOneFlg=1; QDCT_SetAlarmCode(QDCT_LD_LENGTH_DL_ALARM); } else if((QDCT_CHECK_GY_OLDLENGTH+QDCT_PARAM_KK_CDL_ALARM_LENGTH)<=QDCT_CHECK_GY_LENGTH) { QDCT_CHUANGLIAN_ALARM_FLAG=1; SingOneFlg=1; QDCT_SetAlarmCode(QDCT_LD_LENGTH_CL_ALARM); } } else if(QDCT_WorkCnt<=1) { QDCT_CHECK_GY_OLDLENGTH=QDCT_CHECK_GY_LENGTH; } QDCT_cMOTORStep=44; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_KK_KW_SPEED,QDCT_PARAM_KK_QDDW_LENGTH,800,800,120,120,0); } break; case 44: if(QDCT_KW_CHECK_IN) { QDCT_cMOTORStep=43; } else if(!X_DRV) { QDCT_CHECK_LD_LENGTH=dwXRealPos-QDCT_XSAVEPOS+QDCT_PARAM_CTM_QD_LENGTH; if(QDCT_WorkCnt<=1) { QDCT_CHECK_LD_OLDLENGTH=QDCT_CHECK_LD_LENGTH; } QDCT_cMOTORStep=0; } break; //退链 case 60:// QDCT_XSAVEPOS=dwXRealPos; QDCT_cMOTORStep=61; if(QDCT_CLT_PD_FLAG) { FeiDai_Num++; if((QDCT_CHECK_LD_LENGTH)>=QDCT_CHECK_CLT_PD_LENGTH+QDCT_PARAM_CTM_QD_LENGTH) { QDCT_PD_NUM=2; FeiDai_Num=0; QDCT_CLT_PD_FLAG=0; QDCT_FAIDAI_FLAG=1; } else { QDCT_PD_NUM=2; FeiDai_Num=0; QDCT_CLT_PD_FLAG=0; QDCT_FAIDAI_FLAG=1; } } else if(QDCT_LD_PD_FLAG) { FeiDai_Num++; if((QDCT_CHECK_LD_LENGTH*FeiDai_Num)>=QDCT_CHECK_LD_PD_LENGTH) { //FeiDai_Num=0; QDCT_LD_PD_FLAG=0; QDCT_FAIDAI_FLAG=1; } /* else { FeiDai_Num++; QDCT_CHECK_LD_PD_LENGTH=QDCT_CHECK_LD_PD_LENGTH+FeiDai_Num*QDCT_CHECK_LD_LENGTH; }*/ } if(QDCT_FAIDAI_FLAG&&QDCT_PARAM_FEILIAO_MODE) { if(QDCT_PD_NUM) { QDCT_PD_NUM--; } hand_local=QDCT_PARAM_HAND_FL_SD_LENGTH; } else hand_local=QDCT_PARAM_HAND_SD_LOCAL; if(QDCT_PD_NUM==0){QDCT_FAIDAI_FLAG=0;FeiDai_Num=0;QDCT_LD_PD_FLAG=0;} AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_HAND_FD_SPEED,hand_local,1000,QDCT_PARAM_HAND_FD_SPEED,120,120,0); run_once_flag=1; break; case 61: if((run_once_flag)&&(dwXRealPos>=QDCT_XSAVEPOS+hand_local)) { QDCT_JIALIAN_VAVLE=0; QDCT_XM_UP_FLAG=1; QDCT_cMOTORDelay=dwTickCount+60; run_once_flag=0; } else if(!QDCT_JIALIAN_VAVLE&&(dwTickCount>=QDCT_cMOTORDelay)) { //加速 QDCT_cMOTORStep=62; hand_local=QDCT_PARAM_HAND_TJ_LOCAL;//hand_local-(dwXRealPos-QDCT_XSAVEPOS); AxisMovePosAccDec(X_AXIS,QDCT_PARAM_HAND_IDLE_SPEED,hand_local,2000,1000,30,180,100); } break; case 62: if(!X_DRV) { QDCT_cMOTORStep=63; QDCT_cMOTORDelay=dwTickCount+30; } break; case 63:// QDCT_cMOTORStep=64; hand_local=*QDCT_PARAM_HAND_WORK_LOCAL; hand_local=hand_local-dwXRealPos; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_HAND_IDLE_SPEED,hand_local,2000,1000,150,150,10); break; case 64: if(!X_DRV) { QDCT_cMOTORStep=0; } break; case 80: QDCT_cMOTORStep=81; if(*QDCT_PARAM_HAND_LD_LENGTH<=QDCT_PARAM_CTM_QD_LENGTH) *QDCT_PARAM_HAND_LD_LENGTH=QDCT_PARAM_CTM_QD_LENGTH; hand_local=*QDCT_PARAM_HAND_LD_LENGTH+*QDCT_PARAM_HAND_LD_CMP-QDCT_PARAM_CTM_QD_LENGTH; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_HAND_TLD_SPEED,hand_local,1000,1000,120,120,20); break; case 81: if(!X_DRV) { QDCT_cMOTORStep=0; } break; //切断模式,开口 case 120:// QDCT_XSAVEPOS=dwXRealPos; QDCT_cMOTORStep=121; if(QDCT_WorkCnt<=1) { AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_KK_First_SPEED,2000,2000,QDCT_PARAM_KK_First_SPEED, 120,120,PosToPulse(X_AXIS,QDCT_PARAM_KKKW_LOW_LENGTH)); ; } else { hand_local=QDCT_CHECK_GY_LENGTH-QDCT_PARAM_CTM_QD_LENGTH; if(hand_local<0)hand_local=0; AxisMovePosAccDecNotStop(X_AXIS,QDCT_PARAM_KK_TD_SPEED,hand_local,2000,QDCT_PARAM_KK_First_SPEED, 120,120,PosToPulse(X_AXIS,QDCT_PARAM_KKKW_LOW_LENGTH)); } break; case 121: move_length=dwXRealPos-QDCT_XSAVEPOS; move_length=move_length+QDCT_PARAM_CTM_XMLT_LENGTH; if((QDCT_WorkCnt<=1)&&(move_length>=QDCT_PARAM_KKFIRST_ALARM_LENGTH)|| (QDCT_WorkCnt>1)&&(move_length>=(QDCT_PARAM_KK_ALARM_LENGTH+QDCT_CHECK_LD_LENGTH))) { QDCT_SetAlarmCode(QDCT_LD_LENGTH_ALARM); QDCT_cMOTORStep=100; AxisContinueMoveChangeSpeed(X_AXIS,1000,1000,20,20); } else if(QDCT_KW_CHECK_IN) { QDCT_cMOTORStep=122; AxisContinueMoveChangeSpeed(X_AXIS,QDCT_PARAM_KK_KW_SPEED,1000,10,10); } break; case 122: move_length=dwXRealPos-QDCT_XSAVEPOS; move_length=move_length+QDCT_PARAM_CTM_XMLT_LENGTH; if((QDCT_WorkCnt<=1)&&(move_length>=QDCT_PARAM_KKFIRST_ALARM_LENGTH)|| (QDCT_WorkCnt>1)&&(move_length>=(QDCT_PARAM_KK_ALARM_LENGTH+QDCT_CHECK_LD_LENGTH))) { QDCT_SetAlarmCode(QDCT_LD_LENGTH_ALARM); QDCT_cMOTORStep=100; AxisContinueMoveChangeSpeed(X_AXIS,1000,1000,20,20); } else if(!QDCT_KW_CHECK_IN) { QDCT_FDAI_VAVLE=0; QDCT_CHECK_GY_LENGTH=dwXRealPos-QDCT_XSAVEPOS+QDCT_PARAM_CTM_QD_LENGTH; if(QDCT_WorkCnt>1) { if(QDCT_CHECK_GY_OLDLENGTH>=QDCT_CHECK_GY_LENGTH+QDCT_PARAM_KK_CDL_ALARM_LENGTH) { QDCT_DUANLIAN_ALARM_FLAG=1; SingOneFlg=1; QDCT_SetAlarmCode(QDCT_LD_LENGTH_DL_ALARM); } else if((QDCT_CHECK_GY_OLDLENGTH+QDCT_PARAM_KK_CDL_ALARM_LENGTH)<=QDCT_CHECK_GY_LENGTH) { QDCT_CHUANGLIAN_ALARM_FLAG=1; SingOneFlg=1; QDCT_SetAlarmCode(QDCT_LD_LENGTH_CL_ALARM); } } else if(QDCT_WorkCnt<=1) { QDCT_CHECK_GY_OLDLENGTH=QDCT_CHECK_GY_LENGTH; } QDCT_cMOTORStep=123; AxisMovePosAccDec(X_AXIS,QDCT_PARAM_KK_KW_SPEED,QDCT_PARAM_KK_QDDW_LENGTH,800,800,120,120,0); } break; case 123: if(QDCT_KW_CHECK_IN) { QDCT_cMOTORStep=122; } else if(!X_DRV) { QDCT_CHECK_LD_LENGTH=dwXRealPos-QDCT_XSAVEPOS+QDCT_PARAM_CTM_QD_LENGTH; if(QDCT_WorkCnt<=1) { QDCT_CHECK_LD_OLDLENGTH=QDCT_CHECK_LD_LENGTH; } QDCT_cMOTORStep=0; } break; case 100: if(GetCurSpeed(X_AXIS) <= 2000) { AxisEgmStop(X_AXIS); QDCT_bAlarmStop=1; } break; } } //自动动作 void QDCT_AutoStepAction(void) { dwXRealPos = GetPos(X_AXIS); dwYRealPos = GetPos(Y_AXIS); X_SOFT_PLIMIT=GetSoftPLimit(X_AXIS); X_SOFT_NLIMIT=GetSoftNLimit(X_AXIS); Y_SOFT_PLIMIT=GetSoftPLimit(Y_AXIS); Y_SOFT_NLIMIT=GetSoftNLimit(Y_AXIS); user_datas[121] = QDCT_AutoStep; user_datas[122] = QDCT_QDLLStep;//YRunResetOStep; user_datas[123] = QDCT_PD_NUM;//QDCT_ZSZLStep;//QDCT_cZHENPANStep;//XRunResetOStep; user_datas[124] = QDCT_CHECK_LD_LENGTH;//QDCT_cMOTORStep;//YRunResetOStep; user_datas[125] = QDCT_CLT_PD_FLAG;//QDCT_ZLTStep;// user_datas[126] = QDCT_LD_PD_FLAG;//QDCT_TSXZLTStep;//QDCT_cZHENPANStep;//QDCT_TSXZLTStep; user_datas[127] = QDCT_CHECK_CLT_PD_LENGTH;//QDCT_cFristQDStep;//QDCT_CHECK_LD_LENGTH;//QDCT_ZLTStep; user_datas[128] = QDCT_CHECK_LD_PD_LENGTH;//QDCT_cClearHDLTStep;//QDCT_CHECK_GY_LENGTH;//QDCT_QDLLStep; *QDCT_PARAM_X_LOCAL=dwXRealPos; *QDCT_PARAM_Y_LOCAL=dwYRealPos; //破链延时退出 switch(QDCT_AutoStep) { case 1://装拉头 if(dwTickCount>=QDCT_AutoDelay) { if(QDCT_PARAM_WORK_MODE==0)//穿头切断模式 QDCT_FDAI_VAVLE=1; if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_AutoStep=2; QDCT_AutoDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; } } break; case 2://装完拉头--穿链 if(QDCT_ZLTStep==0&&QDCT_ZLT_OK_FLAG==1&&(QDCT_LTQL_CHECK_IN||QDCT_PARAM_WORK_MODE==1)) { if(!QDCT_SQD_LIMIT_IN&&!QDCT_SQD_VAVLE&&QDCT_XQD_ORIGIN_IN&&!QDCT_XQD_VAVLE)//上刀、下刀在原位 { if(QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE||QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE )//穿头模在原位 { QDCT_QD_KM_TIME_TOTAL=QDCT_QD_KM_TIME_TOTAL-dwTickCount; if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_AutoStep=3; QDCT_CLT_VAVLE=1; PRE_CLT_Runtime=dwTickCount; QDCT_AutoDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; // if(QDCT_PARAM_LLMZ_TYPE==0)//闭口马壮 QDCT_KKPOLIANDelay=dwTickCount+QDCT_PARAM_BKPL_TIME*10; else//开口马庄 QDCT_KKPOLIANDelay=dwTickCount+QDCT_PARAM_KKPL_TIME*10; } } else if(dwTickCount>=QDCT_AutoDelay) { if(!QDCT_CLT_VAVLE&&!QDCT_CLT_ORIGIN_IN) { QDCT_SetAlarmCode(QDCT_CLTM_ORIGIN_ALARM); } else if(!QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE) { QDCT_SetAlarmCode(QDCT_CLTM_LIMIT_ALARM); } } } else if(dwTickCount>=QDCT_AutoDelay) { if(QDCT_SQD_LIMIT_IN)QDCT_SetAlarmCode(QDCT_SDQD_LIMIT_ALARM); else if(!QDCT_XQD_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_XDQD_ORIGIN_ALARM); } } break; case 3://穿头模到位,机械手夹带 if(QDCT_ZPYL_FEIDAI_IN_UP&&QDCT_PARAM_FEILIAO_MODE&&!QDCT_CLT_PD_FLAG) { CLT_PD_Runtime=dwTickCount-PRE_CLT_Runtime; QDCT_CLT_PD_FLAG=1; QDCT_PD_FZ_FLAG=1; FeiDai_Num=0; } if(!QDCT_CLT_ORIGIN_IN&&dwTickCount>=QDCT_KKPOLIANDelay&&(QDCT_PARAM_WEIBA_TYPE==0))//&&QDCT_PARAM_LLMZ_TYPE)//离开原点计数破链时间 { QDCT_FDAI_VAVLE=0; } if(QDCT_CLT_LIMIT_IN&&QDCT_CLT_VAVLE&&(QDCT_LLCR_CHECK_IN||QDCT_PARAM_WORK_MODE==1)&&QDCT_cMOTORStep==0) { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_AutoStep=4; PRE_CLT_Runtime=dwTickCount-PRE_CLT_Runtime; if(QDCT_PD_FZ_FLAG) { QDCT_CHECK_CLT_PD_LENGTH=QDCT_PARAM_FEIDAI_LENGTH; } // if(QDCT_PARAM_WEIBA_TYPE==0)QDCT_FDAI_VAVLE=0; else QDCT_FDAI_VAVLE=1; // QDCT_JIALIAN_VAVLE=1; QDCT_AutoDelay=dwTickCount+QDCT_PARAM_HJL_OVERTIME*10; } } else if(dwTickCount>=QDCT_AutoDelay) { if(!QDCT_LLCR_CHECK_IN&&(QDCT_PARAM_WORK_MODE==0)) { QDCT_SetAlarmCode(QDCT_CRGY_CHECK_ALARM);//穿入未完成,或穿入感应故障 //QDCT_AutoStep=200; QDCT_bAlarmStop=1; } else if(!QDCT_CLT_LIMIT_IN) { QDCT_SetAlarmCode(QDCT_CLTM_LIMIT_ALARM);//穿拉头模到位故障 //QDCT_AutoStep=200; QDCT_bAlarmStop=1; } } break; case 4://松夹布带 if(dwTickCount>=QDCT_AutoDelay) { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_AutoStep=5; QDCT_JBD_VAVLE=1; QDCT_AutoDelay=dwTickCount+QDCT_PARAM_SJBD_OVERTIME*10; } } break; case 5://机械手拉带,穿头模回退 if(dwTickCount>=QDCT_AutoDelay) { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_CLT_VAVLE=0; QDCT_AutoDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; if(QDCT_PARAM_WORK_MODE==0) { switch(QDCT_PARAM_LLMZ_TYPE) { case 0://闭口 if(QDCT_cMOTORStep==0) { QDCT_cMOTORStep=20; QDCT_AutoStep=6; } break; case 1://冲齿开口 if(QDCT_cMOTORStep==0) { //if(FeiDai_Num&&QDCT_PARAM_FEILIAO_MODE) //{ // QDCT_cMOTORStep=120; //} //else { QDCT_cMOTORStep=40; } QDCT_AutoStep=6; } break; } } else//切断模式 { switch(QDCT_PARAM_LLMZ_TYPE) { case 0://闭口 if(QDCT_cMOTORStep==0) { QDCT_cMOTORStep=80; QDCT_AutoStep=6; } break; case 1://冲齿开口 if(QDCT_cMOTORStep==0) { QDCT_cMOTORStep=120; QDCT_AutoStep=6; } break; } } } } break; case 6://机械手拉带完成,切断 if(QDCT_cMOTORStep==0&&QDCT_CLT_ORIGIN_IN&&!QDCT_CLT_VAVLE) { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { if(QDCT_QDLLStep==0) { QDCT_QDLLStep=1; QDCT_AutoStep=7; } } } else if(dwTickCount>=QDCT_AutoDelay) { if(QDCT_CLT_ORIGIN_IN)QDCT_SetAlarmCode(QDCT_CLTM_ORIGIN_ALARM); } break; case 7://切断完成,拉带 if(QDCT_QDLLStep==0) { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { //if(QDCT_cMOTORStep==0) { CalProSP(QDCT_SPEED_ADDR);//计算生产速度 if(!QDCT_DUANLIAN_ALARM_FLAG&&!QDCT_CHUANGLIAN_ALARM_FLAG) { AddToTal(QDCT_TOTAL_ADDR);//生产总量加1并保存 AddToTal(QDCT_NOWTOTAL_ADDR);//生产总量加1并保存 AddToTal(QDCT_ALL_TOTAL_ADDR);//累计生产总量 AddToTal(QDCT_DATE_TOTAL_ADDR);//当班生产总量 } QDCT_DUANLIAN_ALARM_FLAG=0; QDCT_CHUANGLIAN_ALARM_FLAG=0; if(QDCT_WorkCnt<10)QDCT_WorkCnt++; QDCT_AutoStep=8; } } } break; case 8://拉带完成,计算产量、扎数等 //if(QDCT_cMOTORStep==0) { if(GetTotal(QDCT_NOWTOTAL_ADDR) >= user_datas[QDCT_ZHANUMBER_ADDR]&&user_datas[QDCT_ZHANUMBER_ADDR]!=0) //扎数到 { QDCT_SSD_OUT=1; QDCT_TRAN_FLAG=1; QDCT_cTMSSDelay=dwTickCount+QDCT_PARAM_TMSS_TIME*10+10; } if((GetTotal(QDCT_TOTAL_ADDR) >= GetTotal(QDCT_SETTOTAL_ADDR)) && (GetTotal(QDCT_SETTOTAL_ADDR) != 0)) { SetAlarmCode(QDCT_ALARM_ADDR,QDCT_TOTAL_ALARM); if(QDCT_cMOTORStep==0) { QDCT_AutoStep=0; QDCT_bRunning=0; } } else if(SingOneFlg) { if(QDCT_cMOTORStep==0) { SingOneFlg=0; QDCT_AutoStep=0; QDCT_bRunning=0; } } else { if(QDCT_bTestMode&&QDCT_START_IN||!QDCT_bTestMode) { QDCT_AutoStep=1; QDCT_AutoDelay=dwTickCount+QDCT_PARAM_CYCLE_TIME*10; } } } break; //故障处理 case 200: QDCT_AutoStep=0; break; } if((dwTickCount>=QDCT_cTMSSDelay)&&QDCT_SSD_OUT&&QDCT_TRAN_FLAG) { QDCT_TRAN_FLAG=0; QDCT_SSD_OUT=0; ClrcToTal(QDCT_NOWTOTAL_ADDR); } } void QDCT_CheckStart(void) { //卡带 if((QDCT_LDQL_CHECK_IN_UP&&(QDCT_PARAM_ZPSL_MODE==0)||QDCT_LDQL_COM_CHECK_IN_UP&&(QDCT_PARAM_ZPSL_MODE==1))&&QDCT_bRunning) { if(QDCT_AutoStep>=7)SingOneFlg=1; else QDCT_bStop=1; QDCT_AlARM_LED_FLAG=1; SetAlarmCode(QDCT_ALARM_ADDR,QDCT_KADA_ALARM); } //指示灯 if(GetAlarmCode(QDCT_ALARM_ADDR)==0)QDCT_AlARM_LED_FLAG=0; if(QDCT_AlARM_LED_FLAG) { QDCT_ALARM_OUT=1; QDCT_RUNNING_OUT=0; } else if(QDCT_bRunning&&QDCT_AlARM_LED_FLAG==0) { QDCT_RUNNING_OUT=1; QDCT_ALARM_OUT=0; } else if(!QDCT_bRunning) { QDCT_RUNNING_OUT=0; } //启动 if((QDCT_START_IN_UP||QDCT_bStart||QDCT_bOnceStart)&&!QDCT_bRunning&&!QDCT_LDQL_CHECK_IN&&!QDCT_bSafedoor) { if((GetTotal(QDCT_TOTAL_ADDR) >= GetTotal(QDCT_SETTOTAL_ADDR)) && (GetTotal(QDCT_SETTOTAL_ADDR) != 0)) { SetAlarmCode(QDCT_ALARM_ADDR,QDCT_TOTAL_ALARM); } else if(GetAlarmCode(QDCT_ALARM_ADDR)==0) { // QDCT_AlARM_LED_FLAG=0; QDCT_bRunning=1; QDCT_AutoStep=1; QDCT_cMOTORStep=1; QDCT_AutoDelay=dwTickCount+200; if(QDCT_bOnceStart)SingOneFlg=1; if(QDCT_PARAM_WORK_MODE==0)//穿头切断模式 { //抓手抓料 if(QDCT_PARAM_ZPSL_MODE==0)QDCT_ZSZLStep=1; //振盘启动 QDCT_bZPSTARTing=1; QDCT_cZHENPANStep=1; //装拉头 QDCT_ZLTStep=1; QDCT_ZLT_OK_FLAG=0; QDCT_XM_UP_FLAG=1;//下模允许上升标志 //QDCT_ZLTDelay=dwTickCount+QDCT_VAVLE_ERROR_TIME; QDCT_CLT_PD_FLAG=0; QDCT_LD_PD_FLAG=0; QDCT_PD_FZ_FLAG=0; QDCT_PD_NUM=0; } else { //装拉头 QDCT_ZLTStep=0; QDCT_ZLT_OK_FLAG=1; QDCT_XM_UP_FLAG=1;//下模允许上升标志 } QDCT_JBD_VAVLE=0; QDCT_bOnceStart=0; QDCT_WorkCnt=0; QDCT_CONT_ZLT_TIMES=0; QDCT_AlARM_STOP_FLAG=0; QDCT_SERVO_ALAEM_FLAG=0; QDCT_cFristQDStep=0; QDCT_bFristQDing=0; QDCT_cClearHDLTStep=0; QDCT_bClearHDLTing=0; //长度报警标志清零 QDCT_DUANLIAN_ALARM_FLAG=0; QDCT_CHUANGLIAN_ALARM_FLAG=0; if(GetTotal(QDCT_NOWTOTAL_ADDR) >= user_datas[QDCT_ZHANUMBER_ADDR]&&user_datas[QDCT_ZHANUMBER_ADDR]!=0) //扎数到 { QDCT_SSD_OUT=1; QDCT_TRAN_FLAG=1; QDCT_cTMSSDelay=dwTickCount+QDCT_PARAM_TMSS_TIME*10+10; } } } //停止 if(QDCT_STOP_IN_UP||QDCT_bStop||QDCT_EMG_STOP_IN_UP&&QDCT_PARAM_ZPSL_MODE==1) { QDCT_STOP_NUM++; if(QDCT_STOP_NUM>2)QDCT_STOP_NUM=0; if((QDCT_bStop||QDCT_STOP_IN_UP&&QDCT_PARAM_ZPSL_MODE==1)&&QDCT_bRunning) { SingOneFlg=1; QDCT_bStop=0; } else { //轴停止步 QDCT_bStop=0; if(QDCT_cSTOPStep==0)QDCT_cSTOPStep=1; else { AxisEgmStop(X_AXIS); AxisEgmStop(Y_AXIS); } //自动 QDCT_AutoStep=0; QDCT_cMOTORStep=0; //振盘 QDCT_cZHENPANStep=0; QDCT_bZPSTARTing=0; QDCT_ZPKZ_VAVLE=0; //抓手 QDCT_ZSZLStep=0; QDCT_bManu_ZSZLing=0; //推料横送 QDCT_TSXZLTStep=0; //装拉头 QDCT_ZLTStep=0; QDCT_bManu_ZLTing=0; QDCT_XM_UP_FLAG=0; //穿拉头 QDCT_bManu_CTMing=0; if(QDCT_HSL_VAVLE==0)QDCT_CJL_VAVLE =0; if(QDCT_CLT_VAVLE&&QDCT_CLT_LIMIT_IN) { QDCT_CLTMStep=10; } else { QDCT_CLTMStep=0; QDCT_XM_VAVLE=0; QDCT_CLT_VAVLE=0; } //切断 QDCT_QDLLStep=0; //复位 XRunResetOStep=0; YRunResetOStep = 0; QDCT_bZS_Rsting=0; QDCT_bHAND_Rsting=0; //单次 SingOneFlg=0; //IO QDCT_JIALIAN_VAVLE=0; QDCT_HSL_VAVLE =0; QDCT_TL_VAVLE=0; QDCT_HDDL_VAVLE=0; QDCT_XZ_VAVLE=0; QDCT_ZPCQ_VAVLE=0; QDCT_FDAI_VAVLE=0; QDCT_XQD_VAVLE=0; QDCT_ZYCS_VAVLE=0; QDCT_SQD_VAVLE=0; QDCT_SSD_OUT=0; QDCT_AlARM_STOP_FLAG=0; } if((GetAlarm(Y_AXIS)==1)||(GetAlarm(X_AXIS)==1)) { SetClr(X_AXIS, 1); SetClr(Y_AXIS, 1); QDCT_CLR_SERVOALAEM_FLAG=1; QDCT_CLR_ALARM_Pulse=dwTickCount+1000; } QDCT_cFristQDStep=0; QDCT_bFristQDing=0; QDCT_cClearHDLTStep=0; QDCT_bClearHDLTing=0; QDCT_SERVO_ALAEM_FLAG=0; QDCT_CONT_ZLT_TIMES=0; QDCT_STOP_PRESS_Delay=dwTickCount+800; QDCT_QD_SZ_STOPPRESS_DELAY=dwTickCount+3000; //长度报警标志清零 QDCT_DUANLIAN_ALARM_FLAG=0; QDCT_CHUANGLIAN_ALARM_FLAG=0; QDCT_SJ_CHECK_OUT=0; } //松夹 if(QDCT_STOP_IN&&dwTickCount>=QDCT_STOP_PRESS_Delay&&QDCT_CLTMStep==0) { QDCT_JBD_VAVLE=1; QDCT_STOPPRESS_FLAG=1; } else if(QDCT_CLTMStep==0) { if(QDCT_STOPPRESS_FLAG) { QDCT_STOPPRESS_FLAG=0; QDCT_JBD_VAVLE=0; } } //松轴 if(QDCT_STOP_IN&&dwTickCount>=QDCT_QD_SZ_STOPPRESS_DELAY) { SetEn(X_AXIS, QDCT_MOTOR_DISEN); SetEn(Y_AXIS, QDCT_MOTOR_DISEN); X_Reset_Flag=1; Y_Reset_Flag=1; } //安全护罩 if(QDCT_bRunning&&(QDCT_PARAM_SAFE_DOOR_SW==0)&& (QDCT_DOOR_CHECK_IN_DOWN&&(QDCT_PARAM_ZPSL_MODE==0)||QDCT_DOOR_COM_CHECK_IN_DOWN&&(QDCT_PARAM_ZPSL_MODE==1)))//常开 { QDCT_AlARM_LED_FLAG=1; SetAlarmCode(QDCT_ALARM_ADDR,QDCT_SAFE_ALARM); QDCT_bStop=1; } else if(QDCT_bRunning&&QDCT_PARAM_SAFE_DOOR_SW==1&& (QDCT_DOOR_CHECK_IN_UP&&(QDCT_PARAM_ZPSL_MODE==0)||QDCT_DOOR_COM_CHECK_IN_UP&&(QDCT_PARAM_ZPSL_MODE==1)))//常闭 { QDCT_AlARM_LED_FLAG=1; SetAlarmCode(QDCT_ALARM_ADDR,QDCT_SAFE_ALARM); QDCT_bStop=1; } if(QDCT_PARAM_SAFE_DOOR_SW==0&&(!QDCT_DOOR_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==0))) { QDCT_bSafedoor=1; } else if(QDCT_PARAM_SAFE_DOOR_SW==1&&(QDCT_DOOR_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==0))) { QDCT_bSafedoor=1; } else { QDCT_bSafedoor=0; } if(QDCT_PARAM_ZPSL_MODE==1)QDCT_bSafedoor=QDCT_EMG_STOP_IN; /* if(QDCT_PARAM_SAFE_DOOR_SW==0&&(!QDCT_DOOR_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==0)||!QDCT_DOOR_COM_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==1))) { QDCT_bSafedoor=1; } else if(QDCT_PARAM_SAFE_DOOR_SW==1&&(QDCT_DOOR_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==0)||QDCT_DOOR_COM_CHECK_IN&&(QDCT_PARAM_ZPSL_MODE==1))) { QDCT_bSafedoor=1; } else { QDCT_bSafedoor=0; } */ //故障处理 if(QDCT_bAlarmStop) { QDCT_bAlarmStop=0; AxisEgmStop(X_AXIS); AxisEgmStop(Y_AXIS); //自动 QDCT_bRunning=0; QDCT_AutoStep=0; //拖带 QDCT_cMOTORStep=0; //切断 QDCT_QDLLStep=0; //装拉头 //QDCT_ZLTStep=0; //QDCT_bManu_ZLTing=0; //接料 //QDCT_TSXZLTStep=0; //抓手抓料 //QDCT_ZSZLStep=0; //QDCT_bManu_ZSZLing=0; QDCT_AlARM_STOP_FLAG=1; } //伺服报警标志 if(((GetAlarm(Y_AXIS)==1)&&(QDCT_PARAM_ZPSL_MODE==0) && (QDCT_PARAM_SF_BJ_MODE==0) || GetAlarm(X_AXIS)==1)&&!QDCT_SERVO_ALAEM_FLAG) { QDCT_bAlarmStop=1; QDCT_SERVO_ALAEM_FLAG=1; QDCT_SetAlarmCode(QDCT_HAND_SERVO_ALARM); } //清除伺服告警 if(dwTickCount>=QDCT_CLR_ALARM_Pulse&&QDCT_CLR_SERVOALAEM_FLAG) { QDCT_CLR_SERVOALAEM_FLAG=0; SetClr(X_AXIS, 0); SetClr(Y_AXIS, 0); } } //初始化动作 void QDCT_InitAction(void) { float buff_pulse,buff_dist; buff_pulse = QDCT_PARAM_XCYCLE_PULSE; buff_dist = QDCT_PARAM_XCYCLE_LENGTH; XGearRatio = buff_pulse/buff_dist; buff_pulse = QDCT_PARAM_YCYCLE_PULSE; buff_dist = QDCT_PARAM_YCYCLE_LENGTH; YGearRatio = buff_pulse/buff_dist; buff_pulse = QDCT_PARAM_ZCYCLE_PULSE; buff_dist = QDCT_PARAM_ZCYCLE_LENGTH; ZGearRatio = 1;// buff_pulse/buff_dist; SetEnReverse(X_AXIS, 0); if(!QDCT_PARAM_SF_BJ_MODE)//伺服步进切换 SetEnReverse(Y_AXIS, 0); else SetEnReverse(Y_AXIS, 1); SetEn(X_AXIS, QDCT_MOTOR_DISEN); SetEn(Y_AXIS, QDCT_MOTOR_DISEN); SetAlarmCode(QDCT_ALARM_ADDR,QDCT_NO_ALARM); SetDirReverse(X_AXIS, 1); SetDirReverse(Y_AXIS, 0); //伺服报警常闭输入、0为正常,1为告警, SetAlarmReverse(X_AXIS,1); SetAlarmReverse(Y_AXIS,1); X_Reset_Flag=1; Y_Reset_Flag=1; //X轴上电复位 if(QDCT_PARAM_XPOWERON_RST)QDCT_bHAND_REST=1; if(QDCT_PARAM_YPOWERON_RST)QDCT_bZS_REST=1; QDCT_LTCC_COUNT=0; } void QDCT_Action(void) { QDCT_AlarmProtect(); QDCT_CheckStart(); QDCT_ManualAction(); QDCT_CLTM_Proc(); //停止处理 QDCT_STOPACTION_Proc(); /// if(QDCT_PARAM_ZPSL_MODE==0) { //振动盘 QDCT_ZHENPAN_Proc(); //回原点处理 QDCT_Y_ReSetOrigin(); QDCT_X_ReSetOrigin(); //抓料装料 QDCT_ZhuaShouZL_Proc(); //推送旋转 QDCT_TSXZLT_Proc(); //装拉头处理 QDCT_ZLT_Proc(); } else { //振动盘 QDCT_ZHENPAN_COM_Proc(); //回原点处理 QDCT_X_ReSetOrigin(); //推送旋转 QDCT_TSXZLT_COM_Proc(); //装拉头处理 QDCT_ZLT_COM_Proc(); } //拉带、穿链、切断 QDCT_QDLL_Action(); QDCT_cMotor_Action(); QDCT_AutoStepAction(); //一周切断 QDCT_FirstQDAction(); //一键清料 QDCT_CLEARHDLT_Proc(); } #endif