using Edge.Core.Parser.BinaryParser.Attributes; using Edge.Core.Parser.BinaryParser.Util; using System; using System.Collections.Generic; using System.Text; namespace Censtar_31064V105OrV106_Pump.MessageEntity.Incoming { /// /// 读单机实时数据 - 关机时 /// 1.当加油机处于默认状态时,按一次数字键即表示定量开始,根据定量方式填金额/升或公斤。 /// 2.对于一主板多枪的情况,有的状态是属于整个主板的,如上锁;有的状态是属于油枪的,如加 /// 油和预置,如果当一枪加油时而其它枪另有预置,则正在加油的枪的状态优先。 /// public class ReadRealTimeFuelingAmountDataInPumpNonFuelingStateAnswer : MessageBase { public enum ReadRealTimeFuelDataStateEnum { 关机_解锁, 关机_上锁, 加油_非总台预置加油, 加油_总台预置加油, 正在升定量, 正在金额定量, 正在公斤定量, 未定量, 无总台预置, 有总台预置, 无交易可读, 有交易可读 } [Format(3, EncodingType.BCD, 1)] public int 金额 { get; set; } [Format(1, EncodingType.BIN, 2)] public byte State_Raw { get; set; } public IEnumerable States { get { return ParseStates(this.State_Raw); } } public static IEnumerable ParseStates(byte state_raw) { var result = new List(); var bit0_and_bit1 = state_raw & 0x03; if (bit0_and_bit1 == 0) result.Add(ReadRealTimeFuelDataStateEnum.关机_解锁); else if (bit0_and_bit1 == 2) result.Add(ReadRealTimeFuelDataStateEnum.关机_上锁); else if (bit0_and_bit1 == 1) result.Add(ReadRealTimeFuelDataStateEnum.加油_非总台预置加油); else if (bit0_and_bit1 == 3) result.Add(ReadRealTimeFuelDataStateEnum.加油_总台预置加油); var bit2_and_bit3 = state_raw & 0x0C; if (bit2_and_bit3 == 0) result.Add(ReadRealTimeFuelDataStateEnum.正在升定量); else if (bit2_and_bit3 == 2) result.Add(ReadRealTimeFuelDataStateEnum.正在公斤定量); else if (bit2_and_bit3 == 1) result.Add(ReadRealTimeFuelDataStateEnum.正在金额定量); else if (bit2_and_bit3 == 3) result.Add(ReadRealTimeFuelDataStateEnum.未定量); var bit4 = state_raw.GetBit(3); if (bit4 == 0) result.Add(ReadRealTimeFuelDataStateEnum.无总台预置); else result.Add(ReadRealTimeFuelDataStateEnum.有总台预置); var bit5 = state_raw.GetBit(4); if (bit5 == 0) result.Add(ReadRealTimeFuelDataStateEnum.无交易可读); else result.Add(ReadRealTimeFuelDataStateEnum.有交易可读); return result; } } }