GetNozzleStatusResponse.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Dfs.WayneChina.HengshanTerminalWrapper.MessageEntity.Base;
  4. using Edge.Core.Parser.BinaryParser.Attributes;
  5. using Edge.Core.Parser.BinaryParser.Util;
  6. namespace Dfs.WayneChina.HengshanTerminalWrapper.MessageEntity.Outgoing
  7. {
  8. public class GetNozzleStatusResponse : NonCardDispenserMessageTemplateBase
  9. {
  10. public GetNozzleStatusResponse()
  11. {
  12. CMD = 0xA0;
  13. this.Account = 0x00;
  14. this.Status = 0x00;
  15. pumpStatuses = new List<PumpStatus>();
  16. }
  17. private List<PumpStatus> pumpStatuses;
  18. public List<PumpStatus> GetPumpStatuses()
  19. {
  20. return this.pumpStatuses;
  21. }
  22. public enum PumpStatus
  23. {
  24. 不允许加油,//D7 = 0
  25. 允许加油,//D7 = 1
  26. 加油过程,//D6 = 0
  27. 加油结束,//D6 = 1
  28. 油枪打开,//D5 = 1
  29. 油枪关,//D5 = 0
  30. 电机打开,//D4 = 1
  31. 电机关,//D4 = 0
  32. 帐号加油,//D3=1
  33. 邮票加油,//D2=1
  34. 公斤加油,//D1=1,D0=0, 公斤加油(升加油);升版 (公斤)
  35. 金额加油,//D1 = 0, D0 = 1, 金额加油(升加油); 升版 (公斤)
  36. 公升加油,//D1=0,D0=0, 加升油(公斤加油);升版 (公斤)
  37. D30,//D3=0
  38. D20//D2=0
  39. }
  40. /// <summary>
  41. /// status = D7D6D5D4D3D2D1D0
  42. /// </summary>
  43. /// <param name="s"></param>
  44. public void AddPumpStatus(PumpStatus s)
  45. {
  46. this.pumpStatuses.Add(s);
  47. switch (s)
  48. {
  49. case PumpStatus.允许加油:
  50. Status = Status.SetBit(7, 7, 1);
  51. break;
  52. case PumpStatus.不允许加油:
  53. Status = Status.SetBit(7, 7, 0);
  54. break;
  55. case PumpStatus.加油结束:
  56. Status = Status.SetBit(6, 6, 1);
  57. break;
  58. case PumpStatus.加油过程:
  59. Status = Status.SetBit(6, 6, 0);
  60. break;
  61. case PumpStatus.油枪打开:
  62. Status = Status.SetBit(5, 5, 1);
  63. break;
  64. case PumpStatus.油枪关:
  65. Status = Status.SetBit(5, 5, 0);
  66. break;
  67. case PumpStatus.电机打开:
  68. Status = Status.SetBit(4, 4, 1);
  69. break;
  70. case PumpStatus.电机关:
  71. Status = Status.SetBit(4, 4, 0);
  72. break;
  73. case PumpStatus.帐号加油:
  74. Status = Status.SetBit(3, 3, 1);
  75. break;
  76. case PumpStatus.邮票加油:
  77. Status = Status.SetBit(2, 2, 1);
  78. break;
  79. case PumpStatus.公斤加油:
  80. Status = Status.SetBit(1, 1, 1);
  81. Status = Status.SetBit(0, 0, 0);
  82. break;
  83. case PumpStatus.金额加油:
  84. Status = Status.SetBit(1, 1, 0);
  85. Status = Status.SetBit(0, 0, 1);
  86. break;
  87. case PumpStatus.公升加油:
  88. Status = Status.SetBit(1, 1, 0);
  89. Status = Status.SetBit(0, 0, 0);
  90. break;
  91. }
  92. }
  93. public IEnumerable<PumpStatus> GetPumpStatus(byte state)
  94. {
  95. var result = new List<PumpStatus>();
  96. result.Add(state.GetBit(7)== 0?PumpStatus.不允许加油 : PumpStatus.允许加油);
  97. var bit6 = state & 64;
  98. result.Add(state.GetBit(6)==0?PumpStatus.加油过程 : PumpStatus.加油结束);
  99. var bit5 = state & 32;
  100. result.Add(state.GetBit(5) == 1 ? PumpStatus.油枪打开 : PumpStatus.油枪关);
  101. var bit4 = state & 16;
  102. result.Add(state.GetBit(4) ==0 ? PumpStatus.电机关 : PumpStatus.电机打开);
  103. var bit3 = state & 8;
  104. result.Add(state.GetBit(3) == 1 ? PumpStatus.帐号加油 : PumpStatus.D30);
  105. var bit2 = state & 4;
  106. result.Add(state.GetBit(2) == 1 ? PumpStatus.邮票加油 : PumpStatus.D20);
  107. var bit01 = state & 3;
  108. switch (bit01)
  109. {
  110. case 0:
  111. result.Add(PumpStatus.公斤加油);
  112. break;
  113. case 1:
  114. result.Add(PumpStatus.金额加油);
  115. break;
  116. case 2:
  117. result.Add(PumpStatus.公升加油);
  118. break;
  119. }
  120. return result.ToArray();
  121. }
  122. public override string ToLogString()
  123. {
  124. var logString = base.ToLogString();
  125. if (pumpStatuses.Count > 0)
  126. logString += GetPumpStatus(this.Status).Select(s => s.ToString()).Aggregate((acc, n) => acc + "--" + n);
  127. return logString;
  128. }
  129. [Format(2, EncodingType.BIN, 3)]
  130. public int 流水号 { get; set; }
  131. [Format(3, EncodingType.BCD, 5)]
  132. public int 加油量 { get; set; }
  133. [Format(3, EncodingType.BCD, 8)]
  134. public int 加油金额 { get; set; }
  135. [Format(2, EncodingType.BCD, 11)]
  136. public int 单价 { get; set; }
  137. /// <summary>
  138. /// 8bits
  139. /// D7D6D5D4D3D2D1D0
  140. /// </summary>
  141. [Format(1, EncodingType.BIN, 13)]
  142. public byte Status { get; set; }
  143. /// <summary>
  144. /// 预设值
  145. /// </summary>
  146. [Format(3, EncodingType.BCD, 14)]
  147. public int 定量 { get; set; }
  148. /// <summary>
  149. /// 暂时不用
  150. /// </summary>
  151. [Format(2, EncodingType.BIN, 17)]
  152. public int Account { get; set; }
  153. }
  154. }