一个工控人创作、分享、交流的高质量平台!
一个工控人创作、分享、交流的高质量平台!

固高GTS位置比较使用方法

位置比较通常用于实现飞拍,固高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的完整代码,请在下方下载!

我也是有底线哒~
固高GTS位置比较使用方法-工控吧!
固高GTS位置比较使用方法
此内容为付费资源,请付费后查看
300积分
付费资源
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容