Ejemplo n.º 1
0
        /// <summary>
        /// Gts控制卡初始化
        /// </summary>
        public static void Reset()
        {
            //复位运动控制器
            Gts_Return = MC.GT_Reset();
            Log.Commandhandler("Gts_Initial---GT_Reset", Gts_Return);
            //延时
            Thread.Sleep(200);
            //配置运动控制器
            Gts_Return = MC.GT_LoadConfig("Axis.cfg");
            Log.Commandhandler("Gts_Initial--GT_LoadConfig", Gts_Return);
            //清除各轴的报警和限位
            Gts_Return = MC.GT_ClrSts(1, 4);
            Log.Commandhandler("Gts_Initial--清除各轴的报警和限位", Gts_Return);
            //轴使能
            Gts_Return = MC.GT_AxisOn(1);
            Gts_Return = MC.GT_AxisOn(2);
            //延时
            Thread.Sleep(200);

            //设置X轴误差带
            Gts_Return = MC.GT_SetAxisBand(1, Para_List.Parameter.Axis_X_Band, 4 * Para_List.Parameter.Axis_X_Time);//20-0.1um,4*2-250us
            Log.Commandhandler("X轴到位误差带", Gts_Return);

            //设置Y轴误差带
            Gts_Return = MC.GT_SetAxisBand(2, Para_List.Parameter.Axis_Y_Band, 4 * Para_List.Parameter.Axis_Y_Time);//20-0.1um,4*2-250us
            Log.Commandhandler("Y轴到位误差带", Gts_Return);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gts控制卡初始化
        /// </summary>
        public void Reset()
        {
            //复位运动控制器
            Gts_Return = MC.GT_Reset();
            LogErr?.Invoke("Gts_Initial---GT_Reset", Gts_Return);
            //延时
            Thread.Sleep(200);
            //配置运动控制器
            Gts_Return = MC.GT_LoadConfig("Axis.cfg");
            LogErr?.Invoke("Gts_Initial--GT_LoadConfig", Gts_Return);
            //清除各轴的报警和限位
            Gts_Return = MC.GT_ClrSts(1, 4);
            LogErr?.Invoke("Gts_Initial--清除各轴的报警和限位", Gts_Return);
            //轴使能
            Gts_Return = MC.GT_AxisOn(1);
            Gts_Return = MC.GT_AxisOn(2);
            //延时
            Thread.Sleep(200);

            //设置X轴误差带
            Gts_Return = MC.GT_SetAxisBand(1, Program.SystemContainer.SysPara.Axis_X_Band, 4 * Program.SystemContainer.SysPara.Axis_X_Time);//20-0.1um,4*2-250us
            LogErr?.Invoke("X轴到位误差带", Gts_Return);

            //设置Y轴误差带
            Gts_Return = MC.GT_SetAxisBand(2, Program.SystemContainer.SysPara.Axis_Y_Band, 4 * Program.SystemContainer.SysPara.Axis_Y_Time);//20-0.1um,4*2-250us
            LogErr?.Invoke("Y轴到位误差带", Gts_Return);

            //设置X轴软件限位
            Gts_Return = MC.GT_SetSoftLimit(1, Program.SystemContainer.SysPara.AxisXSoftLimitPositive * (int)Program.SystemContainer.SysPara.Gts_Pos_reference, Program.SystemContainer.SysPara.AxisXSoftLimitNegative * (int)Program.SystemContainer.SysPara.Gts_Pos_reference);
            LogErr?.Invoke("设置X轴软件限位", Gts_Return);

            //设置Y轴软件限位
            Gts_Return = MC.GT_SetSoftLimit(2, Program.SystemContainer.SysPara.AxisYSoftLimitPositive * (int)Program.SystemContainer.SysPara.Gts_Pos_reference, Program.SystemContainer.SysPara.AxisYSoftLimitNegative * (int)Program.SystemContainer.SysPara.Gts_Pos_reference);
            LogErr?.Invoke("设置Y轴软件限位", Gts_Return);

            //轴回零完成信号
            Axis01_Homed = false;
            Axis02_Homed = false;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 清除轴状态
 /// </summary>
 /// <param name="axis"></param>
 public void StatusClear(short axis)
 {
     Gts_Return = MC.GT_ClrSts(axis, 1);
     LogErr?.Invoke("GT_ClrSts", Gts_Return);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 轴自身Axes02 Y轴回零 返回值:0 - 回零完成呢;1 - Busy;2 - 超时;3 - 轴错误
        /// </summary>
        /// <param name="Axis"></param>
        /// <returns></returns>
        public int Axis02_Home_Down_Motor()
        {
            Axis02_Homed = false;//归零完成标志清除

            //命令返回值
            short Gts_Return = 0;

            //轴运行中,退出
            if (Program.SystemContainer.IO.Axis02_Busy)
            {
                return(1);
            }

            //停止轴运动
            Gts_Return = MC.GT_Stop(1 << 1, 0); //平滑停止轴运动
            LogErr?.Invoke("Motion--停止轴运动", Gts_Return);

            //清除指定轴报警和限位
            Gts_Return = MC.GT_ClrSts(2, 1);
            LogErr?.Invoke("Axis_Home----GT_ClrSts", Gts_Return);

            //位置清零
            Gts_Return = MC.GT_ZeroPos(2, 1);
            LogErr?.Invoke("Axis_Home----GT_ZeroPos", Gts_Return);

            //触发回零外部信号
            if (Program.SystemContainer.IO.Axis02_Home_Ex0_Control != 1)
            {
                Program.SystemContainer.IO.Axis02_Home_Ex0_Control = 1;
            }

            //延时一段时间,等待信号生效
            Thread.Sleep(500);

            //清除回零外部信号
            if (Program.SystemContainer.IO.Axis02_Home_Ex0_Control != 0)
            {
                Program.SystemContainer.IO.Axis02_Home_Ex0_Control = 0;
            }

            //捕获原点触发信号
            //等待完成
            Task.Factory.StartNew(() => {
                do
                {
                    //延时
                    Thread.Sleep(100);
                } while (!Program.SystemContainer.IO.Axis02_Home);
            }).Wait(120 * 1000);//回零超时时长120s 2min
            if (!Program.SystemContainer.IO.Axis02_Home)
            {
                MessageBox.Show("Y轴回零超时!!!");
                return(2);
            }
            //清除回零外部信号
            if (Program.SystemContainer.IO.Axis02_Home_Ex0_Control != 0)
            {
                Program.SystemContainer.IO.Axis02_Home_Ex0_Control = 0;
            }

            //延时一段时间,等待电机稳定
            Thread.Sleep(20);//200ms

            //位置清零
            Gts_Return = MC.GT_ZeroPos(2, 1);
            LogErr?.Invoke("Axis_Home----GT_ZeroPos", Gts_Return);

            //清除指定轴报警和限位
            Gts_Return = MC.GT_ClrSts(2, 1);
            LogErr?.Invoke("Axis_Home----GT_ClrSts", Gts_Return);

            //检测是否有错误发生
            if (Program.SystemContainer.IO.Axis02_Err_Occur)
            {
                return(3);
            }
            else
            {
                Axis02_Homed = true;//归零完成标志
                return(0);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Gts工控卡 上位机Axes回零
        /// </summary>
        /// <param name="Axis"></param>
        /// <returns></returns>
        public int Home_Upper_Monitor(short Axis)
        {
            //命令返回值
            short Gts_Return;
            short Capture;//捕获状态值

            MC.TTrapPrm Home_TrapPrm = new MC.TTrapPrm();
            int         Axis_Sta;    //轴状态
            uint        Axis_Pclock; //轴时钟
            Int32       Axis_Pos;    //回零是触发Home开关时的轴位置
            double      prfPos;      //回零运动过程中规划位置
            //定义时钟
            uint pclock;

            //停止轴运动
            Gts_Return = MC.GT_Stop(1 << (Axis - 1), 0); //平滑停止轴运动
            LogErr?.Invoke("Motion--停止轴运动", Gts_Return);

            //清除指定轴报警和限位
            Gts_Return = MC.GT_ClrSts(Axis, 1);
            LogErr?.Invoke("Axis_Home----GT_ClrSts", Gts_Return);

            //回零准备,向正方向前进20mm,后触发回零
            //切换到点动模式
            Gts_Return = MC.GT_PrfTrap(Axis);
            LogErr?.Invoke("Axis_Home----GT_PrfTrap", Gts_Return);

            //读取点动模式运动参数
            Gts_Return = MC.GT_GetTrapPrm(Axis, out Home_TrapPrm);
            LogErr?.Invoke("Axis_Home----GT_GetTrapPrm", Gts_Return);

            //设置点动模式运动参数
            Home_TrapPrm.acc        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_acc / Program.SystemContainer.SysPara.Gts_Acc_reference);
            Home_TrapPrm.dec        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_dcc / Program.SystemContainer.SysPara.Gts_Acc_reference);
            Home_TrapPrm.smoothTime = Program.SystemContainer.SysPara.Home_smoothTime;

            //设置点动模式运动参数
            Gts_Return = MC.GT_SetTrapPrm(Axis, ref Home_TrapPrm);
            LogErr?.Invoke("Axis_Home----GT_SetTrapPrm", Gts_Return);

            //设置点动模式目标速度,即回原点速度
            Gts_Return = MC.GT_SetVel(Axis, Convert.ToDouble(Program.SystemContainer.SysPara.Home_High_Speed / Program.SystemContainer.SysPara.Gts_Vel_reference));
            LogErr?.Invoke("Axis_Home----GT_SetVel", Gts_Return);

            //读取当前规划位置
            Gts_Return = MC.GT_GetPrfPos(Axis, out prfPos, 1, out pclock);
            LogErr?.Invoke("Motion--读取轴当前规划位置", Gts_Return);

            //设置点动模式目标位置,即原点准备距离 20mm
            Gts_Return = MC.GT_SetPos(Axis, Convert.ToInt32(Convert.ToDouble(20 * Program.SystemContainer.SysPara.Gts_Pos_reference) + prfPos));
            LogErr?.Invoke("Motion--设置目标位置", Gts_Return);

            //启动运动
            Gts_Return = MC.GT_Update(1 << (Axis - 1));
            LogErr?.Invoke("Axis_Home----GT_Update", Gts_Return);

            do
            {
                //读取轴状态
                Gts_Return = MC.GT_GetSts(Axis, out Axis_Sta, 1, out Axis_Pclock);
            } while ((Axis_Sta & 0x400) != 0);

            //停止轴运动
            Gts_Return = MC.GT_Stop(1 << (Axis - 1), 0); //平滑停止轴运动
            LogErr?.Invoke("Motion--停止轴运动", Gts_Return);

            //延时一段时间,等待电机稳定
            Thread.Sleep(200);//200ms

            //触发回零
            //启动Home捕捉
            Gts_Return = MC.GT_SetCaptureMode(Axis, MC.CAPTURE_HOME);
            LogErr?.Invoke("Axis_Home----GT_SetCaptureMode", Gts_Return);

            //切换到点动模式
            Gts_Return = MC.GT_PrfTrap(Axis);
            LogErr?.Invoke("Axis_Home----GT_PrfTrap", Gts_Return);

            //读取点动模式运动参数
            Gts_Return = MC.GT_GetTrapPrm(Axis, out Home_TrapPrm);
            LogErr?.Invoke("Axis_Home----GT_GetTrapPrm", Gts_Return);

            //设置点动模式运动参数
            Home_TrapPrm.acc        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_acc / Program.SystemContainer.SysPara.Gts_Acc_reference);
            Home_TrapPrm.dec        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_dcc / Program.SystemContainer.SysPara.Gts_Acc_reference);
            Home_TrapPrm.smoothTime = Program.SystemContainer.SysPara.Home_smoothTime;

            //设置点动模式运动参数
            Gts_Return = MC.GT_SetTrapPrm(Axis, ref Home_TrapPrm);
            LogErr?.Invoke("Axis_Home----GT_SetTrapPrm", Gts_Return);

            //设置点动模式目标速度,即回原点速度
            Gts_Return = MC.GT_SetVel(Axis, Convert.ToDouble(Program.SystemContainer.SysPara.Home_High_Speed / Program.SystemContainer.SysPara.Gts_Vel_reference));
            LogErr?.Invoke("Axis_Home----GT_SetVel", Gts_Return);

            //设置点动模式目标位置,即原点搜索距离
            Gts_Return = MC.GT_SetPos(Axis, Convert.ToInt32(Program.SystemContainer.SysPara.Search_Home * Program.SystemContainer.SysPara.Gts_Pos_reference));
            LogErr?.Invoke("Axis_Home----GT_SetPos", Gts_Return);

            //启动运动
            Gts_Return = MC.GT_Update(1 << (Axis - 1));
            LogErr?.Invoke("Axis_Home----GT_Update", Gts_Return);


            do
            {
                //读取轴状态
                Gts_Return = MC.GT_GetSts(Axis, out Axis_Sta, 1, out Axis_Pclock);
                //读取捕获状态
                Gts_Return = MC.GT_GetCaptureStatus(Axis, out Capture, out Axis_Pos, 1, out Axis_Pclock);
                //读取编码器位置
                //Gts_Return = MC.GT_GetEncPos(Axis, out encPos, 1, out Axis_Pclock);
                //如果运动停止,返回出错信息
                if (0 == (Axis_Sta & 0x400))
                {
                    LogErr?.Invoke("Axis_Home----No Home found!!", 1);
                    return(1);//整个过程Home信号一直没有触发,返回值为1
                }
            } while (Capture == 0);

            /********************************待评估***********************************/

            /*
             * //清除捕捉状态
             * //Gts_Return = MC.GT_ClearCaptureStatus(Axis);
             * //LogErr?.Invoke("Axis_Home----清除捕捉状态", Gts_Return);
             *
             * //设置捕捉Home 下降沿
             * //Gts_Return = MC.GT_SetCaptureSense(Axis, MC.CAPTURE_HOME, 0);
             * //LogErr?.Invoke("Axis_Home----设置捕捉Home 下降沿", Gts_Return);
             *
             * //设定目标位置为捕获位置+偏移量
             * Gts_Return = MC.GT_SetPos(Axis, Axis_Pos + Home_OffSet);
             * LogErr?.Invoke("Axis_Home----GT_SetPos", Gts_Return);
             *
             * //在运动状态下更新目标位置
             * Gts_Return = MC.GT_Update(1 << (Axis - 1));
             * LogErr?.Invoke("Axis_Home----GT_Update", Gts_Return);
             *
             * do
             * {
             *  //读取轴状态
             *  Gts_Return = MC.GT_GetSts(Axis, out Axis_Sta, 1, out Axis_Pclock);
             *  //读取捕获状态
             *  Gts_Return = MC.GT_GetCaptureStatus(Axis, out Capture, out Axis_Pos, 1, out Axis_Pclock);
             *  //读取编码器位置
             *  //Gts_Return = MC.GT_GetEncPos(Axis, out encPos, 1, out Axis_Pclock);
             *  //如果运动停止,返回出错信息
             *  if (0 == (Axis_Sta & 0x400))
             *  {
             *      LogErr?.Invoke("Axis_Home----No Home found!!", 1);
             *      //反转回零标志
             *      Homing_Flag = !Homing_Flag;
             *      return 1;//整个过程Home信号一直没有触发,返回值为1
             *  }
             * } while (Capture ==0);
             */
            /********************************待评估***********************************/

            //停止轴运动
            Gts_Return = MC.GT_Stop(1 << (Axis - 1), 0); //平滑停止轴运动
            LogErr?.Invoke("Motion--停止轴运动", Gts_Return);

            //延时一段时间,等待电机稳定
            Thread.Sleep(500);//200ms
            //位置清零
            Gts_Return = MC.GT_ZeroPos(Axis, 1);
            LogErr?.Invoke("Axis_Home----GT_ZeroPos", Gts_Return);

            /***************************Home_Offset偏置距离 开始********************************************/

            if (Program.SystemContainer.SysPara.Home_OffSet != 0)
            {
                //切换到点动模式
                Gts_Return = MC.GT_PrfTrap(Axis);
                LogErr?.Invoke("Axis_Home----GT_PrfTrap", Gts_Return);

                //读取点动模式运动参数
                Gts_Return = MC.GT_GetTrapPrm(Axis, out Home_TrapPrm);
                LogErr?.Invoke("Axis_Home----GT_GetTrapPrm", Gts_Return);

                //设置点动模式运动参数
                Home_TrapPrm.acc        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_acc / Program.SystemContainer.SysPara.Gts_Acc_reference);
                Home_TrapPrm.dec        = Convert.ToDouble(Program.SystemContainer.SysPara.Home_dcc / Program.SystemContainer.SysPara.Gts_Acc_reference);
                Home_TrapPrm.smoothTime = Program.SystemContainer.SysPara.Home_smoothTime;

                //设置点动模式运动参数
                Gts_Return = MC.GT_SetTrapPrm(Axis, ref Home_TrapPrm);
                LogErr?.Invoke("Axis_Home----GT_SetTrapPrm", Gts_Return);

                //设置点动模式目标速度,即回原点速度
                Gts_Return = MC.GT_SetVel(Axis, Convert.ToDouble(Program.SystemContainer.SysPara.Home_High_Speed / Program.SystemContainer.SysPara.Gts_Vel_reference));
                LogErr?.Invoke("Axis_Home----GT_SetVel", Gts_Return);

                //设置点动模式目标位置,即原点搜索距离
                Gts_Return = MC.GT_SetPos(Axis, Convert.ToInt32(Program.SystemContainer.SysPara.Home_OffSet * Program.SystemContainer.SysPara.Gts_Pos_reference));
                LogErr?.Invoke("Axis_Home----GT_SetPos", Gts_Return);

                //启动运动
                Gts_Return = MC.GT_Update(1 << (Axis - 1));
                LogErr?.Invoke("Axis_Home----GT_Update", Gts_Return);

                do
                {
                    //读取轴状态
                    Gts_Return = MC.GT_GetSts(Axis, out Axis_Sta, 1, out Axis_Pclock);
                    //读取规划位置
                    Gts_Return = MC.GT_GetPrfPos(Axis, out prfPos, 1, out Axis_Pclock);
                    //读取编码器位置
                    //Gts_Return = MC.GT_GetEncPos(Axis, out encPos, 1, out Axis_Pclock);
                } while ((Axis_Sta & 0x400) != 0);

                //检查是否到达 Home_OffSet
                if (prfPos != Convert.ToInt32(Program.SystemContainer.SysPara.Home_OffSet * Program.SystemContainer.SysPara.Gts_Pos_reference))
                {
                    LogErr?.Invoke("Axis_Home----Move to Home_OffSet err!!", 1);
                    return(2);
                }
                /***************************Home_Offset偏置距离 结束********************************************/
            }
            //延时一段时间,等待电机稳定
            Thread.Sleep(500);//200ms
            //位置清零
            Gts_Return = MC.GT_ZeroPos(Axis, 1);
            LogErr?.Invoke("Axis_Home----GT_ZeroPos", Gts_Return);
            return(0);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Gts工控卡 轴自身Axes回零
        /// </summary>
        /// <param name="Axis"></param>
        /// <returns></returns>
        public static int Axis02_Home_Down_Motor()
        {
            //命令返回值
            short Gts_Return = 0;

            //轴运行中,退出
            if (Prompt.Refresh.Axis02_Busy)
            {
                return(2);
            }

            //停止轴运动
            Gts_Return = MC.GT_Stop(1 << 1, 0); //平滑停止轴运动
            Log.Commandhandler("Motion--停止轴运动", Gts_Return);

            //清除指定轴报警和限位
            Gts_Return = MC.GT_ClrSts(2, 1);
            Log.Commandhandler("Axis_Home----GT_ClrSts", Gts_Return);

            //位置清零
            Gts_Return = MC.GT_ZeroPos(2, 1);
            Log.Commandhandler("Axis_Home----GT_ZeroPos", Gts_Return);

            //触发回零外部信号
            if (Prompt.Refresh.Axis02_Home_Ex0_Control != 1)
            {
                Prompt.Refresh.Axis02_Home_Ex0_Control = 1;
            }

            //延时一段时间,等待信号生效
            Thread.Sleep(500);

            //清除回零外部信号
            if (Prompt.Refresh.Axis02_Home_Ex0_Control != 0)
            {
                Prompt.Refresh.Axis02_Home_Ex0_Control = 0;
            }

            //捕获原点触发信号
            //等待完成
            Task.Factory.StartNew(() => {
                do
                {
                    //延时
                    Thread.Sleep(100);
                } while (!Prompt.Refresh.Axis02_Home);
            }).Wait(120 * 1000);//回零超时时长120s 2min
            if (!Prompt.Refresh.Axis02_Home)
            {
                MessageBox.Show("Y轴回零超时!!!");
                return(1);
            }
            //清除回零外部信号
            if (Prompt.Refresh.Axis02_Home_Ex0_Control != 0)
            {
                Prompt.Refresh.Axis02_Home_Ex0_Control = 0;
            }

            //延时一段时间,等待电机稳定
            Thread.Sleep(500);//200ms

            //清除指定轴报警和限位
            Gts_Return = MC.GT_ClrSts(2, 1);
            Log.Commandhandler("Axis_Home----GT_ClrSts", Gts_Return);

            //位置清零
            Gts_Return = MC.GT_ZeroPos(2, 1);
            Log.Commandhandler("Axis_Home----GT_ZeroPos", Gts_Return);

            return(0);
        }