RobotSiasunPhoenixBConnection.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Collections.Generic;
  2. using System.IO.Ports;
  3. using System.Text;
  4. using Aitex.Core.RT.Log;
  5. using MECF.Framework.Common.Communications;
  6. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.SiasunPhoenixB
  7. {
  8. public class RobotSiasunPhoenixBMessage : AsciiMessage
  9. {
  10. public string Data { get; set; }
  11. public string ErrorText { get; set; }
  12. }
  13. public class RobotSiasunPhoenixBTCPConnection : TCPPortConnectionBase
  14. {
  15. private bool _isAckMode = false;//should read from config file
  16. public RobotSiasunPhoenixBTCPConnection(string address, string endof)
  17. : base(address, endof, true)
  18. {
  19. }
  20. public override bool SendMessage(string message)
  21. {
  22. return base.SendMessage(message);
  23. }
  24. protected override void ActiveHandlerProceedMessage(MessageBase msg)
  25. {
  26. lock (_lockerActiveHandler)
  27. {
  28. if (_activeHandler != null)
  29. {
  30. if (msg.IsFormatError || !((RobotSiasunPhoenixBHandler)_activeHandler).HasResponse || (_activeHandler.HandleMessage(msg, out bool transactionComplete) && transactionComplete))
  31. {
  32. _activeHandler = null;
  33. }
  34. }
  35. }
  36. }
  37. protected override MessageBase ParseResponse(string rawText)
  38. {
  39. RobotSiasunPhoenixBMessage msg = new RobotSiasunPhoenixBMessage();
  40. msg.RawMessage = rawText;
  41. if (rawText.Length <= 0)
  42. {
  43. LOG.Error($"empty response,");
  44. msg.IsFormatError = true;
  45. return msg;
  46. }
  47. rawText = rawText.Replace("\r", "").Replace("\n", "");
  48. if (rawText.Contains("_ERR"))
  49. {
  50. msg.IsError = true;
  51. var rewTextArray = rawText.Split(' ');
  52. msg.Data = rewTextArray[1];
  53. msg.IsComplete = true;
  54. }
  55. else if (rawText.Contains("_BG_RDY"))
  56. {
  57. if (!_isAckMode)
  58. {
  59. LOG.Error($"response format check failed, BG_RDY is not valid in Mode 1");
  60. msg.IsFormatError = true;
  61. return msg;
  62. }
  63. msg.Data = rawText;
  64. msg.IsResponse = true;
  65. msg.IsAck = true;
  66. msg.IsComplete = true;
  67. }
  68. else if (rawText.Contains("_RDY"))
  69. {
  70. msg.Data = rawText.Replace("_RDY", "");
  71. msg.IsResponse = true;
  72. msg.IsAck = true;
  73. msg.IsComplete = true;
  74. }
  75. else
  76. {
  77. msg.Data = rawText;
  78. msg.IsResponse = true;
  79. }
  80. return msg;
  81. }
  82. }
  83. }