Files
Chenwenxuan edac2715f0 init
2024-03-06 14:54:30 +08:00

101 lines
3.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "sscancode.h"
SScanCode::SScanCode()
{
}
void SScanCode::setXWorkRange(double value)
{
xWorkRange = value;
}
void SScanCode::setYWorkRange(double value)
{
yWorkRange = value;
}
void SScanCode::setXSampInterval(double value)
{
xSampInterval = value;
}
void SScanCode::setYSampInterval(double value)
{
ySampInterval = value;
}
int SScanCode::getSampTotalNum()
{
int xLineSegmentCounts,yLineSegmentCounts;
// y线段数比x线段数多1
xLineSegmentCounts = int(xWorkRange/xSampInterval);
yLineSegmentCounts = xLineSegmentCounts+1;
int xSampCounts,ySampCounts;
ySampCounts = (accDecSampCount+int(yWorkRange*yNumberOfUnitSamples))*yLineSegmentCounts;
xSampCounts = int(xWorkRange*xNumberOfUnitSamples)+xNumberOfLineSegmentSamples*(xLineSegmentCounts-1);
return ySampCounts + xSampCounts;
}
QString SScanCode::getCode()
{
QString code = QString("GLOBAL REAL scanData(2)(%1),rangeData(%1),yPosData(%1),yWorkRange\n").arg(getSampTotalNum());
code +="REAL xPos,yPos\n"+
QString("REAL xInterval = %1\n").arg(xSampInterval)+
"ENABLE (X,Y)\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 "
// 设置X、Y轴到位精度,会对INPOS什么时候变为1有影响
"TARGRAD(X) = 0.0001; TARGRAD(Y) = 0.0001\n"
"WAIT 200\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)+
// 把采集的测距值拷贝到 rangeData数组中把采集的Y轴的坐标放到yPosData数组中
"COPY(scanData,rangeData,0,0,0,validDataEndIndex,0,validDataEndIndex); COPY(scanData,yPosData,1,1,0,validDataEndIndex,0,validDataEndIndex)\n"
"runF = 1\n"
"STOP";
return code;
}