using SHJX.Service.Control.Extends;
using SHJX.Service.Control.Common.Assets;
namespace SHJX.Service.Control.MoveTime.Interface
{
public abstract class ICalculator
{
///
/// 电机移动所需时间
///
///
///
protected double MotorMoveTimeCalculate(string fromPosition_goBack, string toPosition_goBack)
{
DissolveDate dissolveDates_goBack = DataManagerInstance.GetDissolveDateByEnable();
if (dissolveDates_goBack is null)
{
return 0;
}
double fromTime_goBack = FromCurrentPositionArriveFromPosition(fromPosition_goBack);
double toTime_goBack = FromPositionArriveToPosition(fromPosition_goBack, toPosition_goBack);
var dissolvePosition_goBack = dissolveDates_goBack.PositionName;
double dissolveMoveTime_goBack = FromPositionArriveToPosition(toPosition_goBack, dissolvePosition_goBack);
double dateTime = fromTime_goBack + toTime_goBack + dissolveMoveTime_goBack;
return dateTime;
}
///
/// 从当前位置到达From点位需要时间
///
///
/// 返回结果单位是秒
protected double FromCurrentPositionArriveFromPosition(string fromPosition)
{
TaskRuntime.Calculate(fromPosition, out double xNeedTime, out double yNeedTime, out _, out _);
double time = Math.Abs(xNeedTime) + Math.Abs(yNeedTime);
return time;
}
///
/// From到To所需时间
///
///
///
/// 返回结果单位是秒
protected double FromPositionArriveToPosition(string fromPosition, string toPosition)
{
FromMoveTo(fromPosition, toPosition, out double xSpendTime, out double ySpendTime, out double zSpendTime, out double zfSpendTime);
double toTime = Math.Abs(xSpendTime) + Math.Abs(ySpendTime) + zSpendTime * 4;
return toTime;
}
///
/// From到To
///
///
///
///
///
///
private void FromMoveTo(string fromPosition, string toPosition, out double xSpendTime, out double ySpendTime, out double zSpendTime, out double zfSpendTime)
{
EquipmentArea fromArea = DataManagerInstance.GetAreaByPoint(fromPosition);
EquipmentArea toArea = DataManagerInstance.GetAreaByPoint(toPosition);
xSpendTime = (toArea.LocationX - fromArea.LocationX) * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisX);
ySpendTime = (toArea.LocationY - fromArea.LocationY) * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisY);
zSpendTime = toArea.LocationZ * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisZ);
zfSpendTime = toArea.LocationZF * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisZ);
}
///
/// 计算
///
///
/// 返回值为秒
public abstract double Calculate(string positionName);
}
}