#include "global.h" #if FU_XIAO_WEI_MACHINE==1 void Kai_QueDuan_AlarmProtect(void); void Kai_QueDuan_ManualAction(void); void Kai_QueDuan_AutoAction(void); void Kai_QueDuan_StepCheckStart(void); void Kai_QueDuan_XiaQue(void); void Kai_QueDuan_SecondXiaQue(void); void Kai_QueDuan_Motor(void); void Kai_QueDuan_YuanDianAction(void); void Kai_QueDuan_ExtiActionX31(void); void Kai_QueDuan_BingLian(void); void Kai_QueDuan_TuiLianAction(void); void Kai_StopCode(void); void Kai_Motor_SZ(unsigned char En); void Kai_QueDuan_CheckLength(void); void Kai_QueDuan_YMotor(void); void Kai_QueDuan_ZMotor(void); //夹子松带返回长链电机处 void Kai_QueDuan_ReBack(void); short *KAI_QD_length_buffer; void KAI_QueDuan_ExtiActionX31(void) { // cCheckLianFlg = 1; } void KAI_QD_SetAlarmCode(unsigned alarm_code) { SetAlarmCode(KAI_QD_ALARM_ADDR,alarm_code); bAlarmStop = 1; } void Kai_StopCode(void) { switch(KAI_QD_StopStep) { case 1: KAI_QD_StopStep=2; if(X_DRV) { AxisChangeSpeedDirect(X_AXIS,GetCurSpeed(X_AXIS) * 2/3); AxisDecStop(X_AXIS); } if(Y_DRV) { AxisChangeSpeedDirect(Y_AXIS,GetCurSpeed(Y_AXIS) * 2/3); AxisDecStop(Y_AXIS); } break; case 2: if((!X_DRV || (dwXRealPos < 10)) && (!Y_DRV || (GetCurSpeed(Y_AXIS) < 3000))) { KAI_QD_StopCodeDelay=dwTickCount+350; KAI_QD_StopStep = 3; AxisEgmStop(X_AXIS); AxisEgmStop(Y_AXIS); } break; case 3: if(dwTickCount >= KAI_QD_StopCodeDelay) { if(!KAI_QD_cSTOPONE) { KAI_QD_StopStep=0; } else { KAI_QD_SetAlarmCode(KAI_QD_PARAM_ANQUANMEN_ALARM); KAI_QD_StopStep=0; KAI_QD_cSTOPONE=0; } AxisEgmStop(X_AXIS); AxisEgmStop(Y_AXIS); SetEn(X_AXIS, MOTOR_DISEN); //电机松轴 SetEn(Y_AXIS, MOTOR_DISEN); //电机松轴 } break; } } //电机松轴 void Kai_Motor_SZ(unsigned char En) { #if 0 if(En) //使能 { if(KAI_QD_PARAM_MOTOR_SELECT) KAI_QD_SZ_OUT = 1; //伺服电机 else KAI_QD_SZ_OUT = 0; //步进电机 } else //松轴 { if(KAI_QD_PARAM_MOTOR_SELECT) KAI_QD_SZ_OUT = 0; //伺服电机 else KAI_QD_SZ_OUT = 1; //步进电机 } #endif } void Kai_QueDuan_InitAction(void) { float KAI_QD_length_buff,pulse_buff; //X轴 KAI_QD_length_buff = KAI_QD_PARAM_CYCLE_LENGTH; pulse_buff = KAI_QD_PARAM_CYCLE_PULSE; XGearRatio = pulse_buff/KAI_QD_length_buff; //Y轴长链压轮 KAI_QD_length_buff = KAI_QD_PARAM_YMOTOR_CYCLE_LENGTH; pulse_buff = 2000; YGearRatio = pulse_buff/KAI_QD_length_buff; //Z轴丝杆 KAI_QD_length_buff = KAI_QD_PARAM_ECMOTOR_CYCLE_LENGTH; pulse_buff = 2000; ZGearRatio = pulse_buff/KAI_QD_length_buff; SetEnReverse(X_AXIS, 0); SetEnReverse(Y_AXIS, 0); SetEnReverse(Z_AXIS, 0); SetDirReverse(X_AXIS, 0); SetDirReverse(Y_AXIS, 1); SetDirReverse(Z_AXIS, 1); SetPos(X_AXIS, 0); //启动位置设为0点 SetPos(Y_AXIS, 0); //启动位置设为0点 SetPos(Z_AXIS, 0); //启动位置设为0点 SetEn(X_AXIS, MOTOR_DISEN); SetEn(Y_AXIS, MOTOR_DISEN); SetEn(Z_AXIS, MOTOR_EN); KAI_QD_TMSZ_OUT = 1; KAI_QD_ORIGIN_Over = 0; KAI_QD_ZMotorStep = 1; //回零点 SetAlarmCode(KAI_QD_ALARM_ADDR,0); } void Kai_QueDuan_Action(void) { // InputPinConfig(); Kai_QueDuan_AlarmProtect(); Kai_QueDuan_Motor(); Kai_QueDuan_YMotor(); Kai_QueDuan_ZMotor(); Kai_StopCode(); Kai_QueDuan_XiaQue(); Kai_QueDuan_ManualAction(); Kai_QueDuan_TuiLianAction(); Kai_QueDuan_BingLian(); Kai_QueDuan_SecondXiaQue(); Kai_QueDuan_AutoAction(); Kai_QueDuan_CheckLength(); Kai_QueDuan_ReBack(); Kai_QueDuan_StepCheckStart(); // 调用脚踏开关检测程序 //温度控制 KAI_QD_KAI_WD_OUT = KAI_QD_CLTD_KAI_WD_IN && (!KAI_QD_PARAM_ECQ_DJ_SELECT || (!KAI_QD_PARAM_YCQ_DJ_SELECT && KAI_QD_PARAM_ECQ_MODE)); KAI_QD_BI_WD_OUT = KAI_QD_CLTD_BI_WD_IN && (KAI_QD_PARAM_ECQ_DJ_SELECT || (KAI_QD_PARAM_YCQ_DJ_SELECT && KAI_QD_PARAM_ECQ_MODE)); //运行 // OutputPinConfig(); } //手动动作 void Kai_QueDuan_ManualAction(void) { #if 1 if(KAI_QD_PARAM_TABLE_MODE) { KAI_QD_TABLE_VAVLE=0; } if(KAI_QD_PARAM_ECQ_MODE) { } if(KAI_QD_LDHXW_IN) { AxisEgmStop(X_AXIS); KAI_QD_SetAlarmCode(KAI_QD_LDHXW_ALARM); } if(bRunning == 0) { if(user_datas[KAI_QD_ALARM_ADDR] != 0) KAI_QD_ALR_STATE = 1; else KAI_QD_ALR_STATE = 0; KAI_QD_RUN_STATE = 0; //运行灯关 KAI_QD_cGoLimitEn = 0; if(KAI_QD_bClearTotal) //切断计数清零 { KAI_QD_bClearTotal = 0; ClrcToTal(KAI_QD_TOTAL_ADDR); } if(KAI_QD_bClearNowTotal) { KAI_QD_bClearNowTotal = 0; KAI_QD_PARAM_NOW_CNT = 0; } if(KAI_QD_bXiaQie) { KAI_QD_bXiaQie = 0; if((KAI_QD_XiaQieStep == 0) && !KAI_QD_TL_VAVLE) { KAI_QD_YD_VAVLE=1; KAI_QD_XiaQieStep = 1; } } if(KAI_QD_bQianDianDW) { KAI_QD_bQianDianDW = 0; if(KAI_QD_MotorStep == 0) { KAI_QD_MotorStep = 61; KAI_QD_cZipCnt = 0; SetEn(X_AXIS, MOTOR_EN); //电机锁轴 KAI_QD_MotorDelay = dwTickCount + 150; } } if(KAI_QD_bTL) { KAI_QD_bTL = 0; if(KAI_QD_TL_VAVLE) { KAI_QD_TL_VAVLE = 0; } else if(!KAI_QD_GZ_VAVLE && !KAI_QD_SM_VAVLE) { KAI_QD_TL_VAVLE = ~KAI_QD_TL_VAVLE; } } if(KAI_QD_XiaQieStep == 0) { if(KAI_QD_PARAM_ECTMACHINE_MODE) { if(KAI_QD_ZMotorStep == 0) { if(KAI_QD_bFIRST_POS) { KAI_QD_bFIRST_POS = 0; KAI_QD_ZMotorStep = 10; } else if(KAI_QD_bSECOND_POS) { KAI_QD_bSECOND_POS = 0; KAI_QD_ZMotorStep = 20; } } } else { KAI_QD_bFIRST_POS = 0; KAI_QD_bSECOND_POS = 0; } } if(KAI_QD_bYD) { KAI_QD_bYD = 0; KAI_QD_YD_VAVLE = ~KAI_QD_YD_VAVLE; } if(KAI_QD_bGZ) { KAI_QD_bGZ = 0; KAI_QD_GZ_VAVLE = ~KAI_QD_GZ_VAVLE; } if(KAI_QD_bJD) { KAI_QD_bJD = 0; KAI_QD_JD_VAVLE = ~KAI_QD_JD_VAVLE; } if(KAI_QD_bXM) { KAI_QD_bXM = 0; if(KAI_QD_XM_VAVLE) { KAI_QD_XM_VAVLE = 0; } else { KAI_QD_XM_VAVLE = 1; } } if(KAI_QD_bKKD) //开口刀 { KAI_QD_bKKD = 0; if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN) KAI_QD_KAI_XM_VAVLE =~KAI_QD_KAI_XM_VAVLE; } if(KAI_QD_bHBD) //花边刀 { KAI_QD_bHBD = 0; if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN) KAI_QD_BI_XM_VAVLE = ~KAI_QD_BI_XM_VAVLE; } if(KAI_QD_bECT) { KAI_QD_bECT = 0; KAI_QD_ECT_VAVLE = ~KAI_QD_ECT_VAVLE; } if(KAI_QD_bDL) { KAI_QD_bDL = 0; // KAI_QD_DL_VAVLE = ~KAI_QD_DL_VAVLE; } if(KAI_QD_bCHUIQI) { KAI_QD_bCHUIQI = 0; KAI_QD_ECQ_CUIQI_VAVLE = 1; KAI_QD_CHUIQIDelay = dwTickCount+KAI_QD_PARAM_CHUIQI_TIME; } if(KAI_QD_bJL) { KAI_QD_bJL = 0; // KAI_QD_JIALIAN_VAVLE = ~KAI_QD_JIALIAN_VAVLE; } if(KAI_QD_bSM) { KAI_QD_bSM = 0; if(KAI_QD_SM_VAVLE) { KAI_QD_CS_OUT = 0; KAI_QD_SM_VAVLE = 0; } else if(!KAI_QD_TL_VAVLE) KAI_QD_SM_VAVLE = 1; } //推方块 if(KAI_QD_bTFK) { KAI_QD_bTFK = 0; if(KAI_QD_TFK_VAVLE) { KAI_QD_YD_VAVLE=0; KAI_QD_TFK_VAVLE=0; } else { KAI_QD_YD_VAVLE=1; KAI_QD_TFK_VAVLE=1; } } if(KAI_QD_bSD) { KAI_QD_bSD = 0; KAI_QD_SD_VAVLE = ~KAI_QD_SD_VAVLE; } if(KAI_QD_bZY) { KAI_QD_bZY = 0; if(KAI_QD_SM_VAVLE && !KAI_QD_CS_OUT) KAI_QD_CS_OUT =1; else if(KAI_QD_CS_OUT) KAI_QD_CS_OUT=0; } if(KAI_QD_bDGLG) { KAI_QD_bDGLG = 0; KAI_QD_DGLG_VAVLE = ~KAI_QD_DGLG_VAVLE; } //台面电机 if(KAI_QD_bTB) { KAI_QD_bTB = 0; KAI_QD_TABLE_VAVLE = ~KAI_QD_TABLE_VAVLE; KAI_QD_TMFZ_OUT = 0; KAI_QD_TMSZ_OUT = ~KAI_QD_TABLE_VAVLE; } //台面电机反转 if(KAI_QD_bTBFZ) { KAI_QD_bTB = 0; KAI_QD_TABLE_VAVLE = 0; KAI_QD_TMFZ_OUT = ~KAI_QD_TMFZ_OUT; KAI_QD_TMSZ_OUT = ~KAI_QD_TMFZ_OUT; } if(KAI_QD_bTestCS) { KAI_QD_bTestCS = 0; KAI_QD_CS_OUT = 1; KAI_QD_CSDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; } if(KAI_QD_bBL)//合链 { KAI_QD_bBL = 0; KAI_QD_BL_VAVLE = ~KAI_QD_BL_VAVLE; } if(KAI_QD_bHL) //护链,双开用 { KAI_QD_bHL = 0; // KAI_QD_HL_VAVLE = ~KAI_QD_HL_VAVLE; } if(KAI_QD_bYX) { KAI_QD_bYX = 0; // KAI_QD_YX_VAVLE = ~KAI_QD_YX_VAVLE; } /* if(KAI_QD_XiaQieStep == 0) { if(dwTickCount >= KAI_QD_CSDelay) KAI_QD_CS_OUT = 0; } */ if(KAI_QD_bCLTD_JT) //长链拉带进退电磁阀Y20 { KAI_QD_bCLTD_JT= 0; if(KAI_QD_CLTD_JT_VAVLE) KAI_QD_CLTD_JT_VAVLE = 0; else if(!KAI_QD_QIAN_LIMIT_IN) KAI_QD_CLTD_JT_VAVLE = 1; } if(KAI_QD_bCLTD_YL) //长链拉带压轮电磁阀Y21 { KAI_QD_bCLTD_YL= 0; KAI_QD_CLTD_YL_VAVLE = ~KAI_QD_CLTD_YL_VAVLE; } //电机控制 if(KAI_QD_bGoMotor) { if(!KAI_QD_QIAN_LIMIT_IN) { SetEn(X_AXIS, MOTOR_EN);//电机锁轴 if(KAI_QD_PARAM_ECTMACHINE_MODE) { if(!KAI_QD_PARAM_ECTGY_MODE) { if(!KAI_QD_ZJL_ORIGIN_IN)SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_ZJLYW_ALARM); // KAI_QD_SetAlarmCode(KAI_QD_ZJLYW_ALARM); else if(!KAI_QD_YJL_ORIGIN_IN)SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_YJLYW_ALARM); // KAI_QD_SetAlarmCode(KAI_QD_YJLYW_ALARM); else if(!X_DRV) { // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } } else if(!X_DRV) { // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } } else if(!X_DRV) { // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } } else if(!X_DRV) { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_QIAN_LIMIT_HAND_ALARM); } } if(KAI_QD_bBackMotor && !KAI_QD_LDHXW_IN) //后退限位已经取消 { SetEn(X_AXIS, MOTOR_EN); //电机锁轴 if(!X_DRV) // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } if(!KAI_QD_bGoMotor && !KAI_QD_bBackMotor && (KAI_QD_MotorStep == 0) && (KAI_QD_StopStep == 0)) { if(X_DRV)AxisEgmStop(X_AXIS); } if(KAI_QD_QIAN_LIMIT_IN && (KAI_QD_MotorStep == 0) && !KAI_QD_bBackMotor &&(KAI_QD_AutoStep == 0)) { if(X_DRV) { KAI_QD_bGoMotor = 0; AxisEgmStop(X_AXIS); } } if(KAI_QD_bCLTD_P) { SetEn(Y_AXIS, MOTOR_EN); //电机锁轴 if(!Y_DRV) AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } if(KAI_QD_bCLTD_N) { SetEn(Y_AXIS, MOTOR_EN); //电机锁轴 if(!Y_DRV) AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12); } if((KAI_QD_YMotorStep == 0) && !KAI_QD_bCLTD_P && !KAI_QD_bCLTD_N && (KAI_QD_StopStep == 0)) { if(Y_DRV)AxisEgmStop(Y_AXIS); } } #endif } void Kai_QueDuan_AlarmProtect(void) { #if 1 dwXRealPos = GetPos(X_AXIS); dwYRealPos = GetPos(Y_AXIS); dwZRealPos = GetPos(Z_AXIS); if(!bRunning) { ; } else { if(KAI_QD_PARAM_RUN_LENGTH < 5000) KAI_QD_PARAM_RUN_LENGTH= 5000; if((dwXRealPos > KAI_QD_PARAM_RUN_LENGTH) && (KAI_QD_cGoLimitEn != 0)) //第一条手动时不保护 { KAI_QD_JD_VAVLE = 0; KAI_QD_StopStep=1; KAI_QD_SetAlarmCode(KAI_QD_BACK_ALARM); } } #endif } void Kai_QueDuan_AutoAction(void) { #if 1 if(KAI_QD_cTABLETIME) { if(KAI_QD_cTABLETOTAL) { KAI_QD_cTABLETOTAL=0; if(KAI_QD_PARAM_LIAN_SELECT == 0) KAI_QD_TABLE_VAVLE = 1; KAI_QD_TableDelay=dwTickCount + 2000; } if(dwTickCount >= KAI_QD_TableDelay) { KAI_QD_TABLE_VAVLE = 0; KAI_QD_cTABLETIME = 0; } } if(bRunning) {//台面电机定时关掉 if(!KAI_QD_cTABLETIME) { if(dwTickCount >= KAI_QD_TBDelay) KAI_QD_TABLE_VAVLE = 0; } switch(KAI_QD_AutoStep) { case 1: if((dwTickCount >= KAI_QD_AutoDelay) && ((KAI_QD_PARAM_ECTMACHINE_MODE == 0) || (KAI_QD_ORIGIN_Over && (KAI_QD_ZMotorStep == 0)))) { if(KAI_QD_XiaQieStep==0) KAI_QD_AutoStep = 2; if(KAI_QD_MotorStep == 0 ) { KAI_QD_MotorStep = 61; //前点定位 KAI_QD_MotorDelay = dwTickCount; } KAI_QD_cGoLimitEn = 0; } break; case 2: if((KAI_QD_MotorStep == 0) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))) { if(KAI_QD_PARAM_LIAN_SELECT == 0) KAI_QD_MotorStep = 30; //后拉拖带定位 else KAI_QD_YMotorStep = 30; //长链 KAI_QD_AutoStep = 3; KAI_QD_cGoLimitEn = 1; } break; case 3: //后面两步为延时反转步 if(((KAI_QD_MotorStep == 0) && (KAI_QD_YMotorStep == 0)) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))) { if(KAI_QD_SAFE_IN) { bStop = 1; } else { KAI_QD_XiaQueOver = 0; if(KAI_QD_XiaQieStep == 0) KAI_QD_XiaQieStep = 1; KAI_QD_AutoStep = 4; // KAI_QD_MotorStep = 390; //开口不用反转 } } break; case 4: // 闭口 if(((KAI_QD_XiaQieStep == 0) || KAI_QD_XiaQueOver)) { KAI_QD_XiaQueOver = 0; //拉直要区分长链的短链(0短链,1 长链) if((KAI_QD_PARAM_LIAN_SELECT == 0) && (KAI_QD_PARAM_ECQ_MODE == 0)) { if(KAI_QD_MotorStep == 0) { KAI_QD_MotorStep = 40; //切完后退 } } KAI_QD_AutoStep = 5; } break; case 5: if((KAI_QD_MotorStep == 0)) //不管那种模式,说明松夹已经完成 { if(KAI_QD_NQDJGNUNMBER==0) KAI_QD_AutoStep = 6; else if(KAI_QD_NQDJGNUNMBER==1) KAI_QD_SetAlarmCode(KAI_QD_LENGTH_LONG_ALARM); else if(KAI_QD_NQDJGNUNMBER==2) KAI_QD_SetAlarmCode(KAI_QD_LENGTH_SHORT_ALARM); } break; case 6: if(((KAI_QD_MotorStep == 0)) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))) { KAI_QD_cZipCnt++; KAI_QD_PARAM_NOW_CNT++; KAI_QD_cTableCnt++; AddToTal(KAI_QD_TOTAL_ADDR); AddToTal(KAI_QD_WORKTOTAL_ADDR); CalProSP(KAI_QD_PROSPEED_ADDR); if(KAI_QD_cTableCnt >= KAI_QD_PARAM_TABLE_NUM) { KAI_QD_cTableCnt = 0; if(KAI_QD_PARAM_LIAN_SELECT == 0) KAI_QD_TABLE_VAVLE = 1; KAI_QD_TBDelay = dwTickCount + KAI_QD_PARAM_TB_TIME; } if(/*(GetTotal(KAI_QD_TOTAL_ADDR) >= KAI_QD_PARAM_SET_TOTAL) ||*/ SingOneFlg) { /* if((KAI_QD_PARAM_SET_TOTAL == 0) && !SingOneFlg) { KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_CYCLE_DELAY; KAI_QD_AutoStep = 1; } else */ { bRunning = 0; KAI_QD_AutoStep = 0; SingOneFlg = 0; } // if(GetTotal(KAI_QD_TOTAL_ADDR) >= KAI_QD_PARAM_SET_TOTAL) KAI_QD_SetAlarmCode(KAI_QD_TOTAL_ALARM); } else { KAI_QD_AutoStep = 1; if((KAI_QD_PARAM_NOW_CNT >= KAI_QD_PARAM_ZHA_SHU) && (KAI_QD_PARAM_ZHA_SHU > 0)) { KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_ZS_STOP_TIME; KAI_QD_PARAM_NOW_CNT = 0; KAI_QD_cTABLETIME = 1; KAI_QD_cTABLETOTAL= 1; if(KAI_QD_PARAM_ZS_STOP_TIME == 0) { bRunning = 0; KAI_QD_AutoStep = 0; SingOneFlg = 0; KAI_QD_cTABLETIME = 1; KAI_QD_cTABLETOTAL= 1; KAI_QD_SetAlarmCode(KAI_QD_TOTAL_ALARM); } } else { if(!X_DRV) //电机没有停止 KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_CYCLE_DELAY; else KAI_QD_AutoDelay = dwTickCount; } } } break; } } #endif } void Kai_QueDuan_StepCheckStart(void) { #if 1 // 启动 if((KAI_QD_START_IN_UP) || bStart || KAI_QD_bSingle) { bStart = 0; if(!bRunning && (KAI_QD_AutoStep == 0) && KAI_QD_ORIGIN_Over&& (KAI_QD_XiaQieStep == 0)) { if((KAI_QD_XIA_MU_LIMIT_IN) && !KAI_QD_PARAM_XM_ENABLE)KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); else if(KAI_QD_SM_VAVLE)KAI_QD_SetAlarmCode(KAI_QD_SM_ALARM); else { KAI_QD_RUN_STATE = 1; //运行灯开 KAI_QD_TMSZ_OUT = 0; //台面电机锁轴 KAI_QD_ALR_STATE = 0; //警告灯 bRunning = 1; KAI_QD_AutoStep = 1; if(KAI_QD_bSingle) SingOneFlg= 1; KAI_QD_cZipCnt = 0; KAI_QD_cTuiFangKuaiCnt = 0; KAI_QD_cTABLETIME = 0; KAI_QD_cTABLETOTAL= 0; KAI_QD_NQDJGNUNMBER = 0; KAI_QD_CLTD_JT_VAVLE = 0; KAI_QD_CLTD_YL_VAVLE = 0; KAI_QD_ECT_VAVLE=1; KAI_QD_BL_VAVLE = 0; //并链关 KAI_QD_DGLG_VAVLE = 0; //顶过链杆关 SetAlarmCode(KAI_QD_ALARM_ADDR,0); SetEn(X_AXIS, MOTOR_EN); //电机锁轴 SetEn(Y_AXIS, MOTOR_EN); //电机锁轴 KAI_QD_AutoDelay = dwTickCount + 400; if((KAI_QD_PARAM_ECTMACHINE_MODE)) { //切二次 KAI_QD_ZMotorStep = 20; //移动到第二次切位置 } /* if(KAI_QD_PARAM_ECTMACHINE_MODE) { if(KAI_QD_ECTD_ORIGIN_IN) KAI_QD_SetAlarmCode(KAI_QD_ECTDYW_ALARM); if(!KAI_QD_PARAM_ECTGY_MODE) { if(!KAI_QD_HL_ORIGIN)KAI_QD_SetAlarmCode(KAI_QD_DLYW_ALARM); else if(!KAI_QD_ZJL_ORIGIN_IN) KAI_QD_SetAlarmCode(KAI_QD_ZJLYW_ALARM); else if(!KAI_QD_YJL_ORIGIN_IN) KAI_QD_SetAlarmCode(KAI_QD_YJLYW_ALARM); } } */ } } KAI_QD_bSingle = 0; } //停止 if(KAI_QD_STOP_IN_UP || bStop) { bStop = 0; if(bRunning) { KAI_QD_AutoDelay = dwTickCount; KAI_QD_MotorDelay = dwTickCount; KAI_QD_YMotorDelay = dwTickCount; KAI_QD_XiaQieDelay = dwTickCount; KAI_QD_KaDaiDelay = dwTickCount; KAI_QD_CSDelay = dwTickCount; KAI_QD_TBDelay = dwTickCount; KAI_QD_TFKDelay = dwTickCount; KAI_QD_TLDelay = dwTickCount; dwTickCount = KAI_QD_TBDelay; KAI_QD_NQDJGNUNMBER = 0; KAI_QD_SecondXiaQueStep=0; KAI_QD_cTABLETIME = 0; KAI_QD_cTABLETOTAL= 0; SingOneFlg = 0; KAI_QD_JD_VAVLE = 0; KAI_QD_SM_VAVLE = 0; KAI_QD_XM_VAVLE = 0; KAI_QD_YD_VAVLE = 0; KAI_QD_TFK_VAVLE= 0; KAI_QD_TL_VAVLE = 0; // KAI_QD_HL_VAVLE = 0; KAI_QD_CS_OUT = 0; KAI_QD_XiaQieStep = 0; KAI_QD_MotorStep = 0; KAI_QD_YMotorStep = 0; KAI_QD_TuiLianStep = 0; KAI_QD_GZ_VAVLE = 0; KAI_QD_TABLE_VAVLE = 0; KAI_QD_TMFZ_OUT = 0; KAI_QD_TMSZ_OUT = 1; KAI_QD_DGLG_VAVLE = 0; //顶过链杆关 if((KAI_QD_StopStep == 0) && (X_DRV || Y_DRV)) KAI_QD_StopStep = 1; //AxisDecStop(X_AXIS); KAI_QD_BinLianStep = 0; KAI_QD_BL_VAVLE = 0; user_datas[121] = 0; user_datas[122] = 0; // KAI_QD_CLTD_JT_VAVLE = 0; KAI_QD_CLTD_YL_VAVLE = 0; KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀 KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀 SetAlarmCode(KAI_QD_ALARM_ADDR,0); // AxisEgmStop(Z_AXIS); } else { KAI_QD_AutoDelay = dwTickCount; KAI_QD_MotorDelay = dwTickCount; KAI_QD_XiaQieDelay = dwTickCount; KAI_QD_KaDaiDelay = dwTickCount; KAI_QD_CSDelay = dwTickCount; KAI_QD_TBDelay = dwTickCount; KAI_QD_TFKDelay = dwTickCount; KAI_QD_TLDelay = dwTickCount; dwTickCount = KAI_QD_TBDelay; KAI_QD_NQDJGNUNMBER = 0; SingOneFlg = 0; KAI_QD_JD_VAVLE = 0; KAI_QD_SM_VAVLE = 0; KAI_QD_XM_VAVLE = 0; KAI_QD_XM_VAVLE = 0; KAI_QD_YD_VAVLE = 0; KAI_QD_TFK_VAVLE= 0; if(!KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=1; else KAI_QD_ECT_VAVLE=0; // KAI_QD_YX_VAVLE = 0; // KAI_QD_HL_VAVLE = 0; KAI_QD_TL_VAVLE = 0; KAI_QD_DGLG_VAVLE = 0; //顶过链杆关 KAI_QD_GZ_VAVLE = 0; KAI_QD_SD_VAVLE=0; KAI_QD_CS_OUT = 0; KAI_QD_XiaQieStep = 0; KAI_QD_MotorStep = 0; KAI_QD_TuiLianStep = 0; KAI_QD_TABLE_VAVLE = 0; KAI_QD_cTABLETIME = 0; KAI_QD_TMFZ_OUT = 0; KAI_QD_TMSZ_OUT = 1; KAI_QD_cTABLETOTAL= 0; if((KAI_QD_StopStep == 0)) { KAI_QD_cSTOPONE = 0; AxisEgmStop(X_AXIS); SetEn(X_AXIS, MOTOR_DISEN); //电机松轴 AxisEgmStop(Y_AXIS); SetEn(Y_AXIS, MOTOR_DISEN); //电机松轴 } KAI_QD_SecondXiaQueStep=0; KAI_QD_BinLianStep = 0; KAI_QD_BL_VAVLE = 0; KAI_QD_CLTD_JT_VAVLE = 0; KAI_QD_CLTD_YL_VAVLE = 0; SetAlarmCode(KAI_QD_ALARM_ADDR,0); // AxisEgmStop(Z_AXIS); KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀 KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀 if(KAI_QD_PARAM_ECTMACHINE_MODE) //二次切选择的话先移动到第一刀 { if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ZMotorStep = 10; else KAI_QD_ZMotorStep = 20; } } bRunning = 0; KAI_QD_XiaQieStep = 0; KAI_QD_AutoStep = 0; KAI_QD_MotorStep = 0; KAI_QD_TuiLianStep = 0; // KAI_QD_ZMotorStep = 0; } if(bAlarmStop) { bAlarmStop = 0; KAI_QD_XiaQieStep = 0; KAI_QD_AutoStep = 0; KAI_QD_MotorStep = 0; KAI_QD_StopStep=0; KAI_QD_TuiLianStep = 0; KAI_QD_NQDJGNUNMBER = 0; KAI_QD_XiaQieStep = 0; KAI_QD_MotorStep = 0; KAI_QD_TuiLianStep = 0; KAI_QD_SecondXiaQueStep=0; KAI_QD_AutoDelay = dwTickCount; KAI_QD_MotorDelay = dwTickCount; KAI_QD_XiaQieDelay = dwTickCount; KAI_QD_KaDaiDelay = dwTickCount; KAI_QD_CSDelay = dwTickCount; KAI_QD_TBDelay = dwTickCount; KAI_QD_TFKDelay = dwTickCount; KAI_QD_TLDelay = dwTickCount; SingOneFlg = 0; bRunning = 0; KAI_QD_StopStep=1; // AxisEgmStop(X_AXIS); // AxisEgmStop(X_AXIS); dwTickCount = KAI_QD_TBDelay; KAI_QD_TABLE_VAVLE = 0; KAI_QD_JD_VAVLE=0; KAI_QD_GZ_VAVLE=0; } #endif } //记忆长度模式误差检测 void Kai_QueDuan_CheckLength(void) { static long start_dist; #if 1 switch(KAI_QD_CheckLengthStep) { case 0:break; case 1: start_dist = dwXRealPos; KAI_QD_dwWorkLength = 0; KAI_QD_CheckLengthStep = 2; break; case 2: if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_dwWorkLength = dwXRealPos - start_dist; } break; } #endif } void Kai_QueDuan_BingLian(void) { #if 1 static long bl_pos_buff; switch(KAI_QD_BinLianStep) { case 0:break; case 1: bl_pos_buff = dwXRealPos; KAI_QD_BinLianStep = 2; break; case 2: if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH) { KAI_QD_BL_VAVLE = 1; KAI_QD_BinLianStep = 3; } break; case 3://有过链检测 if(KAI_QD_GUO_LIAN_IN_DW || ((dwXRealPos - bl_pos_buff) >= (KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_HL_DELAY_BACK))) { KAI_QD_BL_VAVLE = 0; KAI_QD_BinLianStep = 0; } break; case 10: bl_pos_buff = dwXRealPos; KAI_QD_BinLianStep = 11; break; case 11: if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH) { KAI_QD_BL_VAVLE = 1; KAI_QD_BinLianStep = 12; } break; case 12://有过链检测 if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_BL_VAVLE = 0; KAI_QD_BinLianStep = 0; } break; //这是长链模式的合链 case 20: bl_pos_buff = dwXRealPos; KAI_QD_BinLianStep = 21; break; case 21: if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH) { KAI_QD_BL_VAVLE = 1; KAI_QD_BinLianStep = 22; } break; case 22://有过链检测 if((KAI_QD_GUO_LIAN_IN_DW && ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH - 1200))) || ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH + 300) >= (KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_HL_DELAY_BACK))) { KAI_QD_BL_VAVLE = 0; KAI_QD_BinLianStep = 0; } break; default: break; } #endif } //电机动作 //作闭口专用程序,也有四种模式 //不带过链感应长度输入电机长度 闭口有勾针到位 ,夹子电机 void Kai_QueDuan_Motor(void) { static long KAI_QD_jz_buff; unsigned short ch,kk; #if 1 user_datas[121] = dwXRealPos; user_datas[122] = dwYRealPos; user_datas[123] = dwZRealPos; user_datas[124] = KAI_QD_MotorStep; user_datas[125] = KAI_QD_ReBack_Step;//KAI_QD_YMotorStep; user_datas[126] = KAI_QD_XiaQieStep; user_datas[127] = KAI_QD_AutoStep;//KAI_QD_gou_zhen_buff; user_datas[128] = KAI_QD_SecondXiaQueStep;//; switch(KAI_QD_MotorStep) { case 30: switch(KAI_QD_PARAM_BACK_MODE) //开口分四种模式 { case 0: //单数控模式 KAI_QD_MotorStep = 310; //每种模式留20步 KAI_QD_DGLG_VAVLE = 1; //顶过链杆关 break; case 1://单感应模式 KAI_QD_MotorStep = 330; //每种模式留20步 break; case 2: //先感应后数控模式+检测 KAI_QD_MotorStep = 350; //每种模式留20步 break; default: //数控模式+过链检测长度 KAI_QD_MotorStep = 370; //每种模式留20步 break; } SetPos(X_AXIS, 0); //开始拖带处为0点 KAI_QD_MotorDelay = dwTickCount + 0; KAI_QD_YD_VAVLE = 0; //已经定位原点后好,定位到第一刀 if((KAI_QD_PARAM_ECTMACHINE_MODE) && KAI_QD_ORIGIN_Over) { //切二次 if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ZMotorStep = 10; //移动到第一次切位置 else KAI_QD_ZMotorStep = 20; //移动到第二次切位置 } break; //310步到315步为数控模式 case 310: KAI_QD_MotorStep = 311; if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 1; //并链起动 break; case 311: if(dwTickCount >= KAI_QD_MotorDelay) { KAI_QD_length_buffer = (short *)(&KAI_QD_PARAM_OFFSET_LENGTH); if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=0; //自动匹配减速时间 KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_BACK_SPEED/500; //两段速度移动距离 AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer), KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH); KAI_QD_MotorDelay = dwTickCount + MOTOR_ALARM_TIME; KAI_QD_MotorStep = 312; } break; case 312: //电机走动后再退送链,减少起动拉链的阻力 if(dwXRealPos >= 50) { KAI_QD_TL_VAVLE = 0; KAI_QD_TFK_VAVLE = 0; KAI_QD_SD_VAVLE = 0; } //提前压带 if(dwXRealPos >((KAI_QD_PARAM_ZIPPER_LENGTH+ (*KAI_QD_length_buffer))-KAI_QD_PARAM_YDCNC_LENGTH)) { KAI_QD_YD_VAVLE=1; } if(dwXRealPos >= (KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer) - KAI_QD_PARAM_SY_LENGTH)) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } //勾针提前输出 if(!KAI_QD_GZ_VAVLE && ((dwXRealPos + KAI_QD_PARAM_GOUZHEN_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)))) { KAI_QD_GZ_VAVLE = 1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } if((dwXRealPos) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer) - KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH)) //- (*KAI_QD_length_buffer) - (KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH + PulseToPos(X_AXIS,MV_Cal_Dec_pulse(KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_DCC))))) { KAI_QD_MotorDelay = dwTickCount + 1500; //钩针未到位延时警告 KAI_QD_MotorStep = 313; } break; case 313: //数控提前上勾针 if((dwXRealPos + KAI_QD_PARAM_YDCNC_LENGTH) >= ((KAI_QD_PARAM_ZIPPER_LENGTH+ (*KAI_QD_length_buffer)))) { KAI_QD_YD_VAVLE=1; } if((dwXRealPos + KAI_QD_PARAM_SY_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer))) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } //勾针提前输出 if(!KAI_QD_GZ_VAVLE && ((dwXRealPos + KAI_QD_PARAM_GOUZHEN_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)))) { KAI_QD_GZ_VAVLE = 1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } if(KAI_QD_GOUZHEN_IN || !X_DRV) { AxisEgmStop(X_AXIS); KAI_QD_MotorDelay = dwTickCount + 3; KAI_QD_YD_VAVLE = 1; KAI_QD_GZ_VAVLE = 1; KAI_QD_MotorStep = 314; KAI_QD_BL_VAVLE = 0; //停止时并链一定要打开 if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } break; case 314: if(!X_DRV && (dwTickCount >= KAI_QD_MotorDelay)) { KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_YD_VAVLE = 1;//压带 KAI_QD_SD_VAVLE=1; KAI_QD_MotorStep = 315; } break; case 315: if(KAI_QD_cZipCnt == 0) //第一条把误差到正负9MM { ch = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-90; kk = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)+90; } else { if(KAI_QD_PARAM_BACK_MODE == 2) //纯数控模式 { ch = KAI_QD_gou_zhen_buff - KAI_QD_PARAM_SKCDWC_LENGTH; kk = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_SKCDWC_LENGTH; } else { ch = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-KAI_QD_PARAM_SKCDWC_LENGTH; kk = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)+KAI_QD_PARAM_SKCDWC_LENGTH; } } if(KAI_QD_PARAM_BACK_MODE == 2) //先感应后数控模式+检测 只能检测过链的位置 { if(((KAI_QD_dwWorkLength) < (ch))) //拉链变短 { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM); if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else if((KAI_QD_dwWorkLength > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50))) { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM); if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else { KAI_QD_MotorStep = 0;//390; //延时反转步 } } else { if(((dwXRealPos) < (ch))) //拉链变短 { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM); if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else if((dwXRealPos > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50))) { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM); if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else { KAI_QD_MotorStep = 0;//390; //延时反转步 } } break; //330步到349步单感应模式 case 330: KAI_QD_MotorStep = 331; user_datas[127] = 0; break; case 331: if(dwTickCount >= KAI_QD_MotorDelay) { KAI_QD_length_buffer = (short *)(&KAI_QD_PARAM_OFFSET_LENGTH); if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=0; KAI_QD_MotorStep = 332; if(KAI_QD_cZipCnt < 2) { if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 10; //并链起动 //第一条都是过链感应,后拉速度减半//原来KAI_QD_PARAM_CHECK_BACK_HSPEED/2 // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,15,20); // 轴 第一段速度 第一段长度 第二段速度 第二段长度 方向 // AxisMoveTwoPos(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH,KAI_QD_DIR_P); } else { KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_HSPEED/500; if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 1; //并链起动 //因为每条都是过链感应,所以直接运行检测模式后拉速度 // X轴 运行速度 启动速度 加速度 减速度 // AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,KAI_QD_PARAM_ACC,80); AxisMovePosAccDecNotStop(X_AXIS,KAI_QD_PARAM_CHECK_BACK_HSPEED,KAI_QD_PARAM_ZIPPER_LENGTH , KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH + 500); } } break; case 332: //电机走动后再退送链,减少起动拉链的阻力 if(dwXRealPos >= 50) { KAI_QD_TL_VAVLE = 0; KAI_QD_TFK_VAVLE = 0; KAI_QD_SD_VAVLE = 0; KAI_QD_MotorStep = 333; //到检测定位 } break; case 333: if(KAI_QD_cZipCnt > 1) //第三条开始数控降速 { if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } if(KAI_QD_GUO_LIAN_IN) //重新到空位上 { KAI_QD_MotorStep = 334; //到检测定位 if(!KAI_QD_PARAM_LTJC_MODE) //有拉头模式 KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM; 防抖时间 else//无拉头模式 KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM; } } else //第一条工作 { KAI_QD_GZ_VAVLE = 0; if(KAI_QD_GUO_LIAN_IN_UP) { //第一条,速度比较慢防拦时间可以不要 // if(!KAI_QD_PARAM_LTJC_MODE) // KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM; // else KAI_QD_MotorDelay = dwTickCount + 2;//KAI_QD_PARAM_DELAY_XM; KAI_QD_MotorStep = 334; } } break; case 334: //此步为前两条运行 if(KAI_QD_cZipCnt>1) { if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } } if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_gou_zhen_buff = dwXRealPos; } if(dwTickCount >= KAI_QD_MotorDelay) { if(KAI_QD_GUO_LIAN_IN) { if(KAI_QD_cZipCnt < 2) //前面两条速度不高,可以立即降速 { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5); } else//变速 { if(!KAI_QD_PARAM_LTJC_MODE) //有拉头模式 { KAI_QD_DCC_TIME_BL = 10+GetCurSpeed(X_AXIS)/500; AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5,25,KAI_QD_DCC_TIME_BL); } else { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5); } } KAI_QD_MotorStep = 335; } } else { if(!KAI_QD_GUO_LIAN_IN) { KAI_QD_MotorStep = 333; } } break; case 335: if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度 { KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_MotorStep = 336; KAI_QD_DCC_TIME_BL = 15;//GetCurSpeed(X_AXIS)/500; // AxisContinueMoveChangeSpeed(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,1000,25,15); AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,1000,15,15); // AxisMovePosAccDecNotStop(X_AXIS,GetCurSpeed(X_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(X_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,50); } if(KAI_QD_cZipCnt > 1) //第三条开始要长度误差 { if(dwXRealPos >= (KAI_QD_length_buff + KAI_QD_PARAM_ERROR_LENGTH)) { KAI_QD_SetAlarmCode(KAI_QD_LENGTH_LONG_ALARM); } if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } } break; case 336: if(KAI_QD_cZipCnt>1) { if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH) { if(KAI_QD_LTGY_IN_UP) KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM); } } if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_gou_zhen_buff = dwXRealPos; } //在空们都把延时清零 if(KAI_QD_GUO_LIAN_IN) { //在定位过程中又到空位,重新检测定位 KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_GZ_VAVLE = 0; if(!KAI_QD_PARAM_XM_ENABLE) KAI_QD_XM_VAVLE=0; KAI_QD_KAI_XM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 0; AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15); KAI_QD_MotorStep = 335; break; } if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN) { KAI_QD_GZ_VAVLE = 1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } //定位停止 if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN) { AxisEgmStop(X_AXIS); KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_MotorStep = 337; KAI_QD_GZ_VAVLE = 1; KAI_QD_SD_VAVLE=1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } break; case 337: if(KAI_QD_cZipCnt > 1) //长度检测 { ch = KAI_QD_PARAM_ZIPPER_LENGTH; user_datas[127] = ch; if(((dwXRealPos + KAI_QD_PARAM_ERROR_LENGTH) < (ch)) && KAI_QD_PARAM_ERROR_LENGTH) { KAI_QD_NQDJGNUNMBER =1; if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else if((dwXRealPos > (ch + KAI_QD_PARAM_ERROR_LENGTH)) && KAI_QD_PARAM_ERROR_LENGTH)//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50))) { KAI_QD_NQDJGNUNMBER = 2; if(dwTickCount >= KAI_QD_MotorDelay) bAlarmStop = 1; } else { KAI_QD_MotorStep = 338; } } else { if(KAI_QD_cZipCnt == 1) { KAI_QD_length_buff = dwXRealPos; SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度 } KAI_QD_MotorStep = 338; } break; case 338: KAI_QD_MotorStep = 0;//390; // SetDir(X_AXIS, KAI_QD_DIR_N); // if(dwTickCount >= KAI_QD_MotorDelay) // { // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC); // KAI_QD_MotorStep = 0; // } break; //350步到369步先感应后数控 case 350: KAI_QD_MotorStep = 351; break; case 351: if(dwTickCount >= KAI_QD_MotorDelay) { if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=0; KAI_QD_MotorStep = 352; KAI_QD_CheckLengthStep = 0; //第一,二条都是过链感应,测量长度 if(KAI_QD_cZipCnt < 2) { if(KAI_QD_PARAM_BL_ENABLE) //因为长度未知,只能通过过链退合链 KAI_QD_BinLianStep = 10; //并链起动 KAI_QD_DGLG_VAVLE = 0; //顶过链杆关 // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,15,20); } else { if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 1; //并链起动 // KAI_QD_DGLG_VAVLE = 1; //顶过链杆关 KAI_QD_CheckLengthStep = 1; //长度检测,第3条才有对比 //走数控方式,因第二条中已经测量出来拉链长度,可以直接按长度数控方式走 KAI_QD_MotorStep = 311; } } break; case 352: //电机走动后再退送链,减少起动拉链的阻力 //电机走动后再退送链,减少起动拉链的阻力 if(dwXRealPos >= 50) { KAI_QD_TL_VAVLE = 0; KAI_QD_TFK_VAVLE = 0; KAI_QD_SD_VAVLE = 0; KAI_QD_MotorStep = 353; //到检测定位 } break; case 353: if(KAI_QD_GUO_LIAN_IN_DW) //重新到链上 { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED); KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_MotorStep = 355; //到检测定位 } //前两条都按最低速度工作 if(KAI_QD_GUO_LIAN_IN_UP) //空位上 { if(!KAI_QD_PARAM_LTJC_MODE) KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM; else KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM; KAI_QD_MotorStep = 354; } break; case 354: if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_gou_zhen_buff = dwXRealPos; } if(dwTickCount >= KAI_QD_MotorDelay) { if(KAI_QD_GUO_LIAN_IN) { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5); KAI_QD_MotorStep = 355; } } else { if(!KAI_QD_GUO_LIAN_IN) { KAI_QD_MotorStep = 353; } } break; case 355: if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度 { KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_MotorStep = 356; } break; case 356: if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度 { KAI_QD_gou_zhen_buff = dwXRealPos; } //在空们都把延时清零 if(KAI_QD_GUO_LIAN_IN) { //在定位过程中又到空位,重新检测定位 KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_GZ_VAVLE = 0; if(!KAI_QD_PARAM_XM_ENABLE) KAI_QD_XM_VAVLE=0; KAI_QD_KAI_XM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 0; AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15); KAI_QD_MotorStep = 355; break; } if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN) { KAI_QD_GZ_VAVLE = 1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } //定位停止 if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN) { AxisEgmStop(X_AXIS); KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_MotorStep = 357; KAI_QD_GZ_VAVLE = 1; KAI_QD_SD_VAVLE=1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } break; case 357: if(KAI_QD_cZipCnt == 1) { KAI_QD_length_buff = dwXRealPos; SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度 } KAI_QD_MotorStep = 358; break; case 358: KAI_QD_MotorStep = 0; //延时反转步 // SetDir(X_AXIS, KAI_QD_DIR_N); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC); // KAI_QD_MotorStep = 0; break; //370步到389步为先感应后数控 无检测 case 370: KAI_QD_MotorStep = 371; break; case 371: if(dwTickCount >= KAI_QD_MotorDelay) { if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=0; KAI_QD_MotorStep = 372; //第一,二条都是过链感应,测量长度 if(KAI_QD_cZipCnt < 2) { if(KAI_QD_PARAM_BL_ENABLE) //因为长度未知,只能通过过链退合链 KAI_QD_BinLianStep = 10; //并链起动 KAI_QD_DGLG_VAVLE = 0; //顶过链杆关 // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,6000,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,15,12); } else { if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 1; //并链起动 KAI_QD_DGLG_VAVLE = 1; //顶过链杆关 // KAI_QD_CheckLengthStep = 1; //长度检测,第3条才有对比 //走数控方式,因第二条中已经测量出来拉链长度,可以直接按长度数控方式走 KAI_QD_MotorStep = 311; } } break; case 372: //电机走动后再退送链,减少起动拉链的阻力 //电机走动后再退送链,减少起动拉链的阻力 if(dwXRealPos >= 50) { KAI_QD_TL_VAVLE = 0; KAI_QD_TFK_VAVLE = 0; KAI_QD_SD_VAVLE = 0; KAI_QD_MotorStep = 373; //到检测定位 } break; case 373: if(KAI_QD_GUO_LIAN_IN_DW) //重新到链上 { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED); KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_MotorStep = 376; //到检测定位 } //前两条都按最低速度工作 if(KAI_QD_GUO_LIAN_IN_UP) //空位上 { if(!KAI_QD_PARAM_LTJC_MODE) KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM; else KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM; KAI_QD_MotorStep = 374; } break; case 374: if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_gou_zhen_buff = dwXRealPos; } if(dwTickCount >= KAI_QD_MotorDelay) { if(KAI_QD_GUO_LIAN_IN) { AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5); KAI_QD_MotorStep = 375; } } else { if(!KAI_QD_GUO_LIAN_IN) { KAI_QD_MotorStep = 373; } } break; case 375: if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度 { KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_MotorStep = 376; } break; case 376: if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度 { KAI_QD_gou_zhen_buff = dwXRealPos; } //在空们都把延时清零 if(KAI_QD_GUO_LIAN_IN) { //在定位过程中又到空位,重新检测定位 KAI_QD_gou_zhen_buff = dwXRealPos; KAI_QD_GZ_VAVLE = 0; if(!KAI_QD_PARAM_XM_ENABLE) KAI_QD_XM_VAVLE=0; KAI_QD_KAI_XM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 0; AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15); KAI_QD_MotorStep = 375; break; } if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN) { KAI_QD_GZ_VAVLE = 1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } //定位停止 if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN) { AxisEgmStop(X_AXIS); KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_MotorStep = 377; KAI_QD_GZ_VAVLE = 1; KAI_QD_SD_VAVLE=1; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { if(KAI_QD_PARAM_ECQ_MODE) //二次切功能 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //一次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //切刀选择闭口刀 { KAI_QD_BI_XM_VAVLE = 1; } } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; } } break; case 377: if(KAI_QD_cZipCnt == 1) { KAI_QD_length_buff = dwXRealPos; SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度 } KAI_QD_MotorStep = 378; break; case 378: KAI_QD_MotorStep = 0; //延时反转步 // SetDir(X_AXIS, KAI_QD_DIR_N); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC); // KAI_QD_MotorStep = 0; break; //此两步为到位后反转步 case 390: KAI_QD_MotorDelay = dwTickCount + 37; KAI_QD_MotorStep = 391; break; case 391: if(dwTickCount >= KAI_QD_MotorDelay) { AxisMovePosAccDec(X_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00); KAI_QD_MotorStep = 0; } break; case 40: //切完延时后拉带松夹子 if(KAI_QD_PARAM_SJZ_LENGTH == 0) { KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_TDYS_DELAY; KAI_QD_MotorStep = 43; KAI_QD_JD_VAVLE = 0; } else { KAI_QD_jz_buff = dwXRealPos; KAI_QD_MotorStep = 41; } break; case 41: if((KAI_QD_YMotorStep == 0) && (KAI_QD_ReBack_Step == 0)) //在夹子转换时不能退 KAI_QD_GZ_VAVLE=0; AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_CUT_BACK_SPEED,KAI_QD_PARAM_SJZ_LENGTH + KAI_QD_PARAM_BACK_LENGTH,2000,2000,25,25,40); KAI_QD_MotorStep = 42; break; case 42: if(KAI_QD_PARAM_SJZ_LENGTH <= (dwXRealPos - KAI_QD_jz_buff)) KAI_QD_JD_VAVLE = 0; if(!X_DRV) { KAI_QD_MotorStep = 0; } break; case 43: if(dwTickCount >= KAI_QD_MotorDelay) { if((KAI_QD_YMotorStep == 0) && (KAI_QD_ReBack_Step == 0)) //在夹子转换时不能退 KAI_QD_GZ_VAVLE=0; //延时退勾针有助于切断带丝情况 AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_CUT_BACK_SPEED,KAI_QD_PARAM_BACK_LENGTH,2500,2000,15,15,30); KAI_QD_MotorStep = 44; } break; case 44: // 切断完成后拉电机动作 if(!X_DRV) { KAI_QD_MotorStep = 0; KAI_QD_MotorDelay = dwTickCount; } break; case 61: // 前点定位数控模式 KAI_QD_BL_VAVLE = 0;//并链也要打开 if(dwTickCount >= KAI_QD_MotorDelay) { if(!KAI_QD_TL_VAVLE && KAI_QD_cZipCnt && (KAI_QD_TuiLianStep == 0)) //没送链情况下主动送链 { if(!KAI_QD_SHANG_MU_LIMIT_IN) { KAI_QD_TuiLianStep = 1; KAI_QD_MotorStep = 62; } } else KAI_QD_MotorStep = 62; if(KAI_QD_PARAM_LIAN_SELECT) { KAI_QD_CLTD_JT_VAVLE = 0; KAI_QD_CLTD_YL_VAVLE = 0; } KAI_QD_JD_VAVLE = 0; } break; case 62: if((dwTickCount >= KAI_QD_MotorDelay) &&((KAI_QD_PARAM_LIAN_SELECT == 0) || KAI_QD_CLTD_ORIGIN_IN)) { if(KAI_QD_QIAN_LIMIT_IN) { //前点亮的情况下先后退离开信号后再前进定位 ,10公分 AxisMovePosAccDec(X_AXIS,3000,1000,2000,2000,10,10,30); KAI_QD_MotorDelay = dwTickCount + 300; } KAI_QD_MotorStep = 63; } break; case 63: //说明夹子已经离开原点 if(dwTickCount >= KAI_QD_MotorDelay) { if(!KAI_QD_QIAN_LIMIT_IN)// && !KAI_QD_SHANG_MU_LIMIT_IN) { KAI_QD_YD_VAVLE = 1; //在自动情况下安全门 if(KAI_QD_ANQUANMEN_LIMIT_IN && bRunning) { if(dwTickCount >= KAI_QD_ANQUANMEN_Time) { KAI_QD_StopStep=1; KAI_QD_cSTOPONE=1; } } else { KAI_QD_ANQUANMEN_Time = dwTickCount + 100; } if(KAI_QD_cZipCnt > 0) { if(dwXRealPos > (KAI_QD_PARAM_GO_LOW_SPEED_LENGTH)) { //自动匹配减速时间 KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC + KAI_QD_PARAM_GO_HIGH_SPEED/500; AxisMovePosAccDecNotStop(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-dwXRealPos, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL, KAI_QD_PARAM_GO_LOW_SPEED_LENGTH + KAI_QD_PARAM_GO_DW_LENGTH); } else { // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_GO_LOW_SPEED,15,15); // MoveAction_Const_AccDec(X_AXIS, KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED_LENGTH,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC); } } else { // X轴 运行速度 启动速度 加速度 减速度 AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_GO_LOW_SPEED,15,15); // MoveAction_Const_AccDec(X_AXIS, KAI_QD_DIR_N,KAI_QD_PARAM_FIRST_GO_HIGHSPEED,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);// } KAI_QD_MotorDelay = dwTickCount + MOTOR_ALARM_TIME; KAI_QD_MotorStep = 64; KAI_QD_ReBack_Step = 0; } else //后走10公分都没有离开前信号的话,说明信号有故障 { KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM); } } break; case 64: //在自动情况下安全门 if(KAI_QD_ANQUANMEN_LIMIT_IN && bRunning) { if(dwTickCount >= KAI_QD_ANQUANMEN_Time) { KAI_QD_StopStep=1; KAI_QD_cSTOPONE=1; } } else { KAI_QD_ANQUANMEN_Time = dwTickCount + 100; } if(KAI_QD_cZipCnt > 0) { if(KAI_QD_QIAN_LIMIT_IN) //前点限位 { if(KAI_QD_PARAM_GO_DW_LENGTH) { SetPos(X_AXIS, KAI_QD_PARAM_GO_DW_LENGTH); AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,-KAI_QD_PARAM_GO_DW_LENGTH,1200,1000,5,5,00); } else AxisEgmStop(X_AXIS); KAI_QD_MotorStep = 66; } if(dwXRealPos < -800) //小于8公分前感应异常 KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM); } else { if(KAI_QD_QIAN_LIMIT_IN) //前点限位 { if(KAI_QD_PARAM_GO_DW_LENGTH) { SetPos(X_AXIS, KAI_QD_PARAM_GO_DW_LENGTH); AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,-KAI_QD_PARAM_GO_DW_LENGTH,1200,1000,5,5,00); } else AxisEgmStop(X_AXIS); KAI_QD_MotorStep = 66; } //第一次不知道当前位置,只能按轨道长度限位 if(dwXRealPos < -(KAI_QD_PARAM_RUN_LENGTH+800)) KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM); } break; case 66: if(!X_DRV || (dwXRealPos <= 0)) { SetPos(X_AXIS, 0); AxisEgmStop(X_AXIS); KAI_QD_MotorDelay = dwTickCount + 5; KAI_QD_MotorStep = 67; } break; case 67: //等推链完成后, if((dwTickCount >= KAI_QD_MotorDelay) && (KAI_QD_TuiLianStep == 0)) { if(bRunning) { KAI_QD_JD_VAVLE = 1; //夹带 if(KAI_QD_PARAM_JZGY_MODE) { if(KAI_QD_JDQXW_IN) KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_DELAY_BACK; KAI_QD_MotorStep = 68; } else { KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_DELAY_BACK; KAI_QD_MotorStep = 68; } } else KAI_QD_MotorStep = 68; } break; case 68: if(dwTickCount >= KAI_QD_MotorDelay) { KAI_QD_YD_VAVLE = 0; KAI_QD_MotorStep = 0; KAI_QD_MotorDelay = dwTickCount; } break; } #endif } //夹子松带返回长链电机处,只有拉链长度大于一定长度才启用 ,也为切断后拉出拉链用 //辅助Y轴电机动作用 void Kai_QueDuan_ReBack(void) { switch(KAI_QD_ReBack_Step) { case 1: if(KAI_QD_PARAM_LIAN_SELECT) { if(dwYRealPos >= 2500) //到20公分位置启动松带 { KAI_QD_ReBack_Step = 2; KAI_QD_MotorStep = 40; //夹子松开 } } else //短链有二次切情况下才先回到原位 { if(dwXRealPos >= 1000) //到20公分位置启动松带 { KAI_QD_ReBack_Step = 2; KAI_QD_MotorStep = 40; //夹子松开 } } break; case 2: if(KAI_QD_MotorStep == 0) { KAI_QD_ReBack_Step = 3; KAI_QD_ReBackDelay = dwTickCount + 40; } break; case 3: if(dwTickCount >= KAI_QD_ReBackDelay) { KAI_QD_ReBack_Step = 4; //自动匹配减速时间 KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_GO_HIGH_SPEED/500; if(KAI_QD_PARAM_LIAN_SELECT) { //因为是长链模式,夹子走回到压轮前位置 AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-(dwXRealPos-KAI_QD_PARAM_JZ_STOP_POS), KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL, 100); } else { //因为是短链模式,有二次切夹子走回到前点6公分位置 AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-(dwXRealPos-600), KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL, 100); } } break; case 4: if(!X_DRV) { KAI_QD_ReBack_Step = 0; } break; //切断后长链电机拉带出去 case 10: //长链切断后由长链电机 AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_BACK_SPEED*2/3,2000, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,30,30, 260); KAI_QD_YPOS_buff = dwYRealPos; KAI_QD_ReBack_Step = 11; break; case 11: if(dwYRealPos >= (KAI_QD_YPOS_buff + 1000)) { KAI_QD_ReBack_Step = 12; KAI_QD_CLTD_YL_VAVLE = 0; if(KAI_QD_JD_VAVLE && (KAI_QD_MotorStep == 0)) //夹子没有张开的话,说明拉链比较短 KAI_QD_MotorStep = 40; //夹子松开 } break; case 12: if((!Y_DRV || KAI_QD_CLTD_YL_ORIGIN_IN)) { KAI_QD_CLTD_JT_VAVLE = 0; //长链电机进退电磁 KAI_QD_ReBack_Step = 2; } break; } } // //Y电机动作 //长链轮子电机 //不带过链感应长度输入电机长度 闭口有勾针到位 ,夹子电机 void Kai_QueDuan_YMotor(void) { unsigned short ch,kk; #if 1 switch(KAI_QD_YMotorStep) { case 30: // switch(KAI_QD_PARAM_BACK_MODE) //开口分四种模式 // { // case 0: //单数控模式 KAI_QD_YMotorStep = 310; //每种模式留20步 SetPos(X_AXIS, 0); //开始拖带处为0点 SetPos(Y_AXIS, 0); //开始拖带处为0点 KAI_QD_YMotorDelay = dwTickCount + 0; KAI_QD_YD_VAVLE = 0; break; //310步到315步为数控模式 case 310: KAI_QD_YMotorStep = 311; if(KAI_QD_PARAM_BL_ENABLE) KAI_QD_BinLianStep = 20; //并链起动 break; case 311: if(dwTickCount >= KAI_QD_YMotorDelay) { KAI_QD_length_buffer =(short *)( &KAI_QD_PARAM_OFFSET_LENGTH); if(KAI_QD_PARAM_ECQ_MODE) KAI_QD_ECT_VAVLE=0; //自动匹配减速时间 KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_BACK_SPEED/500; //因为是长链模式,夹走到转换位置 AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_CL_JZ_TD_LENGTH, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH); KAI_QD_YMotorDelay = dwTickCount + MOTOR_ALARM_TIME; if(!KAI_QD_CLTD_JT_VAVLE) KAI_QD_CLTD_YL_VAVLE = 0; KAI_QD_YMotorStep = 312; } break; case 312: //电机走动后再退送链,减少起动拉链的阻力 if(dwXRealPos >= 150) { KAI_QD_TL_VAVLE = 0; KAI_QD_TFK_VAVLE = 0; } //电机到达夹子和压轮错开点 if(dwXRealPos >= KAI_QD_PARAM_JZ_STOP_POS) { KAI_QD_CLTD_JT_VAVLE = 1; } //剩下三公分开始压轮 if(((dwXRealPos + 300) >= KAI_QD_PARAM_CL_JZ_TD_LENGTH) && KAI_QD_CLTD_JT_VAVLE && KAI_QD_CLTD_LIMIT_IN && !KAI_QD_CLTD_YL_VAVLE) { KAI_QD_CLTD_YL_VAVLE = 1; KAI_QD_YMotorDelay = dwTickCount + KAI_QD_PARAM_YL_TIME; } // if(!KAI_QD_CLTD_YL_VAVLE || KAI_QD_CLTD_YL_ORIGIN_IN) KAI_QD_YMotorDelay = dwTickCount + KAI_QD_PARAM_YL_TIME; //夹子电机已停止,压轮电机进到位,压轮时间到 if((!X_DRV && KAI_QD_CLTD_LIMIT_IN && !KAI_QD_CLTD_ORIGIN_IN && !KAI_QD_CLTD_YL_ORIGIN_IN && (dwTickCount >= KAI_QD_YMotorDelay) && KAI_QD_CLTD_YL_VAVLE) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))) { //要 if(KAI_QD_PARAM_ZIPPER_LENGTH >= (KAI_QD_PARAM_CL_JZ_TD_LENGTH+ 3000)) { KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_CL_HSPEED/500; //因为是长链模式,夹走到转换位置// AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_HSPEED,(KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_CL_JZ_TD_LENGTH - 3000), KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,60); } else if(KAI_QD_PARAM_ZIPPER_LENGTH > KAI_QD_PARAM_CL_JZ_TD_LENGTH) { KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_CL_SPEED/500; //因为是长链模式,夹走到转换位置// AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_CL_JZ_TD_LENGTH, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,60); } else { if(KAI_QD_PARAM_LTJC_MODE == 0) //有拉头 { AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED*8/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,35,30); } else //没有拉头 { //因为是长链模式,夹走到转换位置// AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,25,30); } } KAI_QD_YMotorStep = 313; //拉链长度大于此长度后才提前自动返回 if(KAI_QD_PARAM_ZIPPER_LENGTH > KAI_QD_PARAM_AUTO_REBACK_LENGTH) KAI_QD_ReBack_Step = 1; } break; case 313: if(KAI_QD_PARAM_ZIPPER_LENGTH < (KAI_QD_PARAM_CL_JZ_TD_LENGTH)) { //有拉头,没有拉头情况下拉带速度本来就比较慢 if(KAI_QD_GUO_LIAN_IN_UP && (KAI_QD_PARAM_LTJC_MODE == 0)) { AxisContinueMoveChangeSpeed(Y_AXIS,(KAI_QD_PARAM_CHECK_BACK_CL_SPEED),1000,15,15); } if(KAI_QD_GUO_LIAN_IN_DW) { KAI_QD_gou_zhen_buff = dwYRealPos; KAI_QD_YMotorStep = 314; KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ GetCurSpeed(X_AXIS)/500; AxisMovePosAccDec(Y_AXIS,GetCurSpeed(Y_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(Y_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,80); } } else { if(KAI_QD_GUO_LIAN_IN_DW && ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH + 1500) >= KAI_QD_PARAM_ZIPPER_LENGTH )) { KAI_QD_gou_zhen_buff = dwYRealPos; KAI_QD_YMotorStep = 314; KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ GetCurSpeed(X_AXIS)/500; AxisMovePosAccDec(Y_AXIS,GetCurSpeed(Y_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(Y_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,80); } } break; case 314: // if(!KAI_QD_GZ_VAVLE && ((dwYRealPos) >= (KAI_QD_gou_zhen_buff + KAI_QD_PARAM_GZ_DELAY))) { KAI_QD_GZ_VAVLE = 1; } //实为滤波用,定位到之前又到空位的话重新检测 if(KAI_QD_GUO_LIAN_IN_UP) { KAI_QD_YMotorStep = 313; // KAI_QD_GZ_VAVLE = 0; if(Y_DRV) AxisContinueMoveChangeSpeed(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,1000,25,15); else AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,3000, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,30,60); } else if(!Y_DRV) //定位完成 { KAI_QD_YMotorStep = 0; if(KAI_QD_cZipCnt == 0) { KAI_QD_length_buff = dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH; SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度 } //比较拉链长度 警告 } break; case 315: if(dwTickCount >= KAI_QD_YMotorDelay) { KAI_QD_YMotorStep = 317; } //实为滤波用,定位到之前又到空位的话重新检测 if(KAI_QD_GUO_LIAN_IN_UP) { KAI_QD_YMotorStep = 314; KAI_QD_GZ_VAVLE = 0; AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,GetCurSpeed(X_AXIS),25,15); } else if(!Y_DRV) //定位完成 { KAI_QD_YMotorStep = 316; } break; case 316: if(KAI_QD_PARAM_BACK_MODE == 2) //纯数控模式 { ch = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_CL_JZ_TD_LENGTH - KAI_QD_PARAM_SKCDWC_LENGTH; kk = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_CL_JZ_TD_LENGTH+ KAI_QD_PARAM_SKCDWC_LENGTH; } if(KAI_QD_PARAM_BACK_MODE == 2) //先感应后数控模式+检测 只能检测过链的位置 { if(((KAI_QD_dwWorkLength) < (ch))) //拉链变短 { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM); if(dwTickCount >= KAI_QD_YMotorDelay) bAlarmStop = 1; } else if((KAI_QD_dwWorkLength > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50))) { SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM); if(dwTickCount >= KAI_QD_YMotorDelay) bAlarmStop = 1; } else { KAI_QD_YMotorStep = 0;//390; //延时反转步 } } break; } #endif } //Z电机动作 //切刀位置电机 //主要是回零,定位刀的位置 //1步开始为回零点 void Kai_QueDuan_ZMotor(void) { if(KAI_QD_PARAM_ECTMACHINE_MODE) { switch(KAI_QD_ZMotorStep) { case 1: KAI_QD_ZMotorStep = 4; if(KAI_QD_ECTD_ORIGIN_IN) { AxisContinueMoveAcc(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,KAI_QD_DIR_P,2000,2000,25,15); KAI_QD_ZMotorStep = 2; } else { AxisContinueMoveAcc(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,KAI_QD_DIR_N,2000,2000,25,15); } break; case 2: if(!KAI_QD_ECTD_ORIGIN_IN) { AxisMovePosAccDec(Z_AXIS,3000,30,2000,2000,10,10,30); KAI_QD_ZMotorStep = 3; } else if(dwZRealPos >= 400) // 大于4CM 后都没离开说明信号异常 警告 { KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM); KAI_QD_ZMotorStep = 0; } break; case 3: if(!Z_DRV) { KAI_QD_ZMotorStep = 7; AxisEgmStop(Z_AXIS); KAI_QD_ZMotorDelay = dwTickCount + 5; } break; case 4: if(KAI_QD_ECTD_ORIGIN_IN) { AxisEgmStop(Z_AXIS); KAI_QD_ZMotorStep = 5; SetPos(Z_AXIS, 0); //开始拖带处为0点 KAI_QD_ZMotorDelay = dwTickCount + 5; } else if(dwZRealPos <= -1300) // 大于4CM 后都没离开说明信号异常 警告 { KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM); KAI_QD_ZMotorStep = 0; } break; case 5: if(dwTickCount >= KAI_QD_ZMotorDelay) { if(1) { AxisContinueMoveAcc(Z_AXIS,4000,KAI_QD_DIR_P,2000,2000,25,25); KAI_QD_ZMotorStep = 2; } } break; case 7: if(dwTickCount >= KAI_QD_ZMotorDelay) { if(1) { AxisContinueMoveAcc(Z_AXIS,2000,KAI_QD_DIR_N,2000,2000,25,15); KAI_QD_ZMotorStep = 8; } } break; case 8: if(KAI_QD_ECTD_ORIGIN_IN) { KAI_QD_ORIGIN_Over = 1; AxisEgmStop(Z_AXIS); KAI_QD_ZMotorStep = 9; SetPos(Z_AXIS, 0); //开始拖带处为0点 KAI_QD_ZMotorDelay = dwTickCount + 0; } else if(dwZRealPos <= -300) // 大于4CM 后都没离开说明信号异常 警告 { KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM); KAI_QD_ZMotorStep = 0; AxisEgmStop(Z_AXIS); } break; case 9: if(dwTickCount >= KAI_QD_ZMotorDelay) { if(KAI_QD_PARAM_ECQ_MODE) //二次切选择的话先移动到第一刀 KAI_QD_ZMotorStep = 10; else KAI_QD_ZMotorStep = 20; } break; //到达一次切位置 case 10: KAI_QD_ZMotorDelay = dwTickCount + 20; KAI_QD_ZMotorStep = 11; break; case 11: if(dwTickCount >= KAI_QD_ZMotorDelay) { if(KAI_QD_PARAM_LLDK_LENGTH < 200) KAI_QD_PARAM_LLDK_LENGTH = 200; //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { //预留的位置不能超出一字刀位置 if((KAI_QD_PARAM_YZD_POS + KAI_QD_PARAM_FIRST_POS) >= KAI_QD_PARAM_LLDK_LENGTH) { AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,((KAI_QD_PARAM_YZD_POS + KAI_QD_PARAM_FIRST_POS) - KAI_QD_PARAM_LLDK_LENGTH) - dwZRealPos,2000,2000,30,30,10); KAI_QD_ZMotorStep = 12; } else //超出位置警告 { KAI_QD_ZMotorStep = 0; KAI_QD_SetAlarmCode(KAI_QD_Z_POS_OVER_ALARM); } } else { //预留的位置不能超出位置 if((KAI_QD_PARAM_HBD_POS + KAI_QD_PARAM_FIRST_POS) >= KAI_QD_PARAM_LLDK_LENGTH) { AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,((KAI_QD_PARAM_HBD_POS + KAI_QD_PARAM_FIRST_POS) - KAI_QD_PARAM_LLDK_LENGTH) - dwZRealPos,2000,2000,30,35,10); KAI_QD_ZMotorStep = 12; } else //超出位置警告 { KAI_QD_ZMotorStep = 0; KAI_QD_SetAlarmCode(KAI_QD_Z_POS_OVER_ALARM); } } } break; case 12: if(!Z_DRV) { KAI_QD_ZMotorStep = 0; KAI_QD_CUR_QDSelect = 0; } break; //到达二次切位置 case 20: KAI_QD_ZMotorDelay = dwTickCount + 20; KAI_QD_ZMotorStep = 21; break; case 21: if(dwTickCount >= KAI_QD_ZMotorDelay) { if(KAI_QD_PARAM_LLDK_LENGTH < 200) KAI_QD_PARAM_LLDK_LENGTH = 200; //二次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,(KAI_QD_PARAM_YZD_POS) - KAI_QD_PARAM_SECOND_POS- dwZRealPos,2000,2000,30,35,10); else AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,(KAI_QD_PARAM_HBD_POS) - KAI_QD_PARAM_SECOND_POS - dwZRealPos,2000,2000,30,35,10); KAI_QD_ZMotorStep = 22; KAI_QD_CUR_QDSelect = 1; } break; case 22: if(!Z_DRV) { KAI_QD_ZMotorStep = 0; } break; } } else { KAI_QD_ZMotorStep = 0; KAI_QD_ORIGIN_Over = 1; } } void Kai_QueDuan_TuiLianAction(void) { #if 1 if((KAI_QD_PARAM_XM_ENABLE == 0) && (KAI_QD_PARAM_ECTMACHINE_MODE == 0)) { KAI_QD_TuiLianStep = 0; } else { switch(KAI_QD_TuiLianStep) { case 1: KAI_QD_TuiLianStep = 2; break; case 2: KAI_QD_TLDelay = dwTickCount + KAI_QD_PARAM_YD_DELAY; KAI_QD_TuiLianStep = 3; break; case 3: if(dwTickCount >= KAI_QD_TLDelay) { if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN ) { KAI_QD_TL_VAVLE = 1; // KAI_QD_TFK_VAVLE = 1; if(!bRunning)KAI_QD_TFK_VAVLE = 1; KAI_QD_TLDelay = dwTickCount + KAI_QD_PARAM_TL_DELAY; KAI_QD_TuiLianStep = 4; } } break; case 4: if(dwTickCount >= KAI_QD_TLDelay) { KAI_QD_TuiLianStep = 0; } break; case 10: KAI_QD_TuiLianStep = 11; break; case 11: if(!Y_DRV) { KAI_QD_TuiLianStep = 0; } break; } } #endif } #if 0 //闭口专用 void Kai_QueDuan_XiaQue(void) { switch(KAI_QD_XiaQieStep) { case 0: break; case 1: if(!bRunning) { KAI_QD_GZ_VAVLE = 1; //勾针 KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY; // KAI_QD_XiaQieStep = 100; KAI_QD_XiaQieStep = 2; KAI_QD_XiaQieDelay = dwTickCount + 30; } else { KAI_QD_YD_VAVLE = 1; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY; KAI_QD_XiaQieStep = 2; } break; case 2: if((dwTickCount >= KAI_QD_XiaQieDelay ) && KAI_QD_GOUZHEN_IN) { KAI_QD_YD_VAVLE = 1; KAI_QD_XiaQieStep = 3; KAI_QD_XiaQieDelay = dwTickCount; } break; case 3: if(dwTickCount >= KAI_QD_XiaQieDelay) { if((KAI_QD_PARAM_TIAOSHI_MODE && KAI_QD_bTS) || (KAI_QD_PARAM_TIAOSHI_MODE == 0)) { KAI_QD_SM_VAVLE = 1; if(!KAI_QD_PARAM_XM_ENABLE) KAI_QD_XM_VAVLE = 1; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_XiaQieStep = 4; } } break; case 4: if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_PARAM_XM_ENABLE)) { if(!KAI_QD_PARAM_CS_MODE) //气切 { KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM; // KAI_QD_XiaQieStep = 5; } else { KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; // KAI_QD_XiaQieStep = 10; } // } else if(dwTickCount >= KAI_QD_XiaQieDelay) { if(!KAI_QD_SHANG_MU_LIMIT_IN) KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI); else KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); } break; case 5: if(dwTickCount >= KAI_QD_XiaQieDelay) { // KAI_QD_DL_VAVLE=0; // KAI_QD_JIALIAN_VAVLE=0; KAI_QD_GZ_VAVLE = 0; KAI_QD_SM_VAVLE = 0; if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE = 0; if(KAI_QD_PARAM_ECQ_MODE) { KAI_QD_XiaQieStep = 20; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_YSECT_DELAY; } else { KAI_QD_XiaQieStep = 6; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; // } } break; case 6: if(!KAI_QD_SHANG_MU_LIMIT_IN && (!KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_PARAM_XM_ENABLE)) //下模不动就不用判断 { if(!KAI_QD_PARAM_LDHTGZ_MODE || !bRunning) KAI_QD_GZ_VAVLE = 0; if(KAI_QD_TuiLianStep == 0) KAI_QD_TuiLianStep = 1; if(!bRunning) KAI_QD_JD_VAVLE = 0; KAI_QD_XiaQieStep = 0; } else if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_SetAlarmCode(KAI_QD_SM_YUANWEI); } break; //10~11步为超声 case 10: if(dwTickCount >= KAI_QD_XiaQieDelay) { if(KAI_QD_PARAM_CS_ENABLE)KAI_QD_CS_OUT = 1; // KAI_QD_DL_VAVLE=0; // KAI_QD_JIALIAN_VAVLE=0; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; // KAI_QD_XiaQieStep = 11; } break; case 11: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_CS_OUT = 0; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_COLD_TIME; // KAI_QD_XiaQieStep = 5; } break; case 20: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_ECT_VAVLE=1; KAI_QD_XiaQieStep = 21; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECTL_TIME; } break; case 21: if(dwTickCount >= KAI_QD_XiaQieDelay) { if(!KAI_QD_ECTD_ORIGIN_IN) { KAI_QD_SecondXiaQueStep=1; KAI_QD_XiaQieStep = 22; KAI_QD_ErrorDelay=dwTickCount + VAVLE_ALARM_TIME; } else { KAI_QD_SetAlarmCode(KAI_QD_ECTDYW_ALARM); } } break; case 22: if(KAI_QD_SecondXiaQueStep==0) { KAI_QD_SM_VAVLE = 0; KAI_QD_CHUIQI_VAVLE=1; KAI_QD_CHUIQIDelay=dwTickCount+KAI_QD_PARAM_CHUIQI_TIME; if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=0; KAI_QD_TFK_VAVLE = 0; KAI_QD_XiaQieStep = 6; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; } break; } if(KAI_QD_CHUIQI_VAVLE) { if(dwTickCount>=KAI_QD_CHUIQIDelay) { KAI_QD_CHUIQI_VAVLE=0; } } } #endif //开口用 void Kai_QueDuan_XiaQue(void) { switch(KAI_QD_XiaQieStep) { case 0: break; case 1: KAI_QD_XiaQieStep = 2; if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE) { if(KAI_QD_GOUZHEN_IN) KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } break; case 2: if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE) { if(KAI_QD_GOUZHEN_IN) KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_XiaQieStep = 3; break; case 3: if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE) { if(KAI_QD_GOUZHEN_IN) KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } if(1) { // if(KAI_QD_START_IN_UP) { KAI_QD_XiaQieDelay = dwTickCount + 0;//QD_PARAM_GZ_DELAY; KAI_QD_XiaQieStep = 4; } } else if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); } break; case 4: if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE) { if(KAI_QD_GOUZHEN_IN) KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } // if(KAI_QD_GZ_VAVLE) //勾针已经有输出就不需要延时 // { // KAI_QD_XiaQieDelay = dwTickCount + 0; // } // else KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TFK_DELAY; KAI_QD_GZ_VAVLE = 1; KAI_QD_cTuiFangKuaiCnt=0; KAI_QD_XiaQieStep = 5; break; case 5: if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE) { if(KAI_QD_GOUZHEN_IN) KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } if(((dwTickCount >= KAI_QD_XiaQieDelay))) { KAI_QD_TFK_VAVLE = 1; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_XiaQieStep = 6; } break; case 6: if(1) { KAI_QD_XiaQieStep = 7; KAI_QD_XiaQieDelay = dwTickCount + 1200; } else if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); } break; case 7: if(KAI_QD_GOUZHEN_IN && KAI_QD_TFK_LIMIT_IN) { KAI_QD_cTuiFangKuaiCnt = 0; KAI_QD_TFKDelay = dwTickCount + 200; KAI_QD_YD_VAVLE = 1; //拉直要区分长链的短链(0短链,1 长链) if(KAI_QD_PARAM_LIAN_SELECT) { //拉直由长链电机拉 if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) //有二次切 { AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); } else //一次切, 当夹子还没有放开时, 等切断完成后才松夹子返回 { AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIEGY_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); } } else //链短链 { //由夹子电机拉直 if((KAI_QD_PARAM_BACK_MODE==2) || (KAI_QD_PARAM_BACK_MODE==3)) { if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) { if(KAI_QD_cZipCnt>1) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_MATOR_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); else AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); } else { if(KAI_QD_cZipCnt>1) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_LZ_SPPED,KAI_QDPARAM_DANQIECNC_LENGTH,50,8,50); else AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIEGY_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_LZ_SPPED,KAI_QD_PARAM_DANQIEGY_LENGTH ,50,8,50); } } else { if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) { //数控 if(KAI_QD_PARAM_BACK_MODE==0) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_MATOR_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_MATOR_LENGTH ,50,8,50); //感应 else if(KAI_QD_PARAM_BACK_MODE==1) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_LDMS_LENGTH ,50,8,50); } else { //数控模式 if(KAI_QD_PARAM_BACK_MODE == 0) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_DANQIECNC_LENGTH ,50,8,50); //感应模式 else if(KAI_QD_PARAM_BACK_MODE == 1) AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50); // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_DANQIEGY_LENGTH ,50,8,50); } } } if(!KAI_QD_QIAN_LIMIT_IN) { //二次切 if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) { if(bRunning) { KAI_QD_XiaQieDelay = dwTickCount+KAI_QD_PARAM_DL_DELAY; KAI_QD_XiaQieStep = 102; } else { KAI_QD_XiaQieStep = 8; KAI_QD_XiaQieDelay = dwTickCount + 200; } } else //普通一次切 { if(!bRunning) KAI_QD_XiaQieDelay = dwTickCount + 200; else KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY; KAI_QD_XiaQieStep = 8; } } else KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM); } else if((dwTickCount >= KAI_QD_XiaQieDelay)) { if( KAI_QD_cTuiFangKuaiCnt < KAI_QD_PARAM_TFK_NUMBER) { KAI_QD_TFK_VAVLE = 0; KAI_QD_YD_VAVLE = 0; KAI_QD_cTuiFangKuaiCnt++; KAI_QD_XiaQieDelay = dwTickCount + 30; KAI_QD_XiaQieStep = 99; } else KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } break; case 99: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_TFK_VAVLE = 0; KAI_QD_XiaQieDelay = dwTickCount + 500; KAI_QD_XiaQieStep = 100; } break; //重推方块 case 100: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_TFK_VAVLE = 1; KAI_QD_XiaQieDelay = dwTickCount + 500; KAI_QD_XiaQieStep = 6; } break; //2次切 case 102: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_JLD_DELAY; KAI_QD_XiaQieStep = 103; } break; case 103: if(dwTickCount >= KAI_QD_XiaQieDelay ) { // AxisEgmStop(X_AXIS); KAI_QD_ECQ_JIALIAN_VAVLE=1; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TJL_DELAY; KAI_QD_XiaQieStep = 104; } break; case 104: if(dwTickCount >= KAI_QD_XiaQieDelay) { // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_BACK_LOW_SPEED,-KAI_QDPARAM_FZ_LENGTH,3000,KAI_QDPARAM_ACC,KAI_QDPARAM_DCC); KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECQYSQD_DELAY; KAI_QD_XiaQieStep = 8; KAI_QD_TFKDelay = dwTickCount + 200; } break; case 8://上下模同时输出 if((dwTickCount >= KAI_QD_XiaQieDelay) && !KAI_QD_TL_VAVLE && ((!X_DRV && !Y_DRV) || (!KAI_QD_PARAM_ECQ_MODE && (KAI_QD_PARAM_LIAN_SELECT== 0)))) { if(KAI_QD_TFK_LIMIT_IN) { if(!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)) { if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { KAI_QD_KAI_XM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 0; if(!KAI_QD_CUR_QDSelect)//在一次切位置 { //一次切刀选择 if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else //二次切刀 { KAI_QD_BI_XM_VAVLE = 1; } } else { //二次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else { KAI_QD_BI_XM_VAVLE = 1; } } if(KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN) { KAI_QD_SM_VAVLE = 1; KAI_QD_XiaQieStep = 9; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; //开口只有长链才需要反转一点 if(KAI_QD_PARAM_LIAN_SELECT) AxisMovePosAccDec(Y_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00); } } else { if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=1; KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_XiaQieStep = 9; //开口只有长链才需要反转一点 if(KAI_QD_PARAM_LIAN_SELECT) AxisMovePosAccDec(Y_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00); } } } else if(dwTickCount >= KAI_QD_TFKDelay)//推方块到位信号异常 { KAI_QD_SetAlarmCode(KAI_QD_TFK_LIMIT_IN_ALARM); } } break; case 9://上下模到位,调试模下的话,等按下一步按键 下模不动 if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_PARAM_XM_ENABLE || KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN)) { if(!KAI_QD_PARAM_CS_MODE) //无超声配置 { KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM; KAI_QD_XiaQieStep = 12; } else { KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; // KAI_QD_XiaQieStep = 10; } } else if(dwTickCount >= KAI_QD_XiaQieDelay) { if(!KAI_QD_SHANG_MU_LIMIT_IN) KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI); else KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); } break; case 10://延时超声 if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_CS_OUT = 1; KAI_QD_ECQ_JIALIAN_VAVLE=0; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; // KAI_QD_XiaQieStep = 11; } break; case 11: //超声时间 if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_CS_OUT = 0; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_COLD_TIME; // KAI_QD_XiaQieStep = 12; } break; case 12: //固化时间 if(dwTickCount >= KAI_QD_XiaQieDelay) { // KAI_QDDL_VAVLE=0; KAI_QD_ECQ_JIALIAN_VAVLE = 0; KAI_QD_SM_VAVLE = 0; if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器 { } else { KAI_QD_XiaQueOver = 1; if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=0; } if(!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)) { if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) { KAI_QD_XiaQieStep = 20; //二次切 if(bRunning) KAI_QD_ReBack_Step = 1; } else { KAI_QD_XiaQieStep = 13; KAI_QD_TFK_VAVLE = 0; KAI_QD_YD_VAVLE = 0; KAI_QD_XiaQieDelay = dwTickCount + 3; } } //长链模式下长链电机,由压链电机拖带出来 if(KAI_QD_PARAM_LIAN_SELECT) { KAI_QD_ReBack_Step = 10; } }// break; case 13: if((dwTickCount >= KAI_QD_XiaQieDelay)) { if(!KAI_QD_PARAM_LDHTGZ_MODE || !bRunning || KAI_QD_PARAM_ECQ_MODE) KAI_QD_GZ_VAVLE = 0; // KAI_QDCHUIQI_VAVLE=0; KAI_QD_XiaQieStep = 14; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TTFK_TIME; } break; case 14: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_TFK_VAVLE = 1; KAI_QD_YD_VAVLE = 1; } if(!KAI_QD_SHANG_MU_LIMIT_IN) { //启动推链(送链) if((KAI_QD_TuiLianStep == 0) && !KAI_QD_TL_VAVLE) KAI_QD_TuiLianStep = 1; } if((!KAI_QD_SHANG_MU_LIMIT_IN && !KAI_QD_XIA_MU_LIMIT_IN && KAI_QD_TFK_VAVLE)) { KAI_QD_XiaQieStep = 0; // KAI_QDCHUIQI_VAVLE=0; } else if(dwTickCount >= (KAI_QD_XiaQieDelay+3000)) { // KAI_QD_SetAlarmCode(KAI_QD_SM_YUANWEI); } break; //二次切动作 case 20: if((!KAI_QD_SHANG_MU_LIMIT_IN) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))) { //二次切延时送带 KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_YSECT_DELAY; KAI_QD_XiaQieStep = 21; KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀 KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀 //二次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else { KAI_QD_BI_XM_VAVLE = 1; } } break; case 21: if(dwTickCount >= KAI_QD_XiaQieDelay) { KAI_QD_ZMotorStep = 20; //电机移动到二次切位置 KAI_QD_XiaQieStep = 22; KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECTL_TIME; } break; case 22: if(((KAI_QD_ZMotorStep == 0) && (!Z_DRV) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))) { KAI_QD_SecondXiaQueStep = 1; KAI_QD_XiaQieStep = 23; KAI_QD_ErrorDelay = dwTickCount + VAVLE_ALARM_TIME; } break; case 23: if(KAI_QD_SecondXiaQueStep == 0) { KAI_QD_SM_VAVLE = 0; if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动 KAI_QD_XM_VAVLE=0; KAI_QD_TFK_VAVLE = 0; KAI_QD_XiaQieDelay = dwTickCount + 2; KAI_QD_XiaQieStep = 13; KAI_QD_CuiQiStep = 1; } break; } switch(KAI_QD_CuiQiStep) { case 1: if(KAI_QD_XIA_MU_LIMIT_IN && KAI_QD_KK_XM_LIMIT_IN) { KAI_QD_CHUIQIDelay = dwTickCount + 0; KAI_QD_CuiQiStep = 2; KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀 KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀 } break; case 2: if(!KAI_QD_XIA_MU_LIMIT_IN && !KAI_QD_KK_XM_LIMIT_IN) { KAI_QD_CHUIQIDelay = dwTickCount + 100; KAI_QD_CuiQiStep = 3; } break; case 3: if(dwTickCount >= KAI_QD_CHUIQIDelay) { KAI_QD_CuiQiStep = 0; KAI_QD_ECQ_CUIQI_VAVLE = 1; KAI_QD_CHUIQIDelay= dwTickCount+KAI_QD_PARAM_CHUIQI_TIME; } break; } if(KAI_QD_ECQ_CUIQI_VAVLE && (dwTickCount >= KAI_QD_CHUIQIDelay)) { KAI_QD_ECQ_CUIQI_VAVLE= 0; } } //第二刀下切步骤 void Kai_QueDuan_SecondXiaQue(void) { #if 1 if(KAI_QD_PARAM_ECQ_MODE) { switch(KAI_QD_SecondXiaQueStep) { case 0: break; case 1://上下模同时输出 if((dwTickCount >= KAI_QD_SecondXQDelay) && !KAI_QD_TL_VAVLE && KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN) { KAI_QD_SM_VAVLE = 1; KAI_QD_KAI_XM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 0; //二次切刀选择 if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切 { KAI_QD_KAI_XM_VAVLE = 1; } else { KAI_QD_BI_XM_VAVLE = 1; } KAI_QD_SecondXQDelay = dwTickCount + VAVLE_ALARM_TIME; KAI_QD_SecondXiaQueStep = 2; } else if(dwTickCount >= KAI_QD_ErrorDelay) { KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM); } break; case 2://上下模到位,调试模下的话,等按下一步按键 下模不动 if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_PARAM_XM_ENABLE|| KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN)) { if(!KAI_QD_PARAM_CS_MODE) //无超声配置 { KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM; KAI_QD_SecondXiaQueStep = 4; } else { KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; // KAI_QD_SecondXiaQueStep = 3; } } else if(dwTickCount >= KAI_QD_SecondXQDelay) { if(!KAI_QD_SHANG_MU_LIMIT_IN)KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI); else KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI); } break; case 3: if(dwTickCount >= KAI_QD_SecondXQDelay) { KAI_QD_CS_OUT = 1; KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; // KAI_QD_SecondXiaQueStep = 4; } break; case 4: if(dwTickCount >= KAI_QD_SecondXQDelay) { KAI_QD_CS_OUT = 0; KAI_QD_SM_VAVLE = 0; KAI_QD_BI_XM_VAVLE = 1; //闭口下刀电磁阀 if(!KAI_QD_SHANG_MU_LIMIT_IN) { KAI_QD_SecondXiaQueStep = 0; } } break; } } #endif } #endif