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;
}
}
}