using Parser.BinaryParser.Attributes; using Parser.BinaryParser.Util; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Runtime.Remoting.Messaging; namespace HengShan_Pump_NonIC.MessageEntity { public class GetNozzleStatusResponse : NonICMessageTemplateBase { public GetNozzleStatusResponse() { //CMD = 0xA0; //this.Account = 0x00; //this.Status = 0x00; //pumpStatuses = new List(); } //private List pumpStatuses; //public List GetPumpStatuses() //{ // return this.pumpStatuses; //} public enum PumpStatus { 不允许加油,//D7 = 0 允许加油,//D7 = 1 加油过程,//D6 = 0 加油结束,//D6 = 1 油枪打开,//D5 = 1 油枪关,//D5 = 0 电机打开,//D4 = 1 电机关,//D4 = 0 帐号加油,//D3=1 邮票加油,//D2=1 公斤加油,//D1=1,D0=0, 公斤加油(升加油);升版 (公斤) 金额加油,//D1 = 0, D0 = 1, 金额加油(升加油); 升版 (公斤) 公升加油,//D1=0,D0=0, 加升油(公斤加油);升版 (公斤) D30,//D3=0 D20//D2=0 } /// /// status = D7D6D5D4D3D2D1D0 /// /// public void AddPumpStatus(PumpStatus s) { //this.pumpStatuses.Add(s); switch (s) { case PumpStatus.允许加油: Status = Status.SetBit(7, 7, 1); break; case PumpStatus.不允许加油: Status = Status.SetBit(7, 7, 0); break; case PumpStatus.加油结束: Status = Status.SetBit(6, 6, 1); break; case PumpStatus.加油过程: Status = Status.SetBit(6, 6, 0); break; case PumpStatus.油枪打开: Status = Status.SetBit(5, 5, 1); break; case PumpStatus.油枪关: Status = Status.SetBit(5, 5, 0); break; case PumpStatus.电机打开: Status = Status.SetBit(4, 4, 1); break; case PumpStatus.电机关: Status = Status.SetBit(4, 4, 0); break; case PumpStatus.帐号加油: Status = Status.SetBit(3, 3, 1); break; case PumpStatus.邮票加油: Status = Status.SetBit(2, 2, 1); break; case PumpStatus.公斤加油: Status = Status.SetBit(1, 1, 1); Status = Status.SetBit(0, 0, 0); break; case PumpStatus.金额加油: Status = Status.SetBit(1, 1, 0); Status = Status.SetBit(0, 0, 1); break; case PumpStatus.公升加油: Status = Status.SetBit(1, 1, 0); Status = Status.SetBit(0, 0, 0); break; } } public IEnumerable GetPumpStatus() { var result = new List(); result.Add(this.Status.GetBit(7) == 0 ? PumpStatus.不允许加油 : PumpStatus.允许加油); result.Add(this.Status.GetBit(6) == 0 ? PumpStatus.加油过程 : PumpStatus.加油结束); result.Add(this.Status.GetBit(5) == 1 ? PumpStatus.油枪打开 : PumpStatus.油枪关); result.Add(this.Status.GetBit(4) == 0 ? PumpStatus.电机关 : PumpStatus.电机打开); result.Add(this.Status.GetBit(3) == 1 ? PumpStatus.帐号加油 : PumpStatus.D30); result.Add(this.Status.GetBit(2) == 1 ? PumpStatus.邮票加油 : PumpStatus.D20); var bit01 = this.Status & 3; switch (bit01) { case 0: result.Add(PumpStatus.公斤加油); break; case 1: result.Add(PumpStatus.金额加油); break; case 2: result.Add(PumpStatus.公升加油); break; } return result.ToArray(); } public override string ToLogString() { var logString = base.ToLogString(); if (this.GetPumpStatus().Any()) logString += this.GetPumpStatus().Select(s => s.ToString()).Aggregate((acc, n) => acc + "--" + n); return logString; } [Format(2, EncodingType.BCD, 3)] public int 流水号 { get; set; } [Format(3, EncodingType.BCD, 5)] public int 加油量 { get; set; } [Format(3, EncodingType.BCD, 8)] public int 加油金额 { get; set; } [Format(2, EncodingType.BCD, 11)] public int 单价 { get; set; } /// /// 8bits /// D7D6D5D4D3D2D1D0 /// [Format(1, EncodingType.BIN, 13)] public byte Status { get; set; } /// /// 预设值 /// [Format(3, EncodingType.BCD, 14)] public int 定量 { get; set; } /// /// 暂时不用 /// [Format(2, EncodingType.BIN, 17)] public int Account { get; set; } } }