固高运动控制器坐标系轴映射问题

固高运动控制器坐标系轴映射问题

        在点胶、切割、焊接等需要跑轨迹的时候经常要使用插补。很多用户在使用固高运动控制器的插补功能时经常遇到坐标系建立时指令返回7。现在就针对这个问题说一下固高运动控制器插补坐标系里的轴映射问题。

        假设现在用固高GTS系列运动控制卡,要建立一个二维坐标系,以轴3作为X轴,轴2作为Y轴,我们看如下的代码:

// TCrdPrm结构体变量,该结构体定义了坐标系
TCrdPrm crdPrm;
// 将结构体变量初始化为0
memset(&crdPrm, 0, sizeof(crdPrm));
// 为结构体赋值
crdPrm.dimension = 2; 
crdPrm.synVelMax = 500; 
crdPrm.synAccMax = 1; 
crdPrm.evenTime = 50; 
crdPrm.profile[0] = 3; 
crdPrm.profile[1] = 2; 
crdPrm.setOriginFlag = 1; 
crdPrm.originPos[0] = 100; 
crdPrm.originPos[1] = 100;
// 建立1号坐标系,设置坐标系参数
sRtn = GT_SetCrdPrm(1, &crdPrm);

        这样建立坐标系GT_SetCrdPrm肯定会返回7,原因是很多用户认为crdPrm.profile[0] 表示坐标系的X轴,crdPrm.profile[1] 表示坐标系里的Y轴,轴3作为X轴就设置crdPrm.profile[0] =3,轴2作为Y轴就设置成crdPrm.profile[1] = 2。实际上crdPrm.profile[0]表示轴1,crdPrm.profile[1] 表示轴2,以此类推。坐标系中的轴以1代表X轴,2代表Y轴,以此类推。因此,应该写为:

// TCrdPrm结构体变量,该结构体定义了坐标系
TCrdPrm crdPrm;
// 将结构体变量初始化为0
memset(&crdPrm, 0, sizeof(crdPrm));
// 为结构体赋值
crdPrm.dimension = 2;         //建立二维坐标系
crdPrm.synVelMax = 500;      //最大速度500pulse/ms
crdPrm.synAccMax = 1;        //最大加速度1pulse/ms^2
crdPrm.evenTime = 50;         
crdPrm.profile[2] = 1;          //轴3设置为X轴
crdPrm.profile[1] = 2;          //轴2设置为Y轴
crdPrm.setOriginFlag = 1; 
crdPrm.originPos[2] = 100;      //坐标系原点X坐标为100pulse
crdPrm.originPos[1] = 100;      //坐标系原点Y坐标为100pulse
// 建立1号坐标系,设置坐标系参数
sRtn = GT_SetCrdPrm(crd, &crdPrm);

        此外,对于固高GTS 14轴和16轴和GSN等的GXN系列的运动控制卡,由于卡的总轴数可能超过了8轴,使用时可能使用第8轴以后的轴进行插补,由于结构体TCrdPrm中的轴是连续的8个轴,那么如何实现第8轴以后的轴参与插补呢?

        在GXN系列运动控制卡中,有一条指令GTN_SetCrdMapBase 可以设置结构体TCrdPrm中的连续8个轴的起始轴轴号。

        假设在GSN运动控制卡中使用轴8作为X轴,轴9作为Y轴,轴10作为Z轴建立三维坐标系,那么我们可以调指令GTN_SetCrdMapBase把轴8设置为结构体TCrdPrm中连续8个轴的起始轴(当然也可以设置其他轴作为起始轴,只要这连续的8个轴把第8、9、10轴包含在内即可)。代码如下:

sRtn = GTN_SetCrdMapBase(core,crd,8); //设置轴8位坐标系规划映射的起始轴
// TCrdPrm结构体变量,该结构体定义了坐标系
TCrdPrm crdPrm;
// 将结构体变量初始化为0
memset(&crdPrm, 0, sizeof(crdPrm));
// 为结构体赋值
crdPrm.dimension = 3;         //建立三维坐标系
crdPrm.synVelMax = 500;      //最大速度500pulse/ms
crdPrm.synAccMax = 1;        //最大加速度1pulse/ms^2
crdPrm.evenTime = 50;         
crdPrm.profile[0] = 1;          //轴8设置为X轴
crdPrm.profile[1] = 2;          //轴9设置为Y轴
crdPrm.profile[2] = 3;          //轴10设置为Z轴
crdPrm.setOriginFlag = 1; 
crdPrm.originPos[0] = 0; 
crdPrm.originPos[1] = 0;
crdPrm.originPos[2] = 0;
// 建立1号坐标系,设置坐标系参数
sRtn = GTN_SetCrdPrm(1, &crdPrm);

        调指令GTN_SetCrdMapBase设置第8轴位坐标系规划映射起始轴后,crdPrm.profile[0]表示轴8,crdPrm.profile[1]表示轴9,crdPrm.profile[2]表示轴10,以此类推。

我也是有底线哒~
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

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

    暂无评论内容