在运动控制器的初始状态下,复位之后或者还未使用过插补运动状态下,所有的规划轴都处于
单轴运动模式下,两个坐标系也是无效的。
进行插补运动时,首先需要建立坐标系,将规划
轴映射到相应的坐标系中 。
short sRtn;
short cardNum = 0;
mc.TCrdPrm crdPrm = new TCrdPrm(); ;
crdPrm.dimension = 2; // 坐标系为二维坐标系
crdPrm.synVelMax = 500; // 最大合成速度:500pulse/ms
crdPrm.synAccMax = 1; // 最大加速度:1pulse/ms^2
crdPrm.evenTime = 50; // 最小匀速时间:50ms
crdPrm.profile1 = 1; // 规划器1对应到X轴
crdPrm.profile2 = 2; // 规划器2对应到Y轴
crdPrm.setOriginFlag = 1; // 表示需要指定坐标系的原点坐标的规划位置
crdPrm.originPos1 = 100; // 坐标系的原点坐标的规划位置为(100, 100)
crdPrm.originPos2 = 100;
sRtn = GT_SetCrdPrm(cardNum, 1, ref crdPrm);
// 坐标系运动状态查询变量
short run;
// 坐标系的缓存区剩余空间查询变量
int segment;
// 坐标系的缓存区剩余空间查询变量
int space;
// 即将把数据存入坐标系1的FIFO0中,所以要首先清除此缓存区中的数据
sRtn = mc.GT_CrdClear(cardNum, 1, 0);
// 向缓存区写入第一段插补数据
sRtn = mc.GT_LnXY(cardNum,
1, // 该插补段的坐标系是坐标系1
x, y, // 该插补段的终点坐标(200000, 0)
100, // 该插补段的目标速度:100pulse/ms
0.1, // 插补段的加速度:0.1pulse/ms^2
0, // 终点速度为0
0); // 向坐标系1的FIFO0缓存区传递该直线插补数据
// 查询坐标系1的FIFO0所剩余的空间
sRtn = GT_CrdSpace(cardNum, 1, out space, 0);
// 启动坐标系1的FIFO0的插补运动
sRtn = GT_CrdStart(cardNum, 1, 0);
// 等待运动完成
sRtn = GT_CrdStatus(cardNum, 1, out run, out segment, 0);
do
{
// 查询坐标系1的FIFO的插补运动状态
sRtn = mc.GT_CrdStatus(cardNum,
1, // 坐标系是坐标系1
out run, // 读取插补运动状态
out segment, // 读取当前已经完成的插补段数
0); // 查询坐标系1的FIFO0缓存区
// 坐标系在运动, 查询到的run的值为1
} while (run == 1);
版权声明:本文为weixin_44713908原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。