位置比较通常用于实现飞拍,固高GTS支持一维和二维位置比较。下面看一下位置比较的使用流程:
1 初始化位置比较
1.1 设置位置比较参数
public static void InitPosCompare(short cardNum, short chn,short psCmprMode, T2DComparePrm Prm)
{
short sRtn;
sRtn = gts.mc.GT_2DCompareStop(cardNum, chn);
WriteLog.commandhandler("GT_2DCompareClear", sRtn);
sRtn = gts.mc.GT_2DCompareClear(cardNum, chn);
WriteLog.commandhandler("GT_2DCompareClear", sRtn);
sRtn = gts.mc.GT_2DCompareMode(cardNum, chn, psCmprMode);
WriteLog.commandhandler("GT_2DCompareMode", sRtn);
sRtn = gts.mc.GT_2DCompareSetPrm(cardNum, chn, ref Prm);
WriteLog.commandhandler("GT_2DCompareSetPrm", sRtn);
}
1.2 设置位置比较数据
public static void SetPosCompareData(short cardNum, short chn, short count, ref T2DCompareData pBuf, short fifo)
{
short sRtn;
sRtn = gts.mc.GT_2DCompareData(cardNum, chn, count, ref pBuf, fifo);
WriteLog.commandhandler("GT_2DCompareData", sRtn);
}
1.3 启动位置比较
public static void StartPosCompare(short cardNum, short chn)
{
short sRtn;
sRtn = gts.mc.GT_2DCompareStart(cardNum, chn);
WriteLog.commandhandler("GT_2DCompareStart", sRtn);
}
初始化位置比较的代码块:
short maxerr = 0;
short pulseWidth = 10;
short.TryParse(textBox_maxerr.Text,out maxerr);
short.TryParse(textBox_width.Text, out pulseWidth);
gts.mc.T2DCompareData[] databuf = new gts.mc.T2DCompareData[5]; //二维位置比较输出数据
gts.mc.T2DComparePrm Prm=new T2DComparePrm(); //二维位置比较输出参数
if(mode==0)
{
Prm.encx = axisX; // 比较轴X
Prm.ency = axisX; // 比较轴Y
databuf[0].px = 0;
databuf[0].py = 1000;//第1个输出点
databuf[1].px = 0;
databuf[1].py = 1500;//第2个输出点
databuf[2].px = 0;
databuf[2].py = 2000;//第3个输出点
databuf[3].px = 0;
databuf[3].py = 2500;//第4个输出点
databuf[4].px = 0;
databuf[4].py = 3000;//第5个输出点
}
else if(mode == 1)
{
Prm.encx = axisX; // 比较轴X
Prm.ency = axisY; // 比较轴Y
databuf[0].px = 1000;
databuf[0].py = 1000;//第1个输出点
databuf[1].px = 1500;
databuf[1].py = 1500;//第2个输出点
databuf[2].px = 2000;
databuf[2].py = 2000;//第3个输出点
databuf[3].px = 2500;
databuf[3].py = 2500;//第4个输出点
databuf[4].px = 3000;
databuf[4].py = 3000;//第5个输出点
}
Prm.maxerr = maxerr; // 最大误差Pulse
Prm.outputType = outputMode; // 输出脉冲类型
Prm.source = pscmpSource; // /比较源0:规划,1:编码器
Prm.startLevel = 0; // 修改引脚初始化电平
Prm.threshold = 0; //该参数设置为0
Prm.time = pulseWidth; // 脉冲宽度 us
//设置位置比较参数
GTSControl.InitPosCompare(cardNum, pscmpIndex, pscmpMode, Prm);
//设置位置比较数据
GTSControl.SetPosCompareData(cardNum, pscmpIndex, 5, ref databuf[0], 0);
//启动位置比较
GTSControl.StartPosCompare(cardNum, pscmpIndex);
2 启动运动
if (mode==0)//一维位置比较情况下,运动模式选择单轴点位运动
{
gts.mc.TTrapPrm trapPrm = new gts.mc.TTrapPrm();
trapPrm.acc = 0.5;
trapPrm.dec = 0.5;
trapPrm.velStart = 0;
trapPrm.smoothTime = 10;
GTSControl.TrapMotion(cardNum, axisX, vel * axisScale / 1000, posX * axisScale,ref trapPrm, 1);
}
else if(mode == 1)//二维位置比较情况下,运动模式选择插补运动
{
short[] crdAxis = new short[2] { axisX, axisY };
int[] originPos = new int[2] { 0, 0 };
//建立坐标系
GTSControl.CreateCrd(cardNum, 1, 2, crdAxis, originPos);
//XY直线插补数据
GTSControl.CrdLineXY2D(cardNum, 1, posX * axisScale, posY * axisScale, vel * axisScale / 1000, acc * axisScale / 1000000, false);
//启动插补
GTSControl.CrdStart(cardNum, 1, false);
WriteLog.LogHandler("插补运动开始");
}
完整demo代码下载链接购买后可见,需要demo的完整代码,请在下方下载!

我也是有底线哒~
© 版权声明
THE END
暂无评论内容