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); } }