@ -12,21 +12,21 @@ using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow.SafePosFlow
{
public enum ESafePosSide
{
/// <summary>
/// 料仓侧安全位
/// </summary>
Stock ,
/// <summary>
/// 放料到料仓时, X先移动到安全位
/// </summary>
PlaceToStock ,
/// <summary>
/// 放疗到治具时, Y1先移动到料仓侧
/// </summary>
PlaceToFixture ,
}
//public enum ESafePosSide
// {
// /// <summary>
// /// 料仓侧安全位
// /// </summary>
// Stock,
// /// <summary>
// /// 放料到料仓时, X先移动到安全位
// /// </summary>
// PlaceToStock,
// /// <summary>
// /// 放疗到治具时, Y1先移动到料仓侧
// /// </summary>
// PlaceToFixture,
// }
public enum EDischargeModuleGoSafePosFlowStep
{
到 安 全 位 ,
@ -60,7 +60,7 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
/// <summary>
/// 排料头回安全位
/// </summary>
public void GoSafePostion ( ESafePosSide side = ESafePosSide . Stock )
public void GoSafePostion ( )
{
if ( finished )
{
@ -82,25 +82,28 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
switch ( step )
{
case EDischargeModuleGoSafePosFlowStep . 到 安 全 位 :
if ( side = = ESafePosSide . Stock )
{
targetPos . X = GlobalVar . DischargeSafePostionX ;
targetPos . Y1 = GlobalVar . StockSideY1 ;
targetPos . Y2 = GlobalVar . DischargeSafePostionY2 ;
}
else if ( side = = ESafePosSide . PlaceToStock )
{
targetPos . X = GlobalVar . FixtureSafePosX ;
targetPos . Y1 = Ops . GetCurPosition ( AxisControl . LoadY1 ) ;
targetPos . Y2 = Ops . GetCurPosition ( AxisControl . LoadY2 ) ;
}
else if ( side = = ESafePosSide . PlaceToFixture )
{
targetPos . X = Ops . GetCurPosition ( AxisControl . LoadX ) ;
targetPos . Y1 = GlobalVar . FixtureSideY1 ;
targetPos . Y2 = Ops . GetCurPosition ( AxisControl . LoadY2 ) ;
}
if ( GroupAxisMove . XY1Y2MovePos ( targetPos , GlobalVar . WholeSpeed ) )
//if(side== ESafePosSide.Stock)
//{
// targetPos.X = GlobalVar.DischargeSafePostionX;
// targetPos.Y1 = GlobalVar.StockSideY1;
// targetPos.Y2 = GlobalVar.DischargeSafePostionY2;
//}
//else if(side== ESafePosSide.PlaceToStock)
//{
// targetPos.X = GlobalVar.FixtureSafePosX;
// targetPos.Y1 = Ops.GetCurPosition(AxisControl.LoadY1);
// targetPos.Y2 = Ops.GetCurPosition(AxisControl.LoadY2);
//}
//else if(side== ESafePosSide.PlaceToFixture)
//{
// targetPos.X = Ops.GetCurPosition(AxisControl.LoadX);
// targetPos.Y1 = GlobalVar.FixtureSideY1;
// targetPos.Y2 = Ops.GetCurPosition(AxisControl.LoadY2);
//}
targetPos . X = GlobalVar . DischargeSafePostionX ;
targetPos . Y1 = GlobalVar . StockSideY1 ;
targetPos . Y2 = GlobalVar . DischargeSafePostionY2 ;
if ( GroupAxisMove . XY1Y2MovePos ( targetPos , GlobalVar . WholeSpeed , EGoWhichSide . StockSide ) )
{
AxisPosPrint . PrintXY1Y2TargetPos ( "到安全位," , targetPos , GetClassName ( ) ) ;
//logInfo = GetClassName() + $"到安全位,tx:{targetPos.X},ty1:{targetPos.Y1},ty2:{targetPos.Y2}";
@ -140,8 +143,9 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
//判断Y1当前在治具还是在料仓, 只有在治具侧才需要把X先移动到安全位
double curLoadY1 = Ops . GetCurPosition ( AxisControl . LoadY1 ) ;
double curLoadX = Ops . GetCurPosition ( AxisControl . LoadX ) ;
if ( Math. Abs ( curLoadY1 - GlobalVar . FixtureSideY1 ) > 1 & & ( curLoadX - GlobalVar . FixtureSafePosX > 50 ) )
if ( NearByFixture( ) & & ( curLoadX - GlobalVar . FixtureSafePosX > 50 ) )
{
MessageQueue . Instance . Insert ( GetClassName ( ) + $"当前X:{curLoadX}大于治具侧安全位:{GlobalVar.FixtureSafePosX}, 并且Y1在治具侧Y1:{curLoadY1},准备先把X移动到安全位" ) ;
while ( true & & ! arrivedSafePos )
{
switch ( moveXStep )
@ -152,7 +156,7 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
targetPos . Y2 = Ops . GetCurPosition ( AxisControl . LoadY2 ) ;
if ( GroupAxisMove . XY1Y2MovePos ( targetPos , GlobalVar . WholeSpeed ) )
{
AxisPosPrint . PrintXY1Y2TargetPos ( " 到安全位,", targetPos , GetClassName ( ) ) ;
AxisPosPrint . PrintXY1Y2TargetPos ( " 移动X 到治具 安全位,", targetPos , GetClassName ( ) ) ;
if ( GlobalVar . VirtualAxis )
{
Thread . Sleep ( GlobalVar . VirtualAxisMoveTime ) ;
@ -163,7 +167,7 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
case EDischargeModuleGoSafePosFlowStep . 等 待 运 动 到 安 全 位 :
if ( Ops . IsStop ( "LoadX" , "LoadY1" , "LoadY2" ) | | GlobalVar . VirtualAxis )
{
AxisPosPrint . PrintXY1Y2CurrentPos ( " 已运动到安全位,", GetClassName ( ) ) ;
AxisPosPrint . PrintXY1Y2CurrentPos ( " X 已运动到治具 安全位,", GetClassName ( ) ) ;
arrivedSafePos = true ;
}
break ;
@ -184,9 +188,9 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
EDischargeModuleGoSafePosFlowStep moveY1Step = EDischargeModuleGoSafePosFlowStep . 到 安 全 位 ;
//判断Y1当前在治具还是在料仓, 只有在料仓侧才需要把Y1先移动治具那边
double curLoadY1 = Ops . GetCurPosition ( AxisControl . LoadY1 ) ;
double curLoadX = Ops . GetCurPosition ( AxisControl . LoadX ) ;
if ( Math . Abs ( curLoadY1 - GlobalVar . StockSideY1 ) > 1 & & ( targetLoadX - GlobalVar . FixtureSafePosX > 50 ) )
if ( NearByStock ( ) & & ( targetLoadX - GlobalVar . FixtureSafePosX > 50 ) )
{
MessageQueue . Instance . Insert ( GetClassName ( ) + $"当前Y1在料仓侧Y1:{curLoadY1},准备运动到治具侧" ) ;
while ( true & & ! arrivedSafePos )
{
switch ( moveY1Step )
@ -197,7 +201,7 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
targetPos . Y2 = Ops . GetCurPosition ( AxisControl . LoadY2 ) ;
if ( GroupAxisMove . XY1Y2MovePos ( targetPos , GlobalVar . WholeSpeed ) )
{
AxisPosPrint . PrintXY1Y2TargetPos ( " 到安全位 ,", targetPos , GetClassName ( ) ) ;
AxisPosPrint . PrintXY1Y2TargetPos ( " 移动Y1到治具侧 ,", targetPos , GetClassName ( ) ) ;
if ( GlobalVar . VirtualAxis )
{
Thread . Sleep ( GlobalVar . VirtualAxisMoveTime ) ;
@ -208,7 +212,7 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
case EDischargeModuleGoSafePosFlowStep . 等 待 运 动 到 安 全 位 :
if ( Ops . IsStop ( "LoadX" , "LoadY1" , "LoadY2" ) | | GlobalVar . VirtualAxis )
{
AxisPosPrint . PrintXY1Y2CurrentPos ( " 已运动到安全位 ,", GetClassName ( ) ) ;
AxisPosPrint . PrintXY1Y2CurrentPos ( " Y1已运动治具侧 ,", GetClassName ( ) ) ;
arrivedSafePos = true ;
}
break ;
@ -220,6 +224,26 @@ namespace Rs.MotionPlat.Flow.SafePosFlow
}
}
/// <summary>
/// Y1是否在料仓侧
/// </summary>
/// <returns></returns>
private bool NearByStock ( )
{
double curLoadY1 = Ops . GetCurPosition ( AxisControl . LoadY1 ) ;
return Math . Abs ( curLoadY1 - GlobalVar . StockSideY1 ) < 10 ;
}
/// <summary>
/// Y1是否在治具侧
/// </summary>
/// <returns></returns>
private bool NearByFixture ( )
{
double curLoadY1 = Ops . GetCurPosition ( AxisControl . LoadY1 ) ;
return Math . Abs ( curLoadY1 - GlobalVar . FixtureSideY1 ) < 10 ;
}
/// <summary>
/// 判断是否在安全位
/// </summary>