123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Linq;
- using System.Text;
- namespace VeederRoot_ATG_Console.MessageEntity.Incoming
- {
- /// <summary>
- /// i|I607,油罐直径
- /// </summary>
- public class QueryOrSetTankDiameterResponse : IncomingMessageBase
- {
- public DateTime? CurrentDateAndTime
- {
- get
- {
- if (base.FunctionCode.Item1 == MessageFormat.Display)
- return null;
- return DateTime.ParseExact(
- Encoding.ASCII.GetString(base.DataFieldAndOptionalCheckSumAndETX.Take(10).ToArray()),
- "yyMMddHHmm", CultureInfo.InvariantCulture);
- }
- }
- public int? TankNumberInFunctionCode
- {
- get
- {
- if (base.FunctionCode.Item1 == MessageFormat.Display)
- return null;
- var r = int.Parse(base.FunctionCode.Item3);
- return r;
- }
- }
- public IEnumerable<Tuple<int, double>> Diameters
- {
- get
- {
- if (base.FunctionCode.Item1 == MessageFormat.Display)
- return null;
- var result = new List<Tuple<int, double>>();
- int elapsed = 10;
- while (true)
- {
- if (base.DataFieldAndOptionalCheckSumAndETX.Skip(elapsed).Count() < 10) break;
- var target = base.DataFieldAndOptionalCheckSumAndETX.Skip(elapsed).Take(10).ToArray();
- var tankNumber = int.Parse(Encoding.ASCII.GetString(target.Take(2).ToArray()));
- var asciiEncodedBytes = Util.ConvertHexBcdStrToBytes(target.Skip(2).Take(8).ToArray());
- var diameterInches = Util.ConvertIEEEWith4BytesToDouble(asciiEncodedBytes.ToArray());
- elapsed += 10;
- result.Add(new Tuple<int, double>(tankNumber, diameterInches));
- }
- return result;
- }
- }
- public override string ToLogString()
- {
- if (base.FunctionCode.Item1 == MessageFormat.Display)
- return Encoding.ASCII.GetString(base.DataFieldAndOptionalCheckSumAndETX.ToArray());
- return "Current DateTime: " + this.CurrentDateAndTime.Value.ToString("yyyy-MM-dd HH:mm")
- + ", TankNumber: " + (this?.TankNumberInFunctionCode ?? -1)
- + " with Diameters list(tankNumber:diameter)-> "
- + (this.Diameters != null && this.Diameters.Any() ?
- this.Diameters.Select(p => p.Item1 + ":" + p.Item2).Aggregate((acc, n) => acc + ", " + n)
- : "");
- }
- }
- }
|