MotorZPort.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Threading;
  3. using SHJX.Service.Common.Extend;
  4. using SHJX.Service.Common.ReadXML;
  5. using SHJX.Service.Model.Control;
  6. using SHJX.Service.ServerClient.Interface;
  7. using SHJX.Service.ServerClient.TempController;
  8. using SHJX.Service.Common.Logging;
  9. using Microsoft.Extensions.Logging;
  10. namespace SHJX.Service.ServerClient.RS485Control
  11. {
  12. /// <summary>
  13. /// MotorZ通信
  14. /// </summary>
  15. public class MotorZPort : SerialPortImp, PortControlImp
  16. {
  17. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(MotorZPort));
  18. /// <summary>
  19. /// Z轴
  20. /// </summary>
  21. /// <param name="log">日志</param>
  22. /// <param name="config">配置</param>
  23. public MotorZPort( ReadConfigUtil config)
  24. : base( config)
  25. {
  26. config.GetSpeed.ForEach(item => {
  27. if (item.NodeName == "MotorZ")
  28. speedZ = item.Speed;
  29. });
  30. }
  31. private double speedZ = 0;
  32. public object Read(PortArgs args)
  33. {
  34. object res = args.ReadWay switch
  35. {
  36. "OriginalPosition" => GetOriginalPosition(args),
  37. _ => JudgeStorage(args.NodeId),
  38. };
  39. return res;
  40. }
  41. public object GetOriginalPosition(PortArgs args)
  42. {
  43. var res = JudgeStorage(args.NodeId);
  44. if (res is null or { Length: 0 }) return false;
  45. return res[2].Equals('0');
  46. }
  47. public bool Write(PortArgs args)
  48. {
  49. //var portArgs = new PortArgs
  50. //{
  51. // TypeName = "Mani",
  52. // NodeId = 3,
  53. // ReadWay = "Judge"
  54. //};
  55. long distance = args.Distance;
  56. //var resbool = GetJudge(portArgs);
  57. //if (resbool)
  58. //{
  59. // distance /= 2;//通过判断抓手状态决定Z轴运行距离
  60. //}
  61. var res = args.WriteWay switch
  62. {
  63. WriteWay.Move => zmove(args),
  64. WriteWay.GoBack => MotorGoBack(args.NodeId, 3),
  65. WriteWay.Stop => MotorStop(args.NodeId),
  66. WriteWay.Speed => MotorSpeed(args.NodeId, args.Distance),
  67. WriteWay.AcSpeed => MotorAcSpeed(args.NodeId, args.Distance),
  68. WriteWay.DeSpeed => MotorDeSpeed(args.NodeId, args.Distance),
  69. _ => throw new ArgumentNullException(args.WriteWay.GetEnumDesc<WriteWay>()),
  70. };
  71. return res;
  72. }
  73. private bool zmove(PortArgs args)
  74. {
  75. string res1 = "";
  76. while (res1 != "0009\r" && res1 != "0209\r")
  77. {
  78. var storageRes = JudgeXYZMove(1);//Z轴动之前x轴要静止
  79. if (storageRes.Equals("")) return false;
  80. res1 = storageRes;
  81. Thread.Sleep(300);
  82. }
  83. res1 = "";
  84. while (res1 != "0009\r" && res1 != "0209\r")
  85. {
  86. var storageRes = JudgeXYZMove(2);//Z轴动之前Y轴要静止
  87. if (storageRes.Equals("")) return false;
  88. res1 = storageRes;
  89. Thread.Sleep(300);
  90. }
  91. return Move(args.NodeId, args.Distance, 50, speedZ);
  92. }
  93. }
  94. }