public static void FromVmeshTable(this List <FloutecInterData> interData, OleDbDataReader reader) { var data = new FloutecInterData { DAT = DateTime.ParseExact(GetReaderValue(reader, "DAT", "").Trim(), datetimeFormats, new CultureInfo("en-US"), DateTimeStyles.None), CH_PAR = GetReaderValue(reader, "CH_PAR", 0) }; data.GetValues(reader); interData.Add(data); }
private static void GetValues(this FloutecInterData data, OleDbDataReader reader) { var bval11 = GetReaderValue(reader, "BVAL11", (byte)0); var bval12 = GetReaderValue(reader, "BVAL12", (byte)0); var bval13 = GetReaderValue(reader, "BVAL13", (byte)0); var bval14 = GetReaderValue(reader, "BVAL14", (byte)0); var bval21 = GetReaderValue(reader, "BVAL21", (byte)0); var bval22 = GetReaderValue(reader, "BVAL22", (byte)0); var bval23 = GetReaderValue(reader, "BVAL23", (byte)0); var bval24 = GetReaderValue(reader, "BVAL24", (byte)0); if (data.CH_PAR == 0) { byte[] oldChars = { bval11, bval12, bval13, bval14 }; byte[] newChars = { bval21, bval22, bval23, bval24 }; data.VAL_OLD = Encoding.UTF8.GetString(oldChars); data.VAL_NEW = Encoding.UTF8.GetString(newChars); } else if ((data.CH_PAR >= 1 && data.CH_PAR <= 11) || (data.CH_PAR >= 13 && data.CH_PAR <= 27) || (data.CH_PAR >= 33 && data.CH_PAR <= 37) || (data.CH_PAR >= 48 && data.CH_PAR <= 60) || data.CH_PAR == 129 || data.CH_PAR == 132 || data.CH_PAR == 138 || data.CH_PAR == 142 || data.CH_PAR == 143 || (data.CH_PAR >= 147 && data.CH_PAR <= 150) || (data.CH_PAR >= 153 && data.CH_PAR <= 177) || (data.CH_PAR >= 181 && data.CH_PAR <= 185)) { data.VAL_OLD = GetReaderValue(reader, "SVAL1", 0.0).ToString(CultureInfo.InvariantCulture); data.VAL_NEW = GetReaderValue(reader, "SVAL2", 0.0).ToString(CultureInfo.InvariantCulture); } else { switch (data.CH_PAR) { case 12: switch (bval11) { case 0: data.VAL_OLD = "Угловой"; break; case 1: data.VAL_OLD = "Фланцевый"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "Угловой"; break; case 1: data.VAL_NEW = "Фланцевый"; break; default: data.VAL_NEW = ""; break; } break; case 28: case 29: var oldDayFormat = (bval12 & (1 << 7)) != 0; var newDayFormat = (bval22 & (1 << 7)) != 0; if (bval11 > 0) { if (!oldDayFormat) { if (bval13 == 1 || bval13 == 21) { data.VAL_OLD = bval13 + " час "; } else if ((bval13 >= 2 && bval13 <= 4) || (bval13 >= 22 && bval13 <= 24)) { data.VAL_OLD = bval13 + " часа "; } else { data.VAL_OLD = bval13 + " часов "; } data.VAL_OLD = data.VAL_OLD + (bval12 >> 4) + "-го " + GetMonthName(bval11); } else { var dayCountDirection = (bval12 & (1 << 5)) != 0; var dayOfWeek = (bval12 >> 3) & 7; var weekOfMonth = (bval12 >> 0) & 7; data.VAL_OLD = !dayCountDirection?GetDayName(weekOfMonth, dayOfWeek) : GetOrdinalDayName(weekOfMonth, dayOfWeek); data.VAL_OLD = data.VAL_OLD + " " + GetMonthName(bval11) + ", "; if (bval13 == 1 || bval13 == 21) { data.VAL_OLD = data.VAL_OLD + bval13 + " час"; } else if ((bval13 >= 2 && bval13 <= 4) || (bval13 >= 22 && bval13 <= 24)) { data.VAL_OLD = data.VAL_OLD + bval13 + " часа"; } else { data.VAL_OLD = data.VAL_OLD + bval13 + " часов"; } } } else { data.VAL_OLD = "Запрет перехода"; } if (bval21 > 0) { if (!newDayFormat) { if (bval23 == 1 || bval23 == 21) { data.VAL_NEW = bval23 + " час "; } else if ((bval23 >= 2 && bval23 <= 4) || (bval23 >= 22 && bval23 <= 24)) { data.VAL_NEW = bval23 + " часа "; } else { data.VAL_NEW = bval23 + " часов "; } data.VAL_NEW = data.VAL_NEW + (bval22 >> 4) + "-го " + GetMonthName(bval21); } else { var dayCountDirection = (bval22 & (1 << 6)) != 0; var dayOfWeek = (bval22 >> 3) & 7; var weekOfMonth = (bval22 >> 0) & 7; data.VAL_NEW = !dayCountDirection?GetDayName(weekOfMonth, dayOfWeek) : GetOrdinalDayName(weekOfMonth, dayOfWeek); data.VAL_NEW = data.VAL_NEW + " " + GetMonthName(bval21) + ", "; if (bval23 == 1 || bval23 == 21) { data.VAL_NEW = data.VAL_NEW + bval23 + " час"; } else if ((bval23 >= 2 && bval23 <= 4) || (bval23 >= 22 && bval23 <= 24)) { data.VAL_NEW = data.VAL_NEW + bval23 + " часа"; } else { data.VAL_NEW = data.VAL_NEW + bval23 + " часов"; } } } else { data.VAL_NEW = "Запрет перехода"; } break; default: if ((data.CH_PAR >= 30 && data.CH_PAR <= 32) || data.CH_PAR == 46 || data.CH_PAR == 47 || data.CH_PAR == 130 || data.CH_PAR == 131 || (data.CH_PAR >= 186 && data.CH_PAR <= 188) || data.CH_PAR == 191 || data.CH_PAR == 192) { data.VAL_OLD = bval11.ToString(); data.VAL_NEW = bval21.ToString(); } else if (data.CH_PAR >= 38 && data.CH_PAR <= 40) // Модели ????? { data.VAL_OLD = ""; data.VAL_NEW = ""; } else { switch (data.CH_PAR) { case 41: switch (bval11) { case 0: data.VAL_OLD = "кг/см2"; break; case 1: data.VAL_OLD = "МПа"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "кг/см2"; break; case 1: data.VAL_NEW = "МПа"; break; default: data.VAL_NEW = ""; break; } break; case 42: switch (bval11) { case 0: data.VAL_OLD = "кг/м2"; break; case 1: data.VAL_OLD = "кПа"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "кг/м2"; break; case 1: data.VAL_NEW = "кПа"; break; default: data.VAL_NEW = ""; break; } break; case 43: data.VAL_OLD = ""; data.VAL_NEW = ""; break; case 44: switch (bval11) { case 0: data.VAL_OLD = "Абсолютное"; break; case 1: data.VAL_OLD = "Избыточное"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "Абсолютное"; break; case 1: data.VAL_NEW = "Избыточное"; break; default: data.VAL_NEW = ""; break; } break; case 45: switch (bval11) { case 0: data.VAL_OLD = "Ненужный"; break; case 1: data.VAL_OLD = "Необходимый"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "Ненужный"; break; case 1: data.VAL_NEW = "Необходимый"; break; default: data.VAL_NEW = ""; break; } break; default: if (data.CH_PAR >= 61 && data.CH_PAR <= 72) { switch (bval11) { case 0: data.VAL_OLD = "Выключено"; break; case 1: data.VAL_OLD = "Включено"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "Выключено"; break; case 1: data.VAL_NEW = "Включено"; break; default: data.VAL_NEW = ""; break; } } else if (data.CH_PAR >= 61 && data.CH_PAR <= 72) { switch (bval11) { case 0: data.VAL_OLD = "Перепад"; break; case 1: data.VAL_OLD = "Счётчик"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "Перепад"; break; case 1: data.VAL_NEW = "Счётчик"; break; default: data.VAL_NEW = ""; break; } } else { switch (data.CH_PAR) { case 128: var oldTime = new DateTime(1, 1, 1, bval11, bval12, bval13); var newTime = new DateTime(1, 1, 1, bval21, bval22, bval23); data.VAL_OLD = oldTime.ToString("HH:mm:ss"); data.VAL_NEW = newTime.ToString("HH:mm:ss"); break; case 144: case 179: data.T_PARAM = bval11; data.VAL_OLD = "Измерение"; data.VAL_NEW = GetReaderValue(reader, "SVAL2", 0.0).ToString(CultureInfo.InvariantCulture); break; case 145: case 180: data.T_PARAM = bval21; data.VAL_NEW = "Измерение"; data.VAL_OLD = GetReaderValue(reader, "SVAL1", 0.0).ToString(CultureInfo.InvariantCulture); break; case 146: case 151: data.T_PARAM = bval11; data.VAL_NEW = ""; data.VAL_OLD = ""; break; case 178: data.T_PARAM = bval11; data.VAL_NEW = ""; data.VAL_OLD = "HART команда " + bval21; break; case 189: switch (bval11) { case 0: data.VAL_OLD = "LE,le"; break; case 1: data.VAL_OLD = "LE,be"; break; case 2: data.VAL_OLD = "BE,le"; break; case 3: data.VAL_OLD = "BE,be"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "LE,le"; break; case 1: data.VAL_NEW = "LE,be"; break; case 2: data.VAL_NEW = "BE,le"; break; case 3: data.VAL_NEW = "BE,be"; break; default: data.VAL_NEW = ""; break; } break; case 190: switch (bval11) { case 0: data.VAL_OLD = "ASCII"; break; case 1: data.VAL_OLD = "RTU"; break; default: data.VAL_OLD = ""; break; } switch (bval21) { case 0: data.VAL_NEW = "ASCII"; break; case 1: data.VAL_NEW = "RTU"; break; default: data.VAL_NEW = ""; break; } break; default: data.VAL_OLD = ""; data.VAL_NEW = ""; break; } } break; } } break; } } }