コード例 #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 + "轴原点回归完成");
            }
        }
コード例 #2
0
        public bool InitCard()
        {
            try
            {
                short rtn;
                lock (cardActLock)
                {
                    //连接控制器
                    rtn = GT400.GT_Open();
                    Error("打开控制卡", rtn);
                    if (0 != rtn)
                    {
                        isLink = false;
                        return(false);
                    }

                    rtn = GT400.GT_Reset();
                    runningError("控制卡复位", rtn);
                    if (0 != rtn)
                    {
                        isLink = false;
                        return(false);
                    }

                    ushort sense = 0xffff;
                    rtn = GT400.GT_LmtSns(sense);     //设置限位开关触发电平
                    runningError("设置限位开关电平", rtn);
                    if (0 != rtn)
                    {
                        isLink = false;
                        return(false);
                    }
                }
                for (int i = 0; i < axisNum; i++)
                {
                    lock (cardActLock)
                    {
                        //设置轴参数
                        rtn = GT400.GT_Axis((ushort)(i + 1));     //切换到测试轴
                        runningError("设置当前轴", rtn);
                        if (0 != rtn)
                        {
                            isLink = false;
                            return(false);
                        }
                        rtn = GT400.GT_ClrSts();           //清除不正常状态
                        runningError("GT_ClrSts", rtn);
                        if (0 != rtn)
                        {
                            isLink = false;
                            return(false);
                        }
                        rtn = GT400.GT_StepDir();          //脉冲方式为‘脉冲+方向’,必须与驱动器的设置一致
                        runningError("GT_StepDir", rtn);
                        if (0 != rtn)
                        {
                            isLink = false;
                            return(false);
                        }
                        //闭环模式下必须设置PID


                        rtn = GT400.GT_AxisOn();           //伺服使能,如果驱动器没有上伺服,请检查:1、测试轴是否是axis 1,2、端子板及驱动器是否上电
                        runningError("GT_AxisOn", rtn);
                        if (0 != rtn)
                        {
                            isLink = false;
                            return(false);
                        }

                        rtn = GT400.GT_PrflS();
                        //rtn = GT400.GT_PrflT();  //T曲线
                        runningError("当前轴设定为S曲线", rtn);
                        if (0 != rtn)
                        {
                            isLink = false;
                            return(false);
                        }
                    }
                }

                isLink = true;
                return(true);
            }
            catch (Exception ex)
            {
                Util.Notify("控制卡打开失败 错误原因" + ex.Message);
                //Notify("控制卡打开失败 错误原因" + ex.Message);
                CloseCom();
                isLink = false;
                return(false);
            }
        }
コード例 #3
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);
            }
        }