#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轴运动时速度为20,Y轴运动时速度为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轴运动时速度为20,Y轴运动时速度为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; //}