From 27e02316363a17cedc32aa1bf125e76f96927716 Mon Sep 17 00:00:00 2001 From: "YM\\yangmeng" <3085907267@qq.com> Date: Tue, 21 Oct 2025 09:14:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=97=B4=E9=9A=99=E8=A1=A5?= =?UTF-8?q?=E5=81=BF=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=A3=8E=E6=9C=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8E=A7=E5=88=B6=E5=8A=A8=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EMBOS/Users/App/user/optical/optical.c | 180 ++++++++++++++++++++----- EMBOS/Users/App/user/optical/optical.h | 9 +- 2 files changed, 154 insertions(+), 35 deletions(-) diff --git a/EMBOS/Users/App/user/optical/optical.c b/EMBOS/Users/App/user/optical/optical.c index 53d7ac2..351cac4 100644 --- a/EMBOS/Users/App/user/optical/optical.c +++ b/EMBOS/Users/App/user/optical/optical.c @@ -5892,8 +5892,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 +5990,7 @@ int OpticalRefreshDat(u32 para1, u32 para2) } else if(pFlCtrl->dtype == DATA_OPTI) // 吐丝数据 { + // //速度匹配 // if(IsOptStoringHigh2() == SENSOR_ON ) // { @@ -6227,8 +6228,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 +6242,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; +// } } } } @@ -6402,20 +6531,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); @@ -6684,6 +6809,7 @@ int OpticalWork(int mode) // 吐丝数据动作处理 if (curDat.ctrl == DATA_OPTI) { +// g_optWorkCtrl.runSteps1 = 0; g_optWorkCtrl.motoRunFlag = 1; err = MoveR1ToPos(2500, NULL);//旋转到吐丝位置:90° @@ -6754,8 +6880,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) { @@ -7028,7 +7154,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 +7163,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 +7287,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; @@ -7221,7 +7335,7 @@ int OpticalWork(int mode) { FixMatCylinderOn();//顶料顶料 DelayRef(200); - ReadMotosPos(); //起始点到偏移的位置和移动到起始点反向增加间隙补偿 +/* ReadMotosPos(); //起始点到偏移的位置和移动到起始点反向增加间隙补偿 if(g_workCtrl.workPos[MTX_IDX] < g_motosPara.motosPos[MTX_IDX]) { @@ -7232,7 +7346,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) @@ -7442,6 +7556,7 @@ int OpticalWork(int mode) { OpticalCloseAll(); SetDatIdxToStart(); + Fan1MotoOff(); err = OpticalGotoFinishPos(); } @@ -7562,6 +7677,7 @@ void AllToReset(void) g_optWorkCtrl.motopreFlag = 0; // 已经压料标志 // g_optWorkCtrl.lowingFlag = 1; // 需要下降机头标志 + Fan1MotoOff(); err = MoveU1ToPos(g_pOpticalMcPara->rkHighPos, NULL);//抬起机头 if (err == ERR_NONE) diff --git a/EMBOS/Users/App/user/optical/optical.h b/EMBOS/Users/App/user/optical/optical.h index 2dbe95c..cae6ce3 100644 --- a/EMBOS/Users/App/user/optical/optical.h +++ b/EMBOS/Users/App/user/optical/optical.h @@ -45,11 +45,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; // 可以补偿标志 //----------------------- @@ -73,8 +76,8 @@ typedef struct u8 usecomx; // 使用反向运行补偿 u8 usecomy; // 使用反向运行补偿 - u8 useGapCorx; // 使用反向对接间隙补偿 - u8 useGapCory; // 使用反向对接间隙补偿 +// u8 useGapCorx; // 使用反向对接间隙补偿 +// u8 useGapCory; // 使用反向对接间隙补偿 int spinLenOffset; // 偏移长度 }OptWorkCtrl; @@ -104,7 +107,7 @@ OptBorder g_optBorder; #define MATERIAL_SCAN 1 // 无料检测(断线检测) -#define AFTERTURN_COMPEN 0 // 拐角补偿 +#define AFTERTURN_COMPEN 1 // 拐角补偿 #define XY_GAP_CONVERT 0 // 间隙补偿