init
This commit is contained in:
100
device/control/acs/buffercode/sscancode.cpp
Normal file
100
device/control/acs/buffercode/sscancode.cpp
Normal file
@@ -0,0 +1,100 @@
|
||||
#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轴运动时速度为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)+
|
||||
// 把采集的测距值拷贝到 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user