ICalculator.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using SHJX.Service.Control.Extends;
  2. using SHJX.Service.Control.Common.Assets;
  3. namespace SHJX.Service.Control.MoveTime.Interface
  4. {
  5. public abstract class ICalculator
  6. {
  7. /// <summary>
  8. /// 电机移动所需时间
  9. /// </summary>
  10. /// <param name="task"></param>
  11. /// <returns></returns>
  12. protected double MotorMoveTimeCalculate(string fromPosition_goBack, string toPosition_goBack)
  13. {
  14. DissolveDate dissolveDates_goBack = DataManagerInstance.GetDissolveDateByEnable();
  15. if (dissolveDates_goBack is null)
  16. {
  17. return 0;
  18. }
  19. double fromTime_goBack = FromCurrentPositionArriveFromPosition(fromPosition_goBack);
  20. double toTime_goBack = FromPositionArriveToPosition(fromPosition_goBack, toPosition_goBack);
  21. var dissolvePosition_goBack = dissolveDates_goBack.PositionName;
  22. double dissolveMoveTime_goBack = FromPositionArriveToPosition(toPosition_goBack, dissolvePosition_goBack);
  23. double dateTime = fromTime_goBack + toTime_goBack + dissolveMoveTime_goBack;
  24. return dateTime;
  25. }
  26. /// <summary>
  27. /// 从当前位置到达From点位需要时间
  28. /// </summary>
  29. /// <param name="fromPosition"></param>
  30. /// <returns>返回结果单位是秒</returns>
  31. protected double FromCurrentPositionArriveFromPosition(string fromPosition)
  32. {
  33. TaskRuntime.Calculate(fromPosition, out double xNeedTime, out double yNeedTime, out _, out _);
  34. double time = Math.Abs(xNeedTime) + Math.Abs(yNeedTime);
  35. return time;
  36. }
  37. /// <summary>
  38. /// From到To所需时间
  39. /// </summary>
  40. /// <param name="fromPosition"></param>
  41. /// <param name="toPosition"></param>
  42. /// <returns>返回结果单位是秒</returns>
  43. protected double FromPositionArriveToPosition(string fromPosition, string toPosition)
  44. {
  45. FromMoveTo(fromPosition, toPosition, out double xSpendTime, out double ySpendTime, out double zSpendTime, out double zfSpendTime);
  46. double toTime = Math.Abs(xSpendTime) + Math.Abs(ySpendTime) + zSpendTime * 4;
  47. return toTime;
  48. }
  49. /// <summary>
  50. /// From到To
  51. /// </summary>
  52. /// <param name="fromPosition"></param>
  53. /// <param name="toPosition"></param>
  54. /// <param name="xSpendTime"></param>
  55. /// <param name="ySpendTime"></param>
  56. /// <param name="zSpendTime"></param>
  57. private void FromMoveTo(string fromPosition, string toPosition, out double xSpendTime, out double ySpendTime, out double zSpendTime, out double zfSpendTime)
  58. {
  59. EquipmentArea fromArea = DataManagerInstance.GetAreaByPoint(fromPosition);
  60. EquipmentArea toArea = DataManagerInstance.GetAreaByPoint(toPosition);
  61. xSpendTime = (toArea.LocationX - fromArea.LocationX) * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisX);
  62. ySpendTime = (toArea.LocationY - fromArea.LocationY) * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisY);
  63. zSpendTime = toArea.LocationZ * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisZ);
  64. zfSpendTime = toArea.LocationZF * 4000 / 20000 / 1000 * SpeedSleep.Calculation(EquipmentNames.AxisZ);
  65. }
  66. /// <summary>
  67. /// 计算
  68. /// </summary>
  69. /// <param name="positionName"></param>
  70. /// <returns>返回值为秒</returns>
  71. public abstract double Calculate(string positionName);
  72. }
  73. }