优化间隙补偿,增加风机自动控制动作

This commit is contained in:
杨梦 2025-10-21 09:14:38 +08:00
parent f024a6318b
commit 27e0231636
2 changed files with 154 additions and 35 deletions

View File

@ -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)

View File

@ -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 // 间隙补偿