public static ParsedParameter[] ParseDaily(byte[] b, int offset, VersionSoftware verSw, Action <string, int> log = null) { bool isExtended = false; if ((verSw == VersionSoftware.ver100) || (verSw == VersionSoftware.ver200) || (verSw == VersionSoftware.ver300) || (verSw == VersionSoftware.verM100) || (verSw == VersionSoftware.verM300)) { if ((offset + 32) > b.Length) { throw new Exception("ответ не распознан (несовпадение по длине)"); } } else if ((verSw == VersionSoftware.ver101) || (verSw == VersionSoftware.ver201) || (verSw == VersionSoftware.verMTE1) || (verSw == VersionSoftware.ver301) || (verSw == VersionSoftware.verM101) || (verSw == VersionSoftware.verM301)) { if ((offset + 64) > b.Length) { throw new Exception("ответ не распознан (несовпадение по длине)"); } isExtended = true; } else { throw new Exception("версия не поддерживается"); } List <ParsedParameter> p = new List <ParsedParameter>(); if ((verSw == VersionSoftware.ver100) || (verSw == VersionSoftware.ver200) || (verSw == VersionSoftware.ver300) || (verSw == VersionSoftware.ver101) || (verSw == VersionSoftware.ver201) || (verSw == VersionSoftware.verMTE1) || (verSw == VersionSoftware.ver301)) { //if (log != null) log($"дата: байты {string.Join(" ", b.Skip(offset).Take(5).Select(a => $"{a: X2}"))}... после парсинга {ParseDate(b, offset + 0)}", 2); DateTime date = ParseDate(b, offset + 0, log); if (date != DateTime.MaxValue) { if (verSw != VersionSoftware.verMTE1) { p.Add(new ParsedParameter { date = date, parameter = "E", unit = "МВт*ч", value = ParseFloat(b, offset + 4) }); } p.Add(new ParsedParameter { date = date, parameter = "Q1", unit = "м3/ч", value = ParseFloat(b, offset + 8) }); p.Add(new ParsedParameter { date = date, parameter = "T1", unit = "°C", value = ParseFloat(b, offset + 16) }); p.Add(new ParsedParameter { date = date, parameter = "T2", unit = "°C", value = ParseFloat(b, offset + 20) }); p.Add(new ParsedParameter { date = date, parameter = "P", unit = "кВт", value = ParseFloat(b, offset + 28) }); if ((verSw != VersionSoftware.ver100) && (verSw != VersionSoftware.ver101)) { p.Add(new ParsedParameter { date = date, parameter = "Q2", unit = "м3/ч", value = ParseFloat(b, offset + 12) }); p.Add(new ParsedParameter { date = date, parameter = "T3", unit = "°C", value = ParseFloat(b, offset + 24) }); } if (isExtended) { p.Add(new ParsedParameter { date = date, parameter = "p1", unit = "МПа", value = ParseFloat(b, offset + 32) }); p.Add(new ParsedParameter { date = date, parameter = "p2", unit = "МПа", value = ParseFloat(b, offset + 36) }); p.Add(new ParsedParameter { date = date, parameter = "V1", unit = "м3", value = ParseFloat(b, offset + 40) }); p.Add(new ParsedParameter { date = date, parameter = "V1т", unit = "т", value = ParseFloat(b, offset + 48) }); p.Add(new ParsedParameter { date = date, parameter = "tраб", unit = "ч", value = ParseFloat(b, offset + 56) }); //p.Add(new ParsedParameter { date = date, parameter = "E", unit = "МВт*ч", value = ParseFloat(b, 60) }); if (verSw != VersionSoftware.ver101) { p.Add(new ParsedParameter { date = date, parameter = "V2", unit = "м3", value = ParseFloat(b, offset + 44) }); p.Add(new ParsedParameter { date = date, parameter = "V2т", unit = "т", value = ParseFloat(b, offset + 52) }); } } } } else { //if (log != null) log($"дата: байты {string.Join(" ", b.Skip(offset).Take(5).Select(a => $"{a: X2}"))}... после парсинга {ParseDate(b, offset + 0)}", 2); DateTime date = ParseDate(b, offset + 0, log); if (date != DateTime.MaxValue) { p.Add(new ParsedParameter { date = date, parameter = "tраб", unit = "ч", value = ParseFloat(b, offset + 4) }); p.Add(new ParsedParameter { date = date, parameter = isExtended ? "G1" : "Q1", unit = "т", value = ParseFloat(b, offset + 8) }); p.Add(new ParsedParameter { date = date, parameter = "T1", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 16) * 0.01 }); p.Add(new ParsedParameter { date = date, parameter = "T2", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 18) * 0.01 }); p.Add(new ParsedParameter { date = date, parameter = "tmax", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 22) }); p.Add(new ParsedParameter { date = date, parameter = "tmin", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 24) }); p.Add(new ParsedParameter { date = date, parameter = "tdt", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 26) }); p.Add(new ParsedParameter { date = date, parameter = "E", unit = "Гкал", value = ParseFloat(b, offset + 28) }); if ((verSw != VersionSoftware.verM100) && (verSw != VersionSoftware.verM101)) { p.Add(new ParsedParameter { date = date, parameter = isExtended ? "G2" : "Q2", unit = "т", value = ParseFloat(b, offset + 12) }); p.Add(new ParsedParameter { date = date, parameter = "T3", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 20) * 0.01 }); } if (isExtended) { p.Add(new ParsedParameter { date = date, parameter = "p1", unit = "МПа", value = ParseFloat(b, offset + 32) }); p.Add(new ParsedParameter { date = date, parameter = "p2", unit = "МПа", value = ParseFloat(b, offset + 36) }); p.Add(new ParsedParameter { date = date, parameter = "Q1", unit = "м3/ч", value = ParseFloat(b, offset + 40) }); p.Add(new ParsedParameter { date = date, parameter = "V1", unit = "м3", value = ParseFloat(b, offset + 48) }); p.Add(new ParsedParameter { date = date, parameter = "tрабс", unit = "с", value = b[offset + 56] + ((UInt32)b[offset + 57] << 8) + ((UInt32)b[offset + 58] << 16) }); if (verSw != VersionSoftware.verM101) { p.Add(new ParsedParameter { date = date, parameter = "Q2", unit = "м3/ч", value = ParseFloat(b, offset + 44) }); p.Add(new ParsedParameter { date = date, parameter = "V2", unit = "м3", value = ParseFloat(b, offset + 52) }); } } } } return(p.ToArray()); }
public static ParsedParameter[] ParseHourly(byte[] b, int offset, VersionSoftware verSw) { bool isExtended = false; if ((verSw == VersionSoftware.ver100) || (verSw == VersionSoftware.ver200) || (verSw == VersionSoftware.ver300) || (verSw == VersionSoftware.verM100) || (verSw == VersionSoftware.verM300)) { if ((offset + 32) > b.Length) { throw new Exception("ответ не распознан (несовпадение по длине)"); } } else if ((verSw == VersionSoftware.ver101) || (verSw == VersionSoftware.ver201) || (verSw == VersionSoftware.verMTE1) || (verSw == VersionSoftware.ver301) || (verSw == VersionSoftware.verM101) || (verSw == VersionSoftware.verM301)) { if ((offset + 64) > b.Length) { throw new Exception("ответ не распознан (несовпадение по длине)"); } isExtended = true; } else { throw new Exception("версия не поддерживается"); } List <ParsedParameter> p = new List <ParsedParameter>(); if ((verSw == VersionSoftware.ver100) || (verSw == VersionSoftware.ver200) || (verSw == VersionSoftware.ver300) || //старая статистика (verSw == VersionSoftware.ver101) || (verSw == VersionSoftware.ver201) || (verSw == VersionSoftware.verMTE1) || (verSw == VersionSoftware.ver301)) //расширенная статистика { DateTime date = ParseDate(b, offset + 0); if (date != DateTime.MaxValue) { date.Add(ParseTime(b, offset + 4)); p.Add(new ParsedParameter { date = date, parameter = "Q1", unit = "м3/ч", value = ParseFloat(b, offset + 8) }); p.Add(new ParsedParameter { date = date, parameter = "T1", unit = "°C", value = ParseFloat(b, offset + 16) }); p.Add(new ParsedParameter { date = date, parameter = "T2", unit = "°C", value = ParseFloat(b, offset + 20) }); p.Add(new ParsedParameter { date = date, parameter = "P", unit = "кВт", value = ParseFloat(b, offset + 28) }); if ((verSw != VersionSoftware.ver100) && (verSw != VersionSoftware.ver101)) { p.Add(new ParsedParameter { date = date, parameter = "Q2", unit = "м3/ч", value = ParseFloat(b, offset + 12) }); p.Add(new ParsedParameter { date = date, parameter = "T3", unit = "°C", value = ParseFloat(b, offset + 24) }); } if (isExtended) { p.Add(new ParsedParameter { date = date, parameter = "p1", unit = "МПа", value = ParseFloat(b, offset + 32) }); p.Add(new ParsedParameter { date = date, parameter = "p2", unit = "МПа", value = ParseFloat(b, offset + 36) }); p.Add(new ParsedParameter { date = date, parameter = "V1", unit = "м3", value = ParseFloat(b, offset + 40) }); p.Add(new ParsedParameter { date = date, parameter = "V1т", unit = "т", value = ParseFloat(b, offset + 48) }); p.Add(new ParsedParameter { date = date, parameter = "tраб", unit = "ч", value = ParseFloat(b, offset + 56) }); p.Add(new ParsedParameter { date = date, parameter = "E", unit = "МВт*ч", value = ParseFloat(b, offset + 60) }); if (verSw != VersionSoftware.ver101) { p.Add(new ParsedParameter { date = date, parameter = "V2", unit = "м3", value = ParseFloat(b, offset + 44) }); p.Add(new ParsedParameter { date = date, parameter = "V2т", unit = "т", value = ParseFloat(b, offset + 52) }); } } } } else { DateTime date = ParseDate(b, offset + 0); if (date != DateTime.MaxValue) { date = date.AddHours(BinDecToInt(b[offset + 5])); p.Add(new ParsedParameter { date = date, parameter = "tрабч", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 6) }); p.Add(new ParsedParameter { date = date, parameter = isExtended ? "G1" : "Q1", unit = "т", value = ParseFloat(b, offset + 8) }); p.Add(new ParsedParameter { date = date, parameter = "T1", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 16) * 0.01 }); p.Add(new ParsedParameter { date = date, parameter = "T2", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 18) * 0.01 }); p.Add(new ParsedParameter { date = date, parameter = "tmax", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 22) }); p.Add(new ParsedParameter { date = date, parameter = "tmin", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 24) }); p.Add(new ParsedParameter { date = date, parameter = "tdt", unit = "с", value = Helper.ToUInt16Reverse(b, offset + 26) }); p.Add(new ParsedParameter { date = date, parameter = "E", unit = "Гкал", value = ParseFloat(b, offset + 28) }); if (verSw != VersionSoftware.verM100 && verSw != VersionSoftware.verM101) { p.Add(new ParsedParameter { date = date, parameter = isExtended ? "G2" : "Q2", unit = "т", value = ParseFloat(b, offset + 12) }); p.Add(new ParsedParameter { date = date, parameter = "T3", unit = "°C", value = Helper.ToInt16Reverse(b, offset + 20) * 0.01 }); } if (isExtended) { p.Add(new ParsedParameter { date = date, parameter = "p1", unit = "МПа", value = ParseFloat(b, offset + 32) }); p.Add(new ParsedParameter { date = date, parameter = "p2", unit = "МПа", value = ParseFloat(b, offset + 36) }); p.Add(new ParsedParameter { date = date, parameter = "Q1", unit = "м3/ч", value = ParseFloat(b, offset + 40) }); p.Add(new ParsedParameter { date = date, parameter = "V1", unit = "м3", value = ParseFloat(b, offset + 48) }); p.Add(new ParsedParameter { date = date, parameter = "tраб", unit = "ч", value = ParseFloat(b, offset + 56) }); if (verSw != VersionSoftware.verM101) { p.Add(new ParsedParameter { date = date, parameter = "Q2", unit = "м3/ч", value = ParseFloat(b, offset + 44) }); p.Add(new ParsedParameter { date = date, parameter = "V2", unit = "м3", value = ParseFloat(b, offset + 52) }); } } } } return(p.ToArray()); }