C# 固高运动控制卡插补
在运动控制器的初始状态下,复位之后或者还未使用过插补运动状态下,所有的规划轴都处于
单轴运动模式下,两个坐标系也是无效的。
进行插补运动时,首先需要建立坐标系,将规划
轴映射到相应的坐标系中 。
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);
