
- private void motionDO1_Click(object sender, EventArgs e)
- {
- // TCrdPrm结构体变量,该结构体定义了坐标系
- GTN.mc.TCrdPrm crdprm;
- short sRtn = GTN.mc.GTN_GetCrdPrm(1, 1, out crdprm);
- crdprm.dimension = 2; // 坐标系为二维坐标系
- crdprm.synVelMax = 800; // 最大合成速度:500pulse/ms
- crdprm.synAccMax = 8; // 最大加速度:1pulse/ms^2
- crdprm.evenTime = 50; // 最小匀速时间:50ms
- crdprm.profile1 = 1; // 规划器1对应到X轴
- crdprm.profile2 = 2; // 规划器2对应到Y轴
- crdprm.setOriginFlag = 1; // 需要指定坐标系的原点坐标的规划位置
- crdprm.originPos1 = 0; // 坐标系的原点坐标的规划位置为(100, 100)
- crdprm.originPos2 = 0;
- sRtn = GTN.mc.GTN_SetCrdPrm(1, 1, ref crdprm);
- Task.Run(LookAheadTest);
-
- }
-
- private static void LookAheadTest()
- {
- short sRtn;
- int space;
-
- GTN.mc.TCrdData[] crdData = new GTN.mc.TCrdData[200]; //前瞻缓冲区
- int[] posTest = new int[2];
-
- // 初始化坐标系1的FIFO0的前瞻模块
- sRtn = GTN.mc.GTN_InitLookAhead(
- 1, //core
- 1, //crd
- 0, //fifo
- 5, //T //拐弯时间
- 7, //accMax
- 200, //n
- ref crdData[0]); // 定义前瞻缓存区内存区
-
-
- //压插补数据:小线段加工
- posTest[0] = 0;
- posTest[1] = 0;
-
- {
- sRtn = mc.GTN_LnXY( //向前瞻缓冲区冲写入数据共300段
- 1, //core
- 1, //crd
- 0 + posTest[0], //x
- 0 + posTest[1], //y
- 800, //vel
- 6, //acc
- 0, //velend
- 0); //fifo
-
- if (0 != sRtn)
- {
- do
- {
- // 查询运动缓存区空间,直至空间不为0
- sRtn = GTN.mc.GTN_CrdSpace(1, 1, out space, 0);
-
- } while (0 == space);
- // 重新调用上次失败的插补指令
- sRtn = GTN.mc.GTN_LnXY(1, 1, 0 + posTest[0], 0 + posTest[1], 800, 6, 0, 0);
-
- }
-
-
- posTest[0] = 3000000;
- posTest[1] = 0;
- sRtn = mc.GTN_LnXY( //向前瞻缓冲区冲写入数据第2段
- 1, //core
- 1, //crd
- 0 + posTest[0], //x
- 0 + posTest[1], //y
- 800, //vel
- 6, //acc
- 0, //velend
- 0); //fifo
-
- if (0 != sRtn)
- {
- do
- {
- // 查询运动缓存区空间,直至空间不为0
- sRtn = GTN.mc.GTN_CrdSpace(1, 1, out space, 0);
-
- } while (0 == space);
- // 重新调用上次失败的插补指令
- sRtn = GTN.mc.GTN_LnXY(1, 1, 0 + posTest[0], 0 + posTest[1], 800, 6, 0, 0);
-
- }
-
- posTest[0] = 3000000;
- posTest[1] = 3000000;
- sRtn = mc.GTN_LnXY( //向前瞻缓冲区冲写入数据第3段
- 1, //core
- 1, //crd
- 0 + posTest[0], //x
- 0 + posTest[1], //y
- 800, //vel
- 6, //acc
- 0, //velend
- 0); //fifo
-
- if (0 != sRtn)
- {
- do
- {
- // 查询运动缓存区空间,直至空间不为0
- sRtn = GTN.mc.GTN_CrdSpace(1, 1, out space, 0);
-
- } while (0 == space);
- // 重新调用上次失败的插补指令
- sRtn = GTN.mc.GTN_LnXY(1, 1, 0 + posTest[0], 0 + posTest[1], 800, 6, 0, 0);
-
- }
-
-
- posTest[0] = 0;
- posTest[1] = 3000000;
- sRtn = mc.GTN_LnXY( //向前瞻缓冲区冲写入数据第4段
- 1, //core
- 1, //crd
- 0 + posTest[0], //x
- 0 + posTest[1], //y
- 800, //vel
- 6, //acc
- 0, //velend
- 0); //fifo
-
- if (0 != sRtn)
- {
- do
- {
- // 查询运动缓存区空间,直至空间不为0
- sRtn = GTN.mc.GTN_CrdSpace(1, 1, out space, 0);
-
- } while (0 == space);
- // 重新调用上次失败的插补指令
- sRtn = GTN.mc.GTN_LnXY(1, 1, 0 + posTest[0], 0 + posTest[1], 800, 6, 0, 0);
-
- }
-
- posTest[0] = 0;
- posTest[1] = 0;
- sRtn = mc.GTN_LnXY( //向前瞻缓冲区冲写入数据第5段
- 1, //core
- 1, //crd
- 0 + posTest[0], //x
- 0 + posTest[1], //y
- 600, //vel
- 5, //acc
- 0, //velend
- 0); //fifo
-
- if (0 != sRtn)
- {
- do
- {
- // 查询运动缓存区空间,直至空间不为0
- sRtn = GTN.mc.GTN_CrdSpace(1, 1, out space, 0);
-
- } while (0 == space);
- // 重新调用上次失败的插补指令
- sRtn = GTN.mc.GTN_LnXY(1, 1, 0 + posTest[0], 0 + posTest[1], 800, 6, 0, 0);
-
- }
-
-
- }
-
- // 将前瞻缓存区中的数据压入控制器
- IntPtr crdDataNULL = new IntPtr();
- sRtn = GTN.mc.GTN_CrdData(1, 1, crdDataNULL, 0);
-
- // 启动运动
- sRtn = GTN.mc.GTN_CrdStart(1, 1, 0); //mask bit0 对应坐标系 1,bit1 对应坐标系 2,0:不启动该坐标系,1:启动该坐标系。
-
- }