Example #1
0
        /// <summary>
        /// 指定轴回原点
        /// </summary>
        /// <param name="axisIndex"></param>
        public void Homing(int axisIndex, int pos, double acc, double speed)
        {
            short  rtn;
            ushort axisSts;

            int prfPos;

            if (isLink == false)
            {
                Util.Notify("控制卡未连接");
                return;
            }
            lock (cardActLock)
            {
                Util.Notify(axisIndex + "开始回原点");
                rtn = GT400.GT_Axis((ushort)axisIndex); //该命令一般不用检测是否正确执行

                rtn = GT400.GT_GetSts(out axisSts);

                runningError("当前轴状态状态查询", rtn);
                if (0 != (axisSts & 0x400))
                {
                    Util.Notify("轴动作中");
                    return;
                }

                rtn = GT400.GT_ClrSts();           //清除当前轴异常状态
                runningError("当前轴状态异常状态清除", rtn);
                if (0 != rtn)
                {
                    return;
                }
                //在当前位置基础上,以S曲线向前运动指定个脉冲

                rtn = GT400.GT_SetMAcc(acc);
                //rtn = GT400.GT_SetAcc(acc);
                runningError("当前轴加速度设置", rtn);
                rtn = GT400.GT_SetVel(speed);
                runningError("当前轴目标速度设置", rtn);
                rtn = GT400.GT_SetPos(pos);
                runningError("当前轴目标位置设置", rtn);
                rtn = GT400.GT_SetJerk(0.087);
                runningError("当前轴加加速度设置", rtn);
                rtn = GT400.GT_Update();
                runningError("当前轴参数更新", rtn);

                Thread.Sleep(10);

                waitCurrentRunFinish();

                rtn = GT400.GT_GetPrfPos(out prfPos);
                runningError("当前轴位置读取", rtn);

                //通过判断 pos正负来确定返回位置
                if (pos >= 0)
                {
                    prfPos -= 100;
                }
                else
                {
                    prfPos += 100;
                }

                rtn = GT400.GT_ClrSts();           //清除不正常状态
                runningError("当前轴状态异常状态清除", rtn);

                rtn = GT400.GT_SetPos(prfPos);
                runningError("当前轴目标位置设置", rtn);
                rtn = GT400.GT_Update();
                runningError("当前轴参数更新", rtn);

                //MyNotify.Notify("轴小段后退中");
                waitCurrentRunFinish();
                //MyNotify.Notify("轴小段后退完成");
                Thread.Sleep(10);

                rtn = GT400.GT_ClrSts();           //清除不正常状态
                runningError("当前轴状态异常状态清除", rtn);


                rtn = GT400.GT_SetVel(speedHomeY / 10.0);
                runningError("当前轴目标速度设置", rtn);
                rtn = GT400.GT_SetPos(pos);     //继续执行回原点:靠-200000这个值自动判断是不是回原点。
                runningError("当前轴目标位置设置", rtn);
                rtn = GT400.GT_Update();
                runningError("当前轴参数更新", rtn);

                waitCurrentRunFinish();

                rtn = GT400.GT_ZeroPos();
                runningError("轴位置状态清零", rtn);
                Util.Notify(axisIndex + "轴原点回归完成");
            }
        }
Example #2
0
        /// <summary>
        /// 指定轴运动到指定位置
        /// </summary>
        /// <param name="axisIndex">轴编号</param>
        /// <param name="pos">位移量</param>
        /// <param name="isAbsolute">绝对运动</param>
        public void AxisPosMove(int axisIndex, int pos, bool isAbsolute)
        {
            ushort testAxis = (ushort)axisIndex;

            if (homeFinish == false)
            {
                Util.Notify("控制卡未回原点");
                return;
            }
            lock (cardActLock)
            {
                short rtn;
                int   prfPos = 0;

                rtn = GT400.GT_Axis(testAxis);

                ushort axisSts;
                rtn = GT400.GT_GetSts(out axisSts);//如果测试轴正在运动则退出

                runningError("当前轴状态状态查询", rtn);
                if (0 != (axisSts & 0x400))
                {
                    Util.Notify("轴动作中");
                    //return;
                }

                rtn = GT400.GT_ClrSts();           //清除不正常状态
                runningError("当前轴状态异常状态清除", rtn);
                if (0 != rtn)
                {
                    return;
                }

                if (isAbsolute)
                {
                    prfPos = pos;
                }
                else
                {
                    rtn = GT400.GT_GetPrfPos(out prfPos);
                    runningError("当前轴位置读取", rtn);
                    prfPos += pos;
                }
                //Thread.Sleep(2);

                //Thread.Sleep(2);
                rtn = GT400.GT_SetMAcc(accRun);
                //rtn = GT400.GT_SetAcc(accRun);
                runningError("当前轴加速度设置", rtn);
                //Thread.Sleep(2);
                rtn = GT400.GT_SetVel(speedRun);
                runningError("当前轴目标速度设置", rtn);
                //Thread.Sleep(2);
                rtn = GT400.GT_SetPos(prfPos);
                runningError("当前轴目标位置设置", rtn);

                rtn = GT400.GT_SetJerk(0.087);
                runningError("当前轴加加速度设置", rtn);
                //Thread.Sleep(2);
                rtn = GT400.GT_Update();                 //参数更新后,就可以开始运行了。
                runningError("当前轴参数更新", rtn);
            }
        }