MotorYOperate.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using SHJX.Service.Model.Control;
  3. using SHJX.Service.Control.Modules;
  4. using SHJX.Service.Control.Interface;
  5. using System.Linq;
  6. using SHJX.Service.Common.ReadXML;
  7. namespace SHJX.Service.Control.Route.RouteController
  8. {
  9. public class MotorYOperate : FlowControlOperateImp
  10. {
  11. private const string OpName = "MotorY";
  12. public virtual bool Operate(ReadConfigUtil config, DataEventArgs data)
  13. {
  14. var res = data.Task.RouteStep switch
  15. {
  16. "Y_Move_From" => SetSerialPortData(data, data.Task.From),
  17. "Y_Move_To" => SetSerialPortData(data, data.Task.To),
  18. _ => throw new ArgumentNullException(data.Task.RouteStep),
  19. };
  20. return res;
  21. }
  22. private static bool SetSerialPortData(DataEventArgs data, string local)
  23. {
  24. PortArgs portArgs = new()
  25. {
  26. WriteWay = WriteWay.Move,
  27. TypeName = OpName,
  28. Distance = local.CalculateAreaPoint(OpName)
  29. };
  30. if (data.Client.Factory(OpName).Write(portArgs))
  31. {
  32. var motor = DataCentre.GetMotor.First(item => item.EquipmentName.Equals(OpName));
  33. if (motor is null) throw new ArgumentNullException(OpName);
  34. motor.FinalPoint += -portArgs.Distance / motor.ConvertRatio;
  35. var row = DataCentre._dataManager.Update(motor);
  36. return true;
  37. }
  38. return false;
  39. }
  40. }
  41. }