This commit is contained in:
Chenwenxuan
2024-03-06 14:54:30 +08:00
commit edac2715f0
1525 changed files with 809982 additions and 0 deletions

View File

@@ -0,0 +1,190 @@
#include "csscancode.h"
CSScanCode::CSScanCode()
{
}
CSScanCode::~CSScanCode()
{
}
void CSScanCode::setRSToZeroXPos(double value)
{
RSToZeroXPos = value;
}
void CSScanCode::setRSToZeroYPos(double value)
{
RSToZeroYPos = value;
}
void CSScanCode::setRSToZeroZ1Pos(double value)
{
RSToZeroZ1Pos = value;
}
void CSScanCode::setXWorkRange(double value)
{
xWorkRange = value;
}
void CSScanCode::setYWorkRange(double value)
{
yWorkRange = value;
}
void CSScanCode::setXSampInterval(double value)
{
xSampInterval = value;
}
void CSScanCode::setYSampInterval(double value)
{
ySampInterval = value;
}
int CSScanCode::getSampTotalNum()
{
int xLineSegmentCounts,yLineSegmentCounts;
// y线段数比x线段数多1
yLineSegmentCounts = int(yWorkRange/ySampInterval);
xLineSegmentCounts = yLineSegmentCounts+1;
int xSampCounts,ySampCounts;
xSampCounts = (accDecSampCount+int(xWorkRange*xNumberOfUnitSamples))*xLineSegmentCounts;
ySampCounts = int(yWorkRange*yNumberOfUnitSamples)+yNumberOfLineSegmentSamples*(yLineSegmentCounts-1);
return ySampCounts + xSampCounts;
}
QString CSScanCode::getCode()
{
QString code = QString("GLOBAL REAL scanData(2)(%1),RSData(%1),xPosData(%1),xWorkRange\n").arg(getSampTotalNum())+
QString("GLOBAL INT SampTotalNum=%1\n").arg(getSampTotalNum())+
QString("GLOBAL REAL RSToZeroXPos=%1,RSToZeroYPos=%2\n").arg(RSToZeroXPos).arg(RSToZeroYPos)+
//QString("GLOBAL REAL RSToZeroZ1Pos=%1\n").arg(RSToZeroZ1Pos)+
"REAL xPos,yPos\n"+
//"REAL xStartPos,yStartPos\n"+
QString("REAL yInterval = %1\n").arg(ySampInterval)+
"ENABLE (X,Y)\n"
// 禁用Z1轴补偿
"MFLAGS(Z).#DEFCON=1\n"
// 停止buffer0运行
"STOP 0\n"
"START 0,1\n"+
// 初始化数组
QString("FILL(%1,scanData,0,0,0,%2); FILL(0, scanData,1,1,0,%2)\n").arg(rangeInitValue).arg(getSampTotalNum()-1)+
//"ACC(X)=8000;DEC(X)=8000;KDEC(X)=120000;JERK(X)=120000; ACC(Y)=8000;DEC(Y)=8000;KDEC(Y)=120000;JERK(Y)=120000;\n "
"ACC(X)=8000;DEC(X)=8000;KDEC(X)=120000;JERK(X)=120000; ACC(Y)=500;DEC(Y)=500;KDEC(Y)=5000;JERK(Y)=5000;\n "
// 设置X、Y轴到位精度,会对INPOS什么时候变为1有影响
"TARGRAD(X) = 0.0001; TARGRAD(Y) = 0.0001\n"
"WAIT 200\n"+
//"xStartPos = FPOS(X);yStartPos = FPOS(Y)\n"+
// 设置X,Y轴起始位置。Y轴的起始位置把加减速段考虑进去
QString("xPos = FPOS(X)-%1;yPos = FPOS(Y)\n").arg(AccDecDist)+
// X、Y轴走到起始位置速度为60mm/s
"PTP/EV (X,Y),xPos,yPos,100\n"+
// Y轴的工作范围等于设置的工作范围+加速距离+减速距离
QString("xWorkRange = %1\n").arg(xWorkRange+2*AccDecDist)+
// 定义同步采集采集测距传感器值、Y轴坐标采集间隔为0.1ms,采集总数为sampTotalNum
QString("DC/s X,scanData,%1,1,RangeV,FPOS(X)\n").arg(getSampTotalNum())+
// 定义分段运动起始位置为xStart,yStart,结束速度为vel
QString("XSEG/vy (X,Y),xPos,yPos,%1\n").arg(xAxisVel)+
// 循环次数等于Y线段数
QString("LOOP %1\n").arg(yWorkRange/ySampInterval+1)+
// X轴位置不变Y轴移动工作范围距离
// 第1段运动Y轴向正方向移动测距头向Y负方向移动
"xPos = xPos+xWorkRange\n"+
QString("LINE/v (X,Y),xPos,yPos,%1\n").arg(xAxisVel)+
// Y轴位置不变X轴向正向移动一个步距
"yPos = yPos+yInterval\n"+
// /v参数定义当前和后续线段的速度/f 定义当前线段结束时的速度
// 意思就是说X轴运动时速度为20Y轴运动时速度为100
QString("LINE/v (X,Y),xPos,yPos,%1\n").arg(yAxisVel)+
//QString("LINE/vf (X,Y),xPos,yPos,%1,%2\n").arg(xAxisVel).arg(yAxisVel)+
// Y轴移动工作距离范围取反
"xWorkRange=(-1)*xWorkRange\n"
"END\n"
"ENDS (X,Y)\n"
// 阻塞,等待多段运动结束
"TILL ^AST(X).5 & ^AST(Y).5 & GSEG(Y) = -1\n"
// 停止采集
"STOPDC/s X\n"
"INT validDataEndIndex\n"+
// 在0~(sampTotalNum-1)范围内找到第一个最大值并返回其索引(最大值为数组初始化值,索引为采集的测距值最后一个的索引+1
QString("validDataEndIndex=MAXI(scanData,0,0,0,%1)\n").arg(getSampTotalNum()-1)+
// 把采集的测距值拷贝到 RSData数组中把采集的Y轴的坐标放到xPosData数组中
"COPY(scanData,RSData,0,0,0,validDataEndIndex,0,validDataEndIndex); COPY(scanData,xPosData,1,1,0,validDataEndIndex,0,validDataEndIndex)\n"
"PTP/EV (X,Y),RSToZeroXPos,RSToZeroYPos,100\n"
//"PTP/ERV (Z),RSToZeroZ1Pos,1\n"
"WAIT 200\n"
"runF = 1\n"
"STOP";
return code;
}
//{
// QString code = QString("GLOBAL REAL scanData(2)(%1),RSData(%1),yPosData(%1),yWorkRange\n").arg(getSampTotalNum())+
// QString("GLOBAL INT SampTotalNum=%1\n").arg(getSampTotalNum())+
// QString("GLOBAL REAL RSToZeroXPos=%1,RSToZeroYPos=%2\n").arg(RSToZeroXPos).arg(RSToZeroYPos)+
// "REAL xPos,yPos\n"+
// //"REAL xStartPos,yStartPos\n"+
// QString("REAL xInterval = %1\n").arg(xSampInterval)+
// "ENABLE (X,Y)\n"
// // 禁用Z1轴补偿
// "MFLAGS(Z).#DEFCON=1\n"
// // 停止buffer0运行
// "STOP 0\n"
// "START 0,1\n"+
// // 初始化数组
// QString("FILL(%1,scanData,0,0,0,%2); FILL(0, scanData,1,1,0,%2)\n").arg(rangeInitValue).arg(getSampTotalNum()-1)+
// //"ACC(X)=8000;DEC(X)=8000;KDEC(X)=120000;JERK(X)=120000; ACC(Y)=8000;DEC(Y)=8000;KDEC(Y)=120000;JERK(Y)=120000;\n "
// "ACC(X)=5000;DEC(X)=5000;KDEC(X)=5000;JERK(X)=5000; ACC(Y)=8000;DEC(Y)=8000;KDEC(Y)=120000;JERK(Y)=120000;\n "
// // 设置X、Y轴到位精度,会对INPOS什么时候变为1有影响
// "TARGRAD(X) = 0.0001; TARGRAD(Y) = 0.0001\n"
// "WAIT 200\n"+
// //"xStartPos = FPOS(X);yStartPos = FPOS(Y)\n"+
// // 设置X,Y轴起始位置。Y轴的起始位置把加减速段考虑进去
// QString("xPos = FPOS(X);yPos = FPOS(Y)-%1\n").arg(AccDecDist)+
// // X、Y轴走到起始位置速度为60mm/s
// "PTP/EV (X,Y),xPos,yPos,60\n"+
// // Y轴的工作范围等于设置的工作范围+加速距离+减速距离
// QString("yWorkRange = %1\n").arg(yWorkRange+2*AccDecDist)+
// // 定义同步采集采集测距传感器值、Y轴坐标采集间隔为0.1ms,采集总数为sampTotalNum
// QString("DC/s Y,scanData,%1,1,RangeV,FPOS(Y)\n").arg(getSampTotalNum())+
// // 定义分段运动起始位置为xStart,yStart,结束速度为vel
// QString("XSEG/vy (X,Y),xPos,yPos,%1\n").arg(yAxisVel)+
// // 循环次数等于Y线段数
// QString("LOOP %1\n").arg(xWorkRange/xSampInterval+1)+
// // X轴位置不变Y轴移动工作范围距离
// // 第1段运动Y轴向正方向移动测距头向Y负方向移动
// "yPos = yPos+yWorkRange\n"+
// QString("LINE/v (X,Y),xPos,yPos,%1\n").arg(yAxisVel)+
// // Y轴位置不变X轴向正向移动一个步距
// "xPos = xPos+xInterval\n"+
// // /v参数定义当前和后续线段的速度/f 定义当前线段结束时的速度
// // 意思就是说X轴运动时速度为20Y轴运动时速度为100
// QString("LINE/vf (X,Y),xPos,yPos,%1,%2\n").arg(xAxisVel).arg(yAxisVel)+
// // Y轴移动工作距离范围取反
// "yWorkRange=(-1)*yWorkRange\n"
// "END\n"
// "ENDS (X,Y)\n"
// // 阻塞,等待多段运动结束
// "TILL ^AST(Y).5 & ^AST(X).5 & GSEG(X) = -1\n"
// // 停止采集
// "STOPDC/s Y\n"
// "INT validDataEndIndex\n"+
// // 在0~(sampTotalNum-1)范围内找到第一个最大值并返回其索引(最大值为数组初始化值,索引为采集的测距值最后一个的索引+1
// QString("validDataEndIndex=MAXI(scanData,0,0,0,%1)\n").arg(getSampTotalNum()-1)+
// // 把采集的测距值拷贝到 RSData数组中把采集的Y轴的坐标放到yPosData数组中
// "COPY(scanData,RSData,0,0,0,validDataEndIndex,0,validDataEndIndex); COPY(scanData,yPosData,1,1,0,validDataEndIndex,0,validDataEndIndex)\n"
// "PTP/EV (X,Y),RSToZeroXPos,RSToZeroYPos,60\n"
// "runF = 1\n"
// "STOP";
// return code;
//}