DissolvePort.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. /// 消解位通信
  14. /// </summary>
  15. public class DissolvePort : SerialPortImp, PortControlImp
  16. {
  17. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(DissolvePort));
  18. private readonly ReadConfigUtil _config;
  19. /// <summary>
  20. /// 消解位
  21. /// </summary>
  22. /// <param name="log">日志</param>
  23. /// <param name="config">配置</param>
  24. public DissolvePort( ReadConfigUtil config)
  25. : base(config)
  26. {
  27. _config = config;
  28. config.GetSpeed.ForEach(item => {
  29. if (item.NodeName == "MotorD")
  30. speedD = item.Speed;
  31. });
  32. }
  33. private double speedD = 0;
  34. public object Read(PortArgs args)
  35. {
  36. object obj = args.ReadWay switch
  37. {
  38. "OriginalPosition" => GetOriginalPosition(args),
  39. _ => JudgeStorage(args.NodeId),
  40. };
  41. return obj;
  42. }
  43. public object GetOriginalPosition(PortArgs args)
  44. {
  45. var res = JudgeStorage(args.NodeId);
  46. if (res is null or { Length: 0 }) return false;
  47. return res[3].Equals('0');
  48. }
  49. public bool Write(PortArgs args)
  50. {
  51. var res = args.WriteWay switch
  52. {
  53. WriteWay.Normotopia => MotorGoBack(args.NodeId, 3),
  54. WriteWay.Antiposition => MotorGoBackDissolvePortM(args),
  55. WriteWay.Move => Move(args.NodeId, args.Distance,speedD),
  56. WriteWay.Stop => MotorStop(args.NodeId),
  57. WriteWay.Speed => MotorSpeed(args.NodeId, args.Distance),
  58. WriteWay.AcSpeed => MotorAcSpeed(args.NodeId, args.Distance),
  59. WriteWay.DeSpeed => MotorDeSpeed(args.NodeId, args.Distance),
  60. _ => throw new ArgumentNullException(args.WriteWay.GetEnumDesc<WriteWay>())
  61. };
  62. return res;
  63. }
  64. /// <summary>
  65. /// 移动
  66. /// </summary>
  67. /// <param name="nodeId"></param>
  68. /// <param name="distance"></param>
  69. /// <returns></returns>
  70. public bool Move(byte nodeId, long distance,Double Speed)
  71. {
  72. MotorMove(nodeId, distance);
  73. Thread.Sleep((int)(Math.Abs(distance) / 20000 * 300* Speed + 500));
  74. return true;
  75. }
  76. private bool MotorGoBackDissolvePortM(PortArgs args)
  77. {
  78. if (args.ManualOrAuto=="Auto") {
  79. MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
  80. Thread.Sleep(800);
  81. MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
  82. Thread.Sleep(800);
  83. MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
  84. Thread.Sleep(800);
  85. MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
  86. Thread.Sleep(800);
  87. MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
  88. Thread.Sleep(800);
  89. MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
  90. Thread.Sleep(Convert.ToInt32(_config.CoolingPipeWatingTime) * 15000);
  91. }
  92. MotorGoBackDissolvePort(args.NodeId, 4);
  93. //Thread.Sleep((int)(Math.Abs(distance) / 20000 * 300 * Speed + 500));
  94. return true;
  95. }
  96. }
  97. }