From f1708a9836164a2d988f3e534afac11b757d4a1e Mon Sep 17 00:00:00 2001 From: "YM\\yangmeng" <3085907267@qq.com> Date: Fri, 16 Jan 2026 09:38:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=89=E5=8E=8B=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=AE=BE=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EMBOS/Users/App/user/optical/optical.c | 403 +++++++++++++++++---- EMBOS/Users/App/user/optical/optical.h | 159 +++++--- EMBOS/Users/App/user/optical/opticalpara.h | 6 +- 3 files changed, 447 insertions(+), 121 deletions(-) diff --git a/EMBOS/Users/App/user/optical/optical.c b/EMBOS/Users/App/user/optical/optical.c index 53d7ac2..20851a5 100644 --- a/EMBOS/Users/App/user/optical/optical.c +++ b/EMBOS/Users/App/user/optical/optical.c @@ -279,7 +279,9 @@ void OpticalAsyncTask(void) { int rslt; rslt = ERR_NONE; - +#if(SCAN_TIMEINTERVAL == 1) + isEmptyMaterialSta(0); +#endif #if (MODULE_LOOSE == 1) // 松料电机装置 if (((g_workCtrl.cursta.workStatus & WORK_STA_SIMULATE) == 0) && 1 ) // 松料允许;非模拟状态 @@ -308,6 +310,9 @@ int SendOpticalTask(void) // if ((IsOptStoringLow2() == SENSOR_ON) || 0) { +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.feedingOpit = 1; +#endif LooseMotorRevOn(); //松料电机 转动 //printf("LooseMotor run %d\r\n"); @@ -318,13 +323,39 @@ int SendOpticalTask(void) // if((IsOptStoringLow1() == SENSOR_ON) || 0) { - LooseMotorRevOff(); // 松料电机 停止 +#if(FEEDINGBACK_ADJUST == 1) + if(g_optWorkCtrl.feedingOpit == 1) + { +#endif + LooseMotorRevOff(); // 松料电机 停止 +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.feedingOpit = 0; + } + } + else + { + if(g_optWorkCtrl.collectingOpit == 1) + { + LooseMotorOff(); + g_optWorkCtrl.collectingOpit = 0; + } +#endif } - } } - //工作中,光纤储料低位1没触发且送料电机转动时,启动松料电机, - +#if(FEEDINGBACK_ADJUST == 1) + //工作中 + if((g_workCtrl.cursta.workStatus & WORK_STA_WORKING) != 0 || +// (g_workCtrl.cursta.workStatus & WORK_STA_BUSY) != 0 || + 0) + { + if(IsOptStoringLow1() == SENSOR_ON) + { + g_optWorkCtrl.collectingOpit = 1; + LooseMotorOn(); + } + } +#endif return err; } @@ -333,7 +364,7 @@ int SendOpticalTask(void) // void OpticalTimerTask(void) { SendStatus(1); // 发送状态 - OperatorTaskWhenRun(0); +// OperatorTaskWhenRun(0); } int OpticalCloseAll(void) @@ -357,28 +388,75 @@ int sendOpticalTaskWhenRun(void) // //光纤储料低位1/2触发:开始松料 int err = ERR_NONE; - - if ((IsOptStoringLow2() == SENSOR_ON) || - (IsOptStoringLow1() != SENSOR_ON) || - 0) +#if(FEEDINGBACK_ADJUST == 1) + if(g_optWorkCtrl.pointOpit == 1) { - LooseMotorRevOn(); //松料电机 转动 +#endif + if ((IsOptStoringLow2() == SENSOR_ON) || + (IsOptStoringLow1() != SENSOR_ON) || + 0) + { +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.feedingOpit = 1; +#endif + LooseMotorRevOn(); //松料电机 转动 - //printf("LooseMotor run %d\r\n"); - //DelayRef(300); + //printf("LooseMotor run %d\r\n"); + //DelayRef(300); + } + else + { + if((IsOptStoringLow1() == SENSOR_ON) || + 0) + { + LooseMotorRevOff(); // 松料电机 停止 +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.feedingOpit = 0; +#endif + } + + } +#if(FEEDINGBACK_ADJUST == 1) } else { - if((IsOptStoringLow1() == SENSOR_ON) || - 0) + if ((IsOptStoringLow2() == SENSOR_ON) || + 0) { - LooseMotorRevOff(); // 松料电机 停止 + g_optWorkCtrl.feedingOpit = 1; + LooseMotorRevOn(); //松料电机 转动 + + //printf("LooseMotor run %d\r\n"); + //DelayRef(300); + } + else + { + if((IsOptStoringLow1() == SENSOR_ON) || + 0) + { + if(g_optWorkCtrl.feedingOpit == 1) + { + LooseMotorRevOff(); // 松料电机 停止 + g_optWorkCtrl.feedingOpit = 0; + } + else + { + g_optWorkCtrl.collectingOpit = 1; + LooseMotorOn(); + } + } + else + { + if(g_optWorkCtrl.collectingOpit == 1) + { + LooseMotorOff(); + g_optWorkCtrl.collectingOpit = 0; + } + } } - } - //工作中,光纤储料低位1没触发且送料电机转动时,启动松料电机, - - return err; +#endif + return err; } #if(MATERIAL_SCAN == 1) @@ -388,6 +466,7 @@ int isEmptyMaterialSta(u16 len)// { if(g_optWorkCtrl.IsNoMaterialEn == 1) { +#if(SCAN_TIMEINTERVAL == 0) // //情况1 // if(IsEmptyMaterial() == SENSOR_ON) // { @@ -407,7 +486,6 @@ int isEmptyMaterialSta(u16 len)// g_optWorkCtrl.IsNoMaterialScanLen = g_pOpticalMcPara->materialFreeScanNum;//断线检测扫描次数复位 g_optWorkCtrl.IsNoMaterialFlag = 2; } - //情况3 if((IsEmptyMaterial() != SENSOR_ON)) { @@ -435,8 +513,48 @@ int isEmptyMaterialSta(u16 len)// g_optWorkCtrl.IsNoMaterialFlag = 2; return STA_NORMAL_STOP; } +#else + + if(g_optWorkCtrl.IsNoMaterialStart == 0) + { + g_optWorkCtrl.IsNoMaterialScanTime = GetMsSoftTimer(); + g_optWorkCtrl.IsNoMaterialStart = 1; + } + if((IsEmptyMaterial() != SENSOR_ON)) + { + g_optWorkCtrl.IsNoMaterialTime = 0; + g_optWorkCtrl.IsNoMaterialScanTime = GetMsSoftTimer(); + } + u32 materTimer = GetMsSoftTimer(); + if((materTimer - g_optWorkCtrl.IsNoMaterialScanTime + g_optWorkCtrl.IsNoMaterialTime) > 20000) + { + printf("curtime=%d,IsNoMaterialScanTime=%d, IsNoMaterialTime=%d\r\n",materTimer,g_optWorkCtrl.IsNoMaterialScanTime,g_optWorkCtrl.IsNoMaterialTime); + ReportError(ERR_NO_MATERIAL_ERROR); + g_optWorkCtrl.IsNoMaterialTime = 0; + g_optWorkCtrl.IsNoMaterialStart = 0; + g_optWorkCtrl.opticalSta = 1;//断线检测报警 + return STA_NORMAL_STOP; + } + +#endif } +#if(SCAN_TIMEINTERVAL == 1) + else + { + if(g_optWorkCtrl.IsNoMaterialStart == 1) + { + g_optWorkCtrl.IsNoMaterialTime = GetMsSoftTimer() - g_optWorkCtrl.IsNoMaterialScanTime; + printf("IsNoMaterialTime=%d\r\n",g_optWorkCtrl.IsNoMaterialTime); + g_optWorkCtrl.IsNoMaterialStart = 0; + } + } + if(g_optWorkCtrl.opticalSta == 1)//断线检测报警 + { + return ERR_NO_MATERIAL_ERROR; + } +#endif } + return 0; } #endif @@ -3798,7 +3916,7 @@ int MoveMTS1BHStop_a(u32 para1,u32 para2) // 停止 int MTP_1PulseToP1Pulse(s32 Pulse) { - Pulse *= 8.488;// 8.488p/mm + Pulse *= 8.488;// 8.488p/mm 电机每圈400脉冲,外径15 return Pulse; } @@ -4769,7 +4887,10 @@ int MoveXYRS1P1ToWorkPos(DataItem * pCurDat, MotoSpd *pSpd, int rToSpinPosFlag,i err = MoveXYR1S1P1ToPos(posx, posy, posr1, poss1, posp1, &spd, s1MotoRunFlag); - g_optWorkCtrl.IsNoMaterialEn = 1; + if(err == ERR_NONE) + { + g_optWorkCtrl.IsNoMaterialEn = 1; + } } return err; } @@ -4791,7 +4912,7 @@ int MoveXYRS1P1SToWorkPos(DataItem * pCurDat, int uh) // posr1 = PitkToRpp(g_workCtrl.workPos[MTR1_IDX]); poss1 = g_workCtrl.workPos[MTS1_IDX]; posp1 = g_workCtrl.workPos[MTP1_IDX]; - + printf("work pos x:%d, y:%d\r\n",posx, posy); g_optWorkCtrl.IsNoMaterialEn = 0; if (uh != 0) @@ -4815,7 +4936,10 @@ int MoveXYRS1P1SToWorkPos(DataItem * pCurDat, int uh) // err = MoveXYR1S1P1ToPos(posx, posy, posr1, poss1, posp1, NULL, 0); } - g_optWorkCtrl.IsNoMaterialEn = 1; + if(err == ERR_NONE) + { + g_optWorkCtrl.IsNoMaterialEn = 1; + } } return err; } @@ -5452,9 +5576,13 @@ int GetWorkPosFromIndex(void) break; // 结束 } ChangeWorkPos(&sewStep, 1); +#if(0) + printf("idx: %d\tposx = %d\tposy = %d\r\n",idx, g_workCtrl.workPos[MTX_IDX], g_workCtrl.workPos[MTY_IDX]); + DelayRef(10); +#endif } g_workCtrl.workAvaible = DATA_VALID; // 工作坐标有效标志 - + printf("start x:%d,y:%d \r\n",g_workCtrl.workPos[MTX_IDX],g_workCtrl.workPos[MTY_IDX]); return 0; } @@ -5892,8 +6020,8 @@ int OpticalRefreshDat(u32 para1, u32 para2) diry += g_optWorkCtrl.yCompenAfterTurn; g_optWorkCtrl.compenFlag1 = 0; - g_optWorkCtrl.oldXCompenAfterTurn = g_optWorkCtrl.xCompenAfterTurn; - g_optWorkCtrl.oldYCompenAfterTurn = g_optWorkCtrl.yCompenAfterTurn; +// g_optWorkCtrl.oldXCompenAfterTurn = g_optWorkCtrl.xCompenAfterTurn; +// g_optWorkCtrl.oldYCompenAfterTurn = g_optWorkCtrl.yCompenAfterTurn; } // printf("rPos = %d, xPos = %d, yPos = %d,\r\n",g_motosPara.motosPos[MTR1_IDX],g_motosPara.motosPos[MTX_IDX],g_motosPara.motosPos[MTY_IDX]); @@ -5990,6 +6118,7 @@ int OpticalRefreshDat(u32 para1, u32 para2) } else if(pFlCtrl->dtype == DATA_OPTI) // 吐丝数据 { + // //速度匹配 // if(IsOptStoringHigh2() == SENSOR_ON ) // { @@ -6227,8 +6356,12 @@ int OpticalRefreshDat(u32 para1, u32 para2) } #if(AFTERTURN_COMPEN == 1) + void XYCompenCalcuAfterTurning(DataItem datItem) { + s32 turnr; + s32 abposr; + DataItem tempDat; if(((datItem.dx != 0) || (datItem.dy != 0)) && (datItem.attr != DATA_PRESSURE)) { if((datItem.dr == 0) && (g_optWorkCtrl.runSteps1 == 0))//先直线 @@ -6237,15 +6370,139 @@ void XYCompenCalcuAfterTurning(DataItem datItem) } else if((datItem.dr != 0) && (g_optWorkCtrl.runSteps1 == 10))//后拐弯 { - g_optWorkCtrl.begainRBeforeWiring = g_workCtrl.workPos[MTR1_IDX];//用来计算补偿 + ReadAndFreshMotosPos(); + // 转化为 -180--180度之间的数 + + abposr = g_motosPara.motosPos[MTR1_IDX]; + ChangeRotToNP180(&abposr); + if(abposr < 0) + { + abposr += 10000; + } + + g_optWorkCtrl.begainXBeforeWiring = g_workCtrl.workPos[MTX_IDX]; + g_optWorkCtrl.begainYBeforeWiring = g_workCtrl.workPos[MTY_IDX]; + g_optWorkCtrl.begainRBeforeWiring = abposr; g_optWorkCtrl.runSteps1 = 20; + printf("begin %d\r\n",g_optWorkCtrl.begainRBeforeWiring); } else if((datItem.dr == 0) && (g_optWorkCtrl.runSteps1 == 20))//拐弯之后 { - g_optWorkCtrl.xCompenAfterTurn = g_pOpticalMcPara->rkMatThickness/100*cos(g_optWorkCtrl.begainRBeforeWiring/10000) - g_optWorkCtrl.oldXCompenAfterTurn; - g_optWorkCtrl.yCompenAfterTurn = g_pOpticalMcPara->rkMatThickness/100*sin(g_optWorkCtrl.begainRBeforeWiring/10000) - g_optWorkCtrl.oldYCompenAfterTurn; - g_optWorkCtrl.compenFlag1 = 1; + for(int i = 1; i < 6; i++) + { + if(GetADataItem(0, (GetDatIndex() + i), &tempDat) == 0) + { + if(tempDat.dr != 0) + { + return; + } + } + else + { + return; + } + } + ReadAndFreshMotosPos(); + // 转化为 -180--180度之间的数 + + abposr = g_motosPara.motosPos[MTR1_IDX]; + ChangeRotToNP180(&abposr); + + if(abposr <= 0) + { + abposr += 10000; + } + + turnr = abposr - g_optWorkCtrl.begainRBeforeWiring; + printf("turn %d, begin %d,end %d\r\n",turnr,g_optWorkCtrl.begainRBeforeWiring,abposr); + + if(g_optWorkCtrl.begainRBeforeWiring > 4900 && //角度是180,做80的区间近似值 + g_optWorkCtrl.begainRBeforeWiring < 5100 && + 1) + { + if(((turnr > -2600) && (turnr < -2400)) || + ((turnr > 2400) && (turnr < 2600)) ) //直角转弯,X做补偿 + { + g_optWorkCtrl.xCompenAfterTurn = g_pOpticalMcPara->xGapCorrect; + g_optWorkCtrl.yCompenAfterTurn = 0; + g_optWorkCtrl.compenFlag1 = 1; + printf("xCompen\r\n"); + } + else if(turnr >= 100 && turnr<= 2400) + { + g_optWorkCtrl.xCompenAfterTurn = 0; + g_optWorkCtrl.yCompenAfterTurn = g_pOpticalMcPara->yGapCorrect; + g_optWorkCtrl.compenFlag1 = 1; + printf("yCompen\r\n"); + } + else + { + g_optWorkCtrl.xCompenAfterTurn = 0; + g_optWorkCtrl.yCompenAfterTurn = 0; + g_optWorkCtrl.compenFlag1 = 0; + } + + } + else if(g_optWorkCtrl.begainRBeforeWiring > 7400 && //角度是270,做100的区间近似值 + g_optWorkCtrl.begainRBeforeWiring < 7600 && + 1) + { + if(((turnr > -2600) && (turnr < -2400)) || + ((turnr > 2400) && (turnr < 2600)) ) //直角转弯,Y做补偿 + { + g_optWorkCtrl.xCompenAfterTurn = 0; + g_optWorkCtrl.yCompenAfterTurn = g_pOpticalMcPara->yGapCorrect; + g_optWorkCtrl.compenFlag1 = 1; + printf("yCompen\r\n"); + + } + else if(turnr >= -2400 && turnr <= -100) //还是原方向,反向x补偿 + { + g_optWorkCtrl.xCompenAfterTurn = g_pOpticalMcPara->xGapCorrect; + g_optWorkCtrl.yCompenAfterTurn = 0; + g_optWorkCtrl.compenFlag1 = 1; + printf("xCompen\r\n"); + } + else + { + g_optWorkCtrl.xCompenAfterTurn = 0; + g_optWorkCtrl.yCompenAfterTurn = 0; + g_optWorkCtrl.compenFlag1 = 0; + } + + } + else if(g_optWorkCtrl.begainRBeforeWiring > 2400 && //角度是90,做100的区间近似值 + g_optWorkCtrl.begainRBeforeWiring < 2600 ) + { + if(turnr >= 30 && turnr<= 2400) //还是原方向,反向x补偿 + { + g_optWorkCtrl.xCompenAfterTurn = g_pOpticalMcPara->xGapCorrect; + g_optWorkCtrl.yCompenAfterTurn = 0; + g_optWorkCtrl.compenFlag1 = 1; + printf("xCompen\r\n"); + } + } + else if((g_optWorkCtrl.begainRBeforeWiring > (-100) && g_optWorkCtrl.begainRBeforeWiring < 100) || + (g_optWorkCtrl.begainRBeforeWiring > 9900 && g_optWorkCtrl.begainRBeforeWiring < 10100)) + { + if(turnr >= -2400 && turnr <= -30) //还是原方向,反向y补偿 + { + g_optWorkCtrl.xCompenAfterTurn = 0; + g_optWorkCtrl.yCompenAfterTurn = g_pOpticalMcPara->yGapCorrect; + g_optWorkCtrl.compenFlag1 = 1; + printf("yCompen\r\n"); + } + } + +// if((abs(g_workCtrl.workPos[MTR1_IDX] - g_optWorkCtrl.begainRBeforeWiring) < 2000) && +// (g_optWorkCtrl.compenFlag1 == 0) ) +// { +// g_optWorkCtrl.runSteps1 = 20; +// } +// else +// { g_optWorkCtrl.runSteps1 = 0; +// } } } } @@ -6339,6 +6596,9 @@ int OpticalWork(int mode) g_optWorkCtrl.IsNoMaterialFlag = 2; g_optWorkCtrl.IsNoMaterialScanLen = g_pOpticalMcPara->materialFreeScanNum; g_optWorkCtrl.IsNoMaterialEn = 1; +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.pointOpit = 0; +#endif err = OpticalCloseAll(); // 打开吸风 FanMotosOn(); // 吸风开 @@ -6402,20 +6662,16 @@ int OpticalWork(int mode) err = MoveU1ToPos(g_pOpticalMcPara->rkHighPos, NULL);//抬起机头 ReadMotosPos(); - if(g_workCtrl.workPos[MTX_IDX] <= g_motosPara.motosPos[MTX_IDX]) + if(g_workCtrl.workPos[MTX_IDX] <= (g_motosPara.motosPos[MTX_IDX] + 200)) { g_workCtrl.workPos[MTX_IDX] -= g_pOpticalMcPara->startPosoffx; g_optWorkCtrl.usecomx = 1; } - if(g_workCtrl.workPos[MTY_IDX] <= g_motosPara.motosPos[MTY_IDX]) + if(g_workCtrl.workPos[MTY_IDX] <= (g_motosPara.motosPos[MTY_IDX] + 200)) { g_workCtrl.workPos[MTY_IDX] -= g_pOpticalMcPara->startPosoffy; g_optWorkCtrl.usecomy = 1; } -/* if (err == ERR_NONE) - { - err = MoveXYToPos(-1100, -6000, NULL); - }*/ if (err == ERR_NONE) { err = MoveXYRS1P1ToWorkPos(&curDat, NULL, 1, 0); @@ -6426,11 +6682,13 @@ int OpticalWork(int mode) { if(g_optWorkCtrl.usecomx == 1) { +// printf("usecomx \r\n"); g_workCtrl.workPos[MTX_IDX] += g_pOpticalMcPara->startPosoffx; g_optWorkCtrl.usecomx = 0; } if(g_optWorkCtrl.usecomy == 1) { +// printf("usecomy \r\n"); g_workCtrl.workPos[MTY_IDX] += g_pOpticalMcPara->startPosoffy; g_optWorkCtrl.usecomy = 0; } @@ -6554,6 +6812,9 @@ int OpticalWork(int mode) if(curDat.ctrl == DATA_OPTI) { curDat.ctrl = DATA_DRAWING; +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.pointOpit = 1; +#endif } if (GetDatIndex() < GetFileItemNums()) @@ -6590,6 +6851,9 @@ int OpticalWork(int mode) //布线结束后的动作 if((oldDat.ctrl == DATA_DRAWING || oldDat.ctrl == DATA_PRESSURE) && g_optWorkCtrl.motopreFlag == 1) { +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.pointOpit = 0; +#endif FixMatCylinderOff();//顶料松开 DelayRef(300); UpClipMatClipCylinderOff();//上夹料松开 @@ -6684,6 +6948,10 @@ int OpticalWork(int mode) // 吐丝数据动作处理 if (curDat.ctrl == DATA_OPTI) { +#if(FEEDINGBACK_ADJUST == 1) + g_optWorkCtrl.pointOpit = 1; +#endif +// g_optWorkCtrl.runSteps1 = 0; g_optWorkCtrl.motoRunFlag = 1; err = MoveR1ToPos(2500, NULL);//旋转到吐丝位置:90° @@ -6754,8 +7022,8 @@ int OpticalWork(int mode) { g_optWorkCtrl.IsNoMaterialScanLen = g_pOpticalMcPara->materialFreeScanNum; - g_optWorkCtrl.oldXCompenAfterTurn = 0; - g_optWorkCtrl.oldYCompenAfterTurn = 0; +// g_optWorkCtrl.oldXCompenAfterTurn = 0; +// g_optWorkCtrl.oldYCompenAfterTurn = 0; if(err == ERR_NONE) { @@ -6771,9 +7039,9 @@ int OpticalWork(int mode) { err = MoveU1ToPos(g_pOpticalMcPara->rkLowPos, NULL);//机头下降 PreMatCylinderOn();//压料 - DelayRef(200); + DelayRef(g_pOpticalMcPara->PreWaitTime); PreMatCylinderOff();//压料松开 - DelayRef(300); + DelayRef(100); UpClipMatClipCylinderOn();//上夹料夹料 } if(err == ERR_NONE) @@ -7028,7 +7296,7 @@ int OpticalWork(int mode) //布线结束后偏移到吐丝位置(判定:偏移数据前是布线数据,后是吐丝数据) if((oldDataForOffset == DATA_DRAWING || oldDataForOffset == DATA_PRESSURE) && tmpDat.ctrl == DATA_OPTI) { - if(g_optWorkCtrl.useGapCorx == 1) +/* if(g_optWorkCtrl.useGapCorx == 1) { g_workCtrl.workPos[MTX_IDX] -= g_pOpticalMcPara->xGapCorrect; g_optWorkCtrl.useGapCorx = 0; @@ -7037,7 +7305,7 @@ int OpticalWork(int mode) { g_workCtrl.workPos[MTY_IDX] -= g_pOpticalMcPara->yGapCorrect; g_optWorkCtrl.useGapCory = 0; - } + }*/ spinLenForOffset = GetSyntheticLength(datx2 - datx1,daty2 - daty1); g_optWorkCtrl.isEndOfSpinFlag = 1; g_optWorkCtrl.cutingFlag = 1; @@ -7161,26 +7429,14 @@ int OpticalWork(int mode) //前一根布线结束移到下一根布线起始(判定:偏移数据前是吐丝数据,后是吐丝数据) else if(oldDataForOffset == DATA_OPTI && tmpDat.ctrl == DATA_OPTI) { - -// MoveXYToPos(-1100, -6000, NULL); - -/* if(g_workCtrl.workPos[MTX_IDX] > 65000 || - g_workCtrl.workPos[MTY_IDX] > 44000) - { - MoveXYToPos(70700, 64000, NULL); - } - else - { - MoveXYToPos(-1100, -6000, NULL); - }*/ err = MoveU1ToPos(g_pOpticalMcPara->rkHighPos, NULL);//抬起机头 ReadMotosPos(); - if(g_workCtrl.workPos[MTX_IDX] <= g_motosPara.motosPos[MTX_IDX]) + if(g_workCtrl.workPos[MTX_IDX] <= (g_motosPara.motosPos[MTX_IDX] + 200)) { g_workCtrl.workPos[MTX_IDX] -= g_pOpticalMcPara->startPosoffx; g_optWorkCtrl.usecomx = 1; } - if(g_workCtrl.workPos[MTY_IDX] <= g_motosPara.motosPos[MTY_IDX]) + if(g_workCtrl.workPos[MTY_IDX] <= (g_motosPara.motosPos[MTY_IDX] + 200)) { g_workCtrl.workPos[MTY_IDX] -= g_pOpticalMcPara->startPosoffy; g_optWorkCtrl.usecomy = 1; @@ -7195,11 +7451,13 @@ int OpticalWork(int mode) { if(g_optWorkCtrl.usecomx == 1) { +// printf("usecomx \r\n"); g_workCtrl.workPos[MTX_IDX] += g_pOpticalMcPara->startPosoffx; g_optWorkCtrl.usecomx = 0; } if(g_optWorkCtrl.usecomy == 1) { +// printf("usecomy \r\n"); g_workCtrl.workPos[MTY_IDX] += g_pOpticalMcPara->startPosoffy; g_optWorkCtrl.usecomy = 0; } @@ -7221,7 +7479,7 @@ int OpticalWork(int mode) { FixMatCylinderOn();//顶料顶料 DelayRef(200); - ReadMotosPos(); //起始点到偏移的位置和移动到起始点反向增加间隙补偿 +/* ReadMotosPos(); //起始点到偏移的位置和移动到起始点反向增加间隙补偿 if(g_workCtrl.workPos[MTX_IDX] < g_motosPara.motosPos[MTX_IDX]) { @@ -7232,7 +7490,7 @@ int OpticalWork(int mode) { g_workCtrl.workPos[MTY_IDX] += g_pOpticalMcPara->yGapCorrect; g_optWorkCtrl.useGapCory = 1; - } + }*/ err = MoveR1ToPos(PitkToRpp(g_workCtrl.workPos[MTR1_IDX]),NULL); if (err == ERR_NONE) @@ -7345,7 +7603,6 @@ int OpticalWork(int mode) if(g_optWorkCtrl.opticalSta == 1)//断线检测报警 { err = ERR_NO_MATERIAL_ERROR; - g_optWorkCtrl.opticalSta = 0; } ReportError(err); @@ -7380,9 +7637,9 @@ int OpticalWork(int mode) if(g_optWorkCtrl.opticalSta == 1)//断线检测报警 { err = ERR_NO_MATERIAL_ERROR; + g_optWorkCtrl.IsNoMaterialEn = 0; g_optWorkCtrl.opticalSta = 0; } - OpticalCloseAll(); UpClipMatClipCylinderOn(); // 上夹料开 @@ -7442,9 +7699,11 @@ int OpticalWork(int mode) { OpticalCloseAll(); SetDatIdxToStart(); + Fan1MotoOff(); err = OpticalGotoFinishPos(); } + g_optWorkCtrl.IsNoMaterialEn = 0; g_workCtrl.cursta.workStatus &= ~(WORK_STA_BUSY|WORK_STA_WORKING); // 清除正在忙标志 @@ -7562,6 +7821,7 @@ void AllToReset(void) g_optWorkCtrl.motopreFlag = 0; // 已经压料标志 // g_optWorkCtrl.lowingFlag = 1; // 需要下降机头标志 + Fan1MotoOff(); err = MoveU1ToPos(g_pOpticalMcPara->rkHighPos, NULL);//抬起机头 if (err == ERR_NONE) @@ -7949,11 +8209,11 @@ int FastJump(u32 idx) { err = STA_WORK_OVER; // 结束 } - else +/* else { err = MoveXYRS1P1ToWorkPos(&curDat, NULL, 0, 0); } - printf("after move to work\r\n"); + printf("after move to work\r\n");*/ } } @@ -8023,7 +8283,7 @@ int OpticalStartWork(void) ReportError(err); - ReportError(ERR_NONE); +// ReportError(ERR_NONE); return err; } @@ -8306,6 +8566,19 @@ void OutputByHand(u16 obj, u16 act, u16 para) } break; } + case OT_FIXMAT: //顶料 + { + if (act == UP_OPEN_ON) + { + FixMatCylinderOff(); // 顶料气缸 + } + else // 关闭 + { + FixMatCylinderOn(); // 顶料气缸 + } + break; + } + case OT_BLOWING: // 放料 { if (act == UP_OPEN_ON) diff --git a/EMBOS/Users/App/user/optical/optical.h b/EMBOS/Users/App/user/optical/optical.h index 2dbe95c..c239ae3 100644 --- a/EMBOS/Users/App/user/optical/optical.h +++ b/EMBOS/Users/App/user/optical/optical.h @@ -19,6 +19,52 @@ #include "shell.h" #include "opticalpara.h" #include "workctrl.h" + +//-------------------------------功能模块配置------------------------------------------ + +#if (1) + +#define MATERIAL_SCAN 1 // 无料检测(断线检测) +#define SCAN_TIMEINTERVAL 1 // 使用时间间隔检测传感器 + +#define FEEDINGBACK_ADJUST 1 // 使用送料电机反转调整 +#define AFTERTURN_COMPEN 1 // 拐角补偿 + +#define XY_GAP_CONVERT 0 // 间隙补偿 + +#define MODULE_X 1 // X电机模块 +#define X_FINDZERO_DIR 1 // = -1, X向负方向找零位传感器; = 1, X向正方向找零位传感器; + + +#define MODULE_Y 1 // Y电机模块 + +#define MODULE_FEED_LL 0 // 进料模块 + +#define MOTO_LIFT 0 // 电机升降 +#define LIFT_U1 1 // 提升1模块 +#define LIFT_U2 0 // 提升2模块 +#define LIFT_U3 0 // 提升3模块 + +#define AIR_LIFT 0 // 气动升降 + +#define MOTO_TURN 1 // 电机旋转跟踪 +#define TURN_R1 1 // 旋转1模块 +#define TURN_R2 0 // 旋转2模块 +#define TURN_R3 0 // 旋转3模块 + +#define MODULE_SEND 1 //送料电机模块 +#define MODULE_PULL 1 //拉料电机模块 +#define MODULE_LOOSE 1 //松料电机模块 + +#define MODULE_PUSH 0 //推料 + +#define POS_EN_NONE 0x0000 +#define POS_EN_X 0x0001 +#define POS_EN_Y 0x0002 +#define POS_EN_XY 0x0003 + +#endif +//--------------------------------------------------------------------------------------------------- //----------------------------------------工作控制参数定义------------------------------------ typedef struct @@ -45,11 +91,14 @@ typedef struct //补偿 u8 runSteps1; // + u8 drZeroNum; //直线段数 s16 oldXCompenAfterTurn; // oldX拐弯之后的补偿 s16 oldYCompenAfterTurn; // oldY拐弯之后的补偿 s16 xCompenAfterTurn; // x拐弯之后的补偿 s16 yCompenAfterTurn; // y拐弯之后的补偿 s32 begainRBeforeWiring; // 布线起始角度 + s32 begainXBeforeWiring; // 布线起始位置X + s32 begainYBeforeWiring; // 布线起始位置Y u8 compenFlag1; // 可以补偿标志 //----------------------- @@ -59,6 +108,11 @@ typedef struct s32 IsNoMaterialScanLen; // 断线检测扫描长度 u8 IsNoMaterialFlag; // 断线标志 =0断线 u8 IsNoMaterialEn; // 断线检测扫描启动 +#if(SCAN_TIMEINTERVAL == 1) + u32 IsNoMaterialStart; // 断线检测扫描启动 + u32 IsNoMaterialScanTime; // 断线检测扫描时间 + u32 IsNoMaterialTime; // 断线检测已扫描时间 +#endif //----------------------- s32 encoder1Vale; // 编码器1值 s32 encoder2Vale; // 编码器2值 @@ -73,10 +127,14 @@ typedef struct u8 usecomx; // 使用反向运行补偿 u8 usecomy; // 使用反向运行补偿 - u8 useGapCorx; // 使用反向对接间隙补偿 - u8 useGapCory; // 使用反向对接间隙补偿 +// u8 useGapCorx; // 使用反向对接间隙补偿 +// u8 useGapCory; // 使用反向对接间隙补偿 int spinLenOffset; // 偏移长度 - +#if(FEEDINGBACK_ADJUST == 1) + u8 feedingOpit; // 送光纤 + u8 collectingOpit; // 收光纤 + u8 pointOpit; // 布线中 +#endif }OptWorkCtrl; OptWorkCtrl g_optWorkCtrl; @@ -96,51 +154,23 @@ typedef struct OptBorder g_optBorder; //---------------------------------------------------------------------------- - - -//-------------------------------功能模块配置------------------------------------------ - -#if (1) - -#define MATERIAL_SCAN 1 // 无料检测(断线检测) - -#define AFTERTURN_COMPEN 0 // 拐角补偿 - -#define XY_GAP_CONVERT 0 // 间隙补偿 - -#define MODULE_X 1 // X电机模块 -#define X_FINDZERO_DIR 1 // = -1, X向负方向找零位传感器; = 1, X向正方向找零位传感器; - - -#define MODULE_Y 1 // Y电机模块 - -#define MODULE_FEED_LL 0 // 进料模块 - -#define MOTO_LIFT 1 // 电机升降 -#define LIFT_U1 1 // 提升1模块 -#define LIFT_U2 0 // 提升2模块 -#define LIFT_U3 0 // 提升3模块 - -#define AIR_LIFT 0 // 气动升降 - -#define MOTO_TURN 1 // 电机旋转跟踪 -#define TURN_R1 1 // 旋转1模块 -#define TURN_R2 0 // 旋转2模块 -#define TURN_R3 0 // 旋转3模块 - -#define MODULE_SEND 1 //送料电机模块 -#define MODULE_PULL 1 //拉料电机模块 -#define MODULE_LOOSE 1 //松料电机模块 - - -#define POS_EN_NONE 0x0000 -#define POS_EN_X 0x0001 -#define POS_EN_Y 0x0002 -#define POS_EN_XY 0x0003 - -#endif -//--------------------------------------------------------------------------------------------------- - +#define FUNC_BIT0 0x01 +#define FUNC_BIT1 0x02 +#define FUNC_BIT2 0x04 +#define FUNC_BIT3 0x08 +#define FUNC_BIT4 0x10 +#define FUNC_BIT5 0x20 +#define FUNC_BIT6 0x40 +#define FUNC_BIT7 0x80 +#define FUNC_BIT8 0x100 +#define FUNC_BIT9 0x200 +#define FUNC_BIT10 0x400 +#define FUNC_BIT11 0x800 +#define FUNC_BIT12 0x1000 +#define FUNC_BIT13 0x2000 +#define FUNC_BIT14 0x4000 +#define FUNC_BIT15 0x8000 +#define FUNC_BIT16 0x10000 //-------------------------------------------输入输出信号--------------------------------------------- @@ -210,10 +240,15 @@ OptBorder g_optBorder; #define CORE_INPUT16_IDX DSS_DEF_IDX #define CORE_INPUT16_BIT DSS_DEF_BIT -// J16 -#define IsBlowingCylinderPlaceOn() GetExInput(1) -#define CORE_INPUT17_IDX DSS_DEF_IDX -#define CORE_INPUT17_BIT DSS_DEF_BIT +#if(AIR_LIFT == 1) +#define IN_ADJUST_LIFT_HIGH FUNC_BIT0 // 机头升降上位 +#define IN_ADJUST_LIFT_LOW FUNC_BIT1 // 机头升降下位 +#endif + +#if(MODULE_PUSH == 1) +#define IN_ADJUST_PUSH_ON FUNC_BIT2 // 推料出位 +#define IN_ADJUST_PUSH_OFF FUNC_BIT3 // 推料回位 +#endif //输出信号 // H1 @@ -238,8 +273,26 @@ OptBorder g_optBorder; #define Fan1MotoOn Output7On // 风机正转开 #define Fan1MotoOff Output7Off // 风机正转关 +#define LooseMotorOn Output8On // 松料电机反转开 +#define LooseMotorOff Output8Off // 松料电机反转关 + +#if(MAX_SUPPORT_EXTIO >= 1) +#define FixMatCylinderOn() do{SetExtOutputOn(1,FUNC_BIT0);}while(0)//顶料气缸开 +#define FixMatCylinderOff() do{SetExtOutputOff(1,FUNC_BIT0);}while(0)//顶料气缸关 +#else #define FixMatCylinderOn() do{SetExOutput(1,0);}while(0)//顶料气缸开 #define FixMatCylinderOff() do{SetExOutput(1,1);}while(0)//顶料气缸关 +#endif + +#if(AIR_LIFT == 1) +#define HeadLiftUp() do{SetExtOutputOn(1,FUNC_BIT1);}while(0)//机头升降上升 +#define HeadLiftDown() do{SetExtOutputOff(1,FUNC_BIT1);}while(0)//机头升降下降 +#endif + +#if(MODULE_PUSH == 1) +#define PushMatCylinderOn() do{SetExtOutputOn(1,FUNC_BIT2);}while(0)//推料气缸开 +#define PushMatCylinderOff() do{SetExtOutputOff(1,FUNC_BIT2);}while(0)//推料气缸开 +#endif //输入输出信号名称 static const char g_opticalInputName[INPUT_NUM][INPUT_STR_LEN] = { @@ -453,8 +506,8 @@ static const char g_opticalOutputName[OUTPUT_NUM][OUTPUT_STR_LEN] = #define OT_OWNCLIP 0x0110 // 下夹料气缸控制 开/关 #define OT_UPCLIP 0x0111 // 上夹料气缸控制 开/关 #define OT_HEAD_SPIN 0x0112 // 机头旋转控制 +#define OT_FIXMAT 0x0113 // 顶料气缸控制 开/关 -#define OT_RESERVE1 0x0113 // 预留1 #define OT_RESERVE2 0x0114 // 预留2 #define OT_HEAD_UPDOWN 0x0119 // 机头升降控制 diff --git a/EMBOS/Users/App/user/optical/opticalpara.h b/EMBOS/Users/App/user/optical/opticalpara.h index 0801761..155b7b4 100644 --- a/EMBOS/Users/App/user/optical/opticalpara.h +++ b/EMBOS/Users/App/user/optical/opticalpara.h @@ -113,7 +113,7 @@ typedef struct u32 rkLiftAng; // 加工抬刀角度,范围 0--18000,单位0.01度 s32 opitEndPosOffset; // 吐丝结束位置偏移, 范围:0--2000,单位0.01mm //155 - u32 rev156; + u32 PreWaitTime; // 压料延时时间,范围 0--5000,单位ms u32 rev157; u32 rev158; u32 rev159; @@ -360,7 +360,7 @@ static const char * g_opticalMcParastrlist[PARA_NUM] = "加工抬刀角度", "吐丝结束位置偏移", // 155 - "", + "压料延时时间", "", "", "", @@ -675,7 +675,7 @@ static const u32 g_defOpticalMcParaList[PARA_NUM][4] = {PTYPE_U, 0, 18000, 0}, // u32 rkLiftAng; // 加工抬刀角度,范围 0--18000,单位0.01度 {PTYPE_S, 0, 2000,1000}, // s32 opitEndPosOffset; // 吐丝结束位置偏移, 范围:0--2000,单位0.01mm // 155 - {PTYPE_U, 0, 0, 0}, // + {PTYPE_U, 0, 5000, 200}, // u32 PreWaitTime; // 压料延时时间,范围 0--5000,单位ms {PTYPE_U, 0, 0, 0}, // {PTYPE_U, 0, 0, 0}, // {PTYPE_U, 0, 0, 0}, //