ReadRealTimeFuelingAmountDataInPumpNonFuelingStateAnswer.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Edge.Core.Parser.BinaryParser.Attributes;
  2. using Edge.Core.Parser.BinaryParser.Util;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. namespace Censtar_31064V105OrV106_Pump.MessageEntity.Incoming
  7. {
  8. /// <summary>
  9. /// 读单机实时数据 - 关机时
  10. /// 1.当加油机处于默认状态时,按一次数字键即表示定量开始,根据定量方式填金额/升或公斤。
  11. /// 2.对于一主板多枪的情况,有的状态是属于整个主板的,如上锁;有的状态是属于油枪的,如加
  12. /// 油和预置,如果当一枪加油时而其它枪另有预置,则正在加油的枪的状态优先。
  13. /// </summary>
  14. public class ReadRealTimeFuelingAmountDataInPumpNonFuelingStateAnswer : MessageBase
  15. {
  16. public enum ReadRealTimeFuelDataStateEnum
  17. {
  18. 关机_解锁,
  19. 关机_上锁,
  20. 加油_非总台预置加油,
  21. 加油_总台预置加油,
  22. 正在升定量,
  23. 正在金额定量,
  24. 正在公斤定量,
  25. 未定量,
  26. 无总台预置,
  27. 有总台预置,
  28. 无交易可读,
  29. 有交易可读
  30. }
  31. [Format(3, EncodingType.BCD, 1)]
  32. public int 金额 { get; set; }
  33. [Format(1, EncodingType.BIN, 2)]
  34. public byte State_Raw { get; set; }
  35. public IEnumerable<ReadRealTimeFuelDataStateEnum> States
  36. {
  37. get
  38. {
  39. return ParseStates(this.State_Raw);
  40. }
  41. }
  42. public static IEnumerable<ReadRealTimeFuelDataStateEnum> ParseStates(byte state_raw)
  43. {
  44. var result = new List<ReadRealTimeFuelDataStateEnum>();
  45. var bit0_and_bit1 = state_raw & 0x03;
  46. if (bit0_and_bit1 == 0)
  47. result.Add(ReadRealTimeFuelDataStateEnum.关机_解锁);
  48. else if (bit0_and_bit1 == 2)
  49. result.Add(ReadRealTimeFuelDataStateEnum.关机_上锁);
  50. else if (bit0_and_bit1 == 1)
  51. result.Add(ReadRealTimeFuelDataStateEnum.加油_非总台预置加油);
  52. else if (bit0_and_bit1 == 3)
  53. result.Add(ReadRealTimeFuelDataStateEnum.加油_总台预置加油);
  54. var bit2_and_bit3 = state_raw & 0x0C;
  55. if (bit2_and_bit3 == 0)
  56. result.Add(ReadRealTimeFuelDataStateEnum.正在升定量);
  57. else if (bit2_and_bit3 == 2)
  58. result.Add(ReadRealTimeFuelDataStateEnum.正在公斤定量);
  59. else if (bit2_and_bit3 == 1)
  60. result.Add(ReadRealTimeFuelDataStateEnum.正在金额定量);
  61. else if (bit2_and_bit3 == 3)
  62. result.Add(ReadRealTimeFuelDataStateEnum.未定量);
  63. var bit4 = state_raw.GetBit(3);
  64. if (bit4 == 0)
  65. result.Add(ReadRealTimeFuelDataStateEnum.无总台预置);
  66. else
  67. result.Add(ReadRealTimeFuelDataStateEnum.有总台预置);
  68. var bit5 = state_raw.GetBit(4);
  69. if (bit5 == 0)
  70. result.Add(ReadRealTimeFuelDataStateEnum.无交易可读);
  71. else
  72. result.Add(ReadRealTimeFuelDataStateEnum.有交易可读);
  73. return result;
  74. }
  75. }
  76. }