Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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());
        }