/// <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); }
/// <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; }
/// <summary> /// 清除轴状态 /// </summary> /// <param name="axis"></param> public void StatusClear(short axis) { Gts_Return = MC.GT_ClrSts(axis, 1); LogErr?.Invoke("GT_ClrSts", Gts_Return); }
/// <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); } }
/// <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); }
/// <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); }