OsakaPumpTGkineHandler.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using MECF.Framework.Common.Communications;
  2. using System.Collections.Generic;
  3. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Pumps.OsakaPumpTGkine
  4. {
  5. public abstract class OsakaPumpTGkineHandler : HandlerBase
  6. {
  7. public OsakaPumpTGkine Device { get; }
  8. private static byte _slaveID = 0x01;
  9. protected OsakaPumpTGkineHandler(OsakaPumpTGkine device, byte addressHigh, byte addressLow)
  10. : base(BuildMessage(new byte[] { addressHigh, addressLow }))
  11. {
  12. Device = device;
  13. }
  14. protected OsakaPumpTGkineHandler(OsakaPumpTGkine device, byte addressHigh, byte addressLow, byte valueHigh, byte valueLow)
  15. : base(BuildMessage(new byte[] { addressHigh, addressLow }, new byte[] { valueHigh, valueLow }))
  16. {
  17. Device = device;
  18. }
  19. private static byte[] BuildMessage(byte[] address)
  20. {
  21. List<byte> result = new List<byte>() { 0x02, _slaveID, 0x00, 0x09, 0x52, 0x00, 0x02 };
  22. if (address != null)
  23. {
  24. foreach (byte data in address)
  25. result.Add(data);
  26. }
  27. result.AddRange(new List<byte>() { 0x00, 0x02 });
  28. result.Add(CalcSum(result));
  29. result.AddRange(new List<byte>() { 0x03, 0x03 });
  30. return result.ToArray();
  31. }
  32. private static byte[] BuildMessage(byte[] address, byte[] datas)
  33. {
  34. List<byte> result = new List<byte>() { 0x02, _slaveID, 0x00, 0x0A, 0x57, 0x00, 0x02 };
  35. if (address != null)
  36. {
  37. foreach (byte data in address)
  38. result.Add(data);
  39. }
  40. result.Add(CalcSum(result));
  41. if (address != null)
  42. {
  43. foreach (byte data in datas)
  44. result.Add(data);
  45. }
  46. result.Add(CalcSum(result));
  47. result.AddRange(new List<byte>() { 0x03, 0x03 });
  48. return result.ToArray();
  49. }
  50. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  51. {
  52. OsakaPumpTGkineMessage response = msg as OsakaPumpTGkineMessage;
  53. ResponseMessage = msg;
  54. if (response.IsResponse)
  55. {
  56. SetState(EnumHandlerState.Acked);
  57. SetState(EnumHandlerState.Completed);
  58. transactionComplete = true;
  59. Device.NoteError(null);
  60. return true;
  61. }
  62. transactionComplete = false;
  63. return false;
  64. }
  65. public static byte CalcSum(List<byte> value)
  66. {
  67. byte ret = 0x00;
  68. for (var i = 0; i < value.Count; i++)
  69. {
  70. ret += value[i];
  71. }
  72. ret = (byte)~ret;
  73. ret++;
  74. return ret;
  75. }
  76. }
  77. public class OsakaPumpTGkineLowerReadHandler : OsakaPumpTGkineHandler
  78. {
  79. public byte ResultHigh { get; set; }
  80. public byte ResultLow { get; set; }
  81. public OsakaPumpTGkineLowerReadHandler(OsakaPumpTGkine device, byte addressHigh, byte addressLow)
  82. : base(device, addressHigh, addressLow)
  83. {
  84. }
  85. public override bool HandleMessage(MessageBase msg, out bool handled)
  86. {
  87. if (base.HandleMessage(msg, out handled))
  88. {
  89. var result = msg as OsakaPumpTGkineMessage;
  90. ResultHigh = result.RawMessage[5];
  91. ResultLow = result.RawMessage[6];
  92. Device.NoteLowerReadDone();
  93. }
  94. return true;
  95. }
  96. }
  97. public class OsakaPumpTGkineLowerWriteHandler : OsakaPumpTGkineHandler
  98. {
  99. public OsakaPumpTGkineLowerWriteHandler(OsakaPumpTGkine device, byte addressHigh, byte addressLow, byte valueHigh, byte valueLow)
  100. : base(device, addressHigh, addressLow, valueHigh, valueLow)
  101. {
  102. }
  103. public override bool HandleMessage(MessageBase msg, out bool handled)
  104. {
  105. if (base.HandleMessage(msg, out handled))
  106. {
  107. var result = msg as OsakaPumpTGkineMessage;
  108. Device.NoteLowerWriteDone();
  109. }
  110. return true;
  111. }
  112. }
  113. }