using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ShowTrend3.Libs { public class AnalogSignals { public int VDP = -1; public List analogs = new List(); public int[] retAnalogs = new int[0]; public AnalogSignals(int VDP) { this.VDP = VDP; if (VDP == 49) { analogs.Add(new Analog() { id = new int[] { 92, 93 }, v = false, n = "Энергия плавильного пролёта", sn = "Эн.пролёта, МВт", s = "МВт", m = 0.1 }); } if (VDP >= 1 && VDP <= 47) { analogs.Add(new Analog() { id = new int[] { 0, 1 }, v = true, s = "кА", m = 0.1, n = "Ток дуги", sn = "I д" }); analogs.Add(new Analog() { id = new int[] { 2, 3 }, v = true, s = "В", m = 0.1, n = "Напряжение дуги", sn = "U д" }); analogs.Add(new Analog() { id = new int[] { 4, 5 }, v = false, s = "А", m = 0.1, n = "Ток рабочего двигателя", sn = "I рд"}); analogs.Add(new Analog() { id = new int[] { 6, 7 }, v = false, s = "В", m = 0.1, n = "U рабочего двигателя", sn = "U рд"}); analogs.Add(new Analog() { id = new int[] { 8, 9 }, v = false, s = "А", m = 0.1, n = "Ток соленоида", sn = "I сол"}); analogs.Add(new Analog() { id = new int[] { 10, 1 }, v = false, s = "В", m = 0.1, n = "U соленоида", sn = "U сол"}); analogs.Add(new Analog() { id = new int[] { 12, 13 }, v = false, s = "кА", m = 0.1, n = "Ток задания", sn = "I рз"}); analogs.Add(new Analog() { id = new int[] { 14, 15 }, v = false, s = "гр.С", m = 1, n = "t кристаллизатора на входе", sn = "t кр.вых"}); analogs.Add(new Analog() { id = new int[] { 16, 17 }, v = false, s = "гр.С", m = 1, n = "t кристаллизатора на выходе", sn = "t кр.вх"}); analogs.Add(new Analog() { id = new int[] { 18, 19 }, v = false, s = "гр.С", m = 1, n = "t вакуум-камеры", sn = "t вак-кам"}); analogs.Add(new Analog() { id = new int[] { 20, 21 }, v = false, s = "гр.С", m = 1, n = "t штока", sn = "t шт"}); analogs.Add(new Analog() { id = new int[] { 22, 23 }, v = false, s = "В", m = 0.1, n = "U контроля", sn = "U конт"}); analogs.Add(new Analog() { id = new int[] { 24, 25 }, v = true, s = "мм", m = 1, n = "Перемещение", sn = "S шт"}); analogs.Add(new Analog() { id = new int[] { 26, 27 }, v = true, s = "мкм.рт.с", m = 0.1, n = "Вакуум", sn = "Вакуум"}); analogs.Add(new Analog() { id = new int[] { 28, 29 }, v = false, s = "В", m = 0.1, n = "Изоляция шток-крышка", sn = "R шт-кр"}); analogs.Add(new Analog() { id = new int[] { 30, 31 }, v = false, s = "В", m = 0.1, n = "Изоляция крышка-камера", sn = "R кр-кам"}); analogs.Add(new Analog() { id = new int[] { 32, 33 }, v = false, s = "м^3/ч", m = 1, n = "Расход воды", sn = "Q в.кр"}); analogs.Add(new Analog() { id = new int[] { 34, 35 }, v = true, s = "", m = 1, n = "Капельные замыкания", sn = "Кап.зам."}); analogs.Add(new Analog() { id = new int[] { 36, 37 }, v = false, s = "", m = 1, n = "Усреднённая ширина импульсов КЗ", sn = "Кап.зым."}); analogs.Add(new Analog() { id = new int[] { 38, 39 }, v = false, s = "м^3/ч", m = 0.1, n = "Проток воды фланца", sn = "Qв. фл."}); analogs.Add(new Analog() { id = new int[] { 40, 41 }, v = false, s = "м^3/ч", m = 0.1, n = "Проток воды штока", sn = "Qв. шт."}); analogs.Add(new Analog() { id = new int[] { 42, 43 }, v = false, s = "кгс/см^2", m = 0.01, n = "Давление воды крист.+1,5", sn = "P в.кр"}); analogs.Add(new Analog() { id = new int[] { 44, 45 }, v = false, s = "м^3/ч", m = 0.1, n = "Проток воды камеры", sn = "Qв. кам."}); analogs.Add(new Analog() { id = new int[] { 58, 59 }, v = false, s = "кА", m = 0.1, n = "Ток задания источника(САУ)", sn = "I з.ист САУ"}); analogs.Add(new Analog() { id = new int[] { 62, 63 }, v = false, s = "В", m = 0.1, n = "ПИД-рег. основная уставка", sn = "ПИД-осн"}); analogs.Add(new Analog() { id = new int[] { 64, 65 }, v = false, s = "В", m = 0.1, n = "ПИД-рег. макс. скорость", sn = "ПИД-макс"}); analogs.Add(new Analog() { id = new int[] { 66, 67 }, v = false, s = "гр.С", m = 1, n = "t фланца вакуум-камеры", sn = "t фл."}); analogs.Add(new Analog() { id = new int[] { 68, 69 }, v = false, s = "гр.С", m = 1, n = "t подставки", sn = "t под."}); analogs.Add(new Analog() { id = new int[] { 70, 71 }, v = false, s = "м^3/ч", m = 1, n = "Проток воды подставки", sn = "Qв. под."}); analogs.Add(new Analog() { id = new int[] { 72, 73 }, v = false, s = "А", m = 0.1, n = "Задание соленоида", sn = "Зад. сол."}); analogs.Add(new Analog() { id = new int[] { 74, 75 }, v = false, s = "кА", m = 1, n = "Ток задания источника(преобраз.)", sn = "I з.ист. преоб."}); analogs.Add(new Analog() { id = new int[] { 78, 79 }, v = false, s = "мм.рт.ст", m = 0.1, n = "Вакуум по МЕТРАН-1200", sn = "МЕТРАН-1200"}); analogs.Add(new Analog() { id = new int[] { 80, 81 }, v = false, s = "мм.рт.ст", m = 0.001, n = "Вакуум по МЕТРАН-18,75", sn = "МЕТРАН-18,25"}); analogs.Add(new Analog() { id = new int[] { 82, 83 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление газа в баллоне", sn = "P г.балл."}); analogs.Add(new Analog() { id = new int[] { 84, 85 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление воды поддона", sn = "P в.подд."}); analogs.Add(new Analog() { id = new int[] { 86, 87 }, v = false, s = "кА", m = 0.1, n = "Задание тока дуги (ЦАП)", sn = "Зад.I, ЦАП"}); analogs.Add(new Analog() { id = new int[] { 88, 89 }, v = false, s = "В", m = 0.1, n = "Задкние скорости рабочего двигателя", sn = "Зад.ск.раб.дв"}); analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "А", m = 0.01, n = "Ток двигателя насоса ARPW", sn = "I дв. ARPW"}); analogs.Add(new Analog() { id = new int[] { 94, 95 }, v = false, s = "В", m = 1, n = "Среднее напряжение плавления", sn = "U средн, В"}); analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "А", m = 1, n = "ГМП: ток катушки 1", sn = "I кат1 ГМП"}); analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "А", m = 1, n = "ГМП: ток катушки 2", sn = "I кат2 ГМП"}); analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "А", m = 1, n = "ГМП: ток катушки 3", sn = "I кат3 ГМП"}); analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "Гц", m = 1, n = "ГМП: частота", sn = "Част. ГМП"}); } if (VDP == 1) { analogs.Add(new Analog() { id = new int[] { 99, 100 }, v = false, s = "кг", m = 0.1, n = "Масса стружки оставшаяся", sn = "Масс. стр. ост." }); } if (VDP >= 91 && VDP <= 92) { analogs.Add(new Analog() { id = new int[] { 80, 81 }, v = false, s = "В", m = 0.1, n = "Дельта U", sn = "dU" }); for (int i = 0; i < 3; i++) analogs.Add(new Analog() { id = new int[] { i * 2 + 82, i * 2 + 83 }, v = false, s = "кА", m = 0.1, n = "Ток ДБТ" + (i + 1), sn = "I ДБТ" + (i + 1) }); analogs.Add(new Analog() { id = new int[] { 104, 105 }, v = false, s = "гр.С", m = 0.1, n = "Температура в точке №41", sn = "t41" }); analogs.Add(new Analog() { id = new int[] { 106, 107 }, v = false, s = "кПа", m = 0.1, n = "Давление водооборота", sn = "p водооб" }); analogs.Add(new Analog() { id = new int[] { 112, 113 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление масла над поршнем", sn = "P мнп" }); analogs.Add(new Analog() { id = new int[] { 114, 115 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление масла под поршнем", sn = "P мпп" }); } if (VDP >= 93 && VDP <= 94) { for (int i = 0; i < 2; i++) analogs.Add(new Analog() { id = new int[] { i * 2 + 76, i * 2 + 77 }, v = false, s = "кА", m = 0.1, n = "Ток нижних подводов шина " + (i + 1), sn = "I шина" + i }); for (int i = 0; i < 4; i++) analogs.Add(new Analog() { id = new int[] { i * 2 + 80, i * 2 + 81 }, v = false, s = "кА", m = 0.1, n = "Ток нижних подводов шина " + (i + 3), sn = "I шина" + (i + 3) }); for (int i = 0; i < 2; i++) analogs.Add(new Analog() { id = new int[] { i * 2 + 104, i * 2 + 105 }, v = false, s = "кА", m = 0.1, n = "Ток нижних подводов шина " + (i + 7), sn = "I шина" + (i + 7) }); analogs.Add(new Analog() { id = new int[] { 112, 113 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление в верх. цилиндре прижима", sn = "P в.цил." }); analogs.Add(new Analog() { id = new int[] { 114, 115 }, v = false, s = "кгс/см^2", m = 0.1, n = "Давление в нижн. цилиндре прижима", sn = "P в.цил." }); } if (VDP >= 91 && VDP <= 94) { for (int i = 0; i < 9; i++) analogs.Add(new Analog() { id = new int[] { i * 2, i * 2 + 1 }, v = false, s = "гр.С", m = 0.1, n = "Температура в точке №" + (i + 1), sn = "t" + (i + 1)}); for (int i = 9; i < 18; i++) analogs.Add(new Analog() { id = new int[] { i * 2, i * 2 + 1 }, v = false, s = "гр.С", m = 0.1, n = "Температура в точке №" + (i + 2), sn = "t" + (i + 2)}); for (int i = 18; i < 38; i++) analogs.Add(new Analog() { id = new int[] { i * 2, i * 2 + 1 }, v = false, s = "гр.С", m = 0.1, n = "Температура в точке №" + (i + 3), sn = "t" + (i + 3)}); analogs.Add(new Analog() { id = new int[] { 88, 89}, v = false, s = "А", m = 1, n = "Ток рабочего двигателя", sn = "I рд"});///??? mnoj analogs.Add(new Analog() { id = new int[] { 90, 91 }, v = false, s = "В", m = 0.1, n = "Напряжение рабоч. двигателя", sn = "U рд"}); analogs.Add(new Analog() { id = new int[] { 92, 93 }, v = false, s = "В", m = 0.1, n = "Сопротивление изол. на плавке", sn = "U шт-кр"}); analogs.Add(new Analog() { id = new int[] { 94, 95 }, v = false, s = "кОм", m = 0.1, n = "Сопротивление изол. шток-крышка", sn = "R изол"}); analogs.Add(new Analog() { id = new int[] { 96, 97 }, v = false, s = "В", m = 0.1, n = "Уставка по напряжению дуги", sn = "U уст"}); analogs.Add(new Analog() { id = new int[] { 100, 101 }, v = false, s = "мкм.рт.с", m = 0.1, n = "Вакуум по Ceravac", sn = "Ceravac"}); analogs.Add(new Analog() { id = new int[] { 102, 103 }, v = false, s = "кПа", m = 0.1, n = "Вакуум по МЕТРАН-2.5", sn = "МЕТРАН 2.5"}); analogs.Add(new Analog() { id = new int[] { 108, 109 }, v = false, s = "гр", m = 0.1, n = "Угол поворота тигля", sn = "П.тиг"}); analogs.Add(new Analog() { id = new int[] { 110, 111 }, v = false, s = "кПа", m = 0.1, n = "Вакуум по МЕТРАН-1200", sn = "МЕТРАН 1200"}); analogs.Add(new Analog() { id = new int[] { 116, 117 }, v = true, s = "мм", m = 0.1, n = "Перемещение штока", sn = "S шт"}); analogs.Add(new Analog() { id = new int[] { 118, 119 }, v = false, s = "кВт*ч", m = 1, n = "Затраченная электр. энергия", sn = "Энергия"}); analogs.Add(new Analog() { id = new int[] { 120, 121 }, v = true, s = "кА", m = 0.1, n = "Ток дуги", sn = "I д"}); analogs.Add(new Analog() { id = new int[] { 122, 123 }, v = true, s = "В", m = 0.1, n = "Напряжение дуги", sn = "U д"}); analogs.Add(new Analog() { id = new int[] { 124, 125 }, v = true, s = "мм^3/ч", m = 0.2, n = "Расход воды", sn = "Q в"}); ///??? analogs.Add(new Analog() { id = new int[] { 126, 127 }, v = true, s = "мкм.рт.с", m = 0.1, n = "Вакуум", sn = "Вакуум"}); analogs.Add(new Analog() { id = new int[] { 128, 129 }, v = false, s = "кг", m = 1, n = "Вес слитого металла", sn = "Вес"}); } analogs.Sort(SortDelegate); } public void AddSignals(DateTime d, List b) { for (int e = 0; e < analogs.Count; e++) { bool flag = false; for (int i = 0; i < retAnalogs.Length; i++) flag |= (e == retAnalogs[i]); if (!flag) continue; byte?[] temp = new byte?[analogs[e].id.Length]; for (int i = 0; i < temp.Length; i++) temp[i] = b[analogs[e].id[i]]; analogs[e].AddSignal(d, temp); } } public StringBuilder ReturnListJson() { StringBuilder a = new StringBuilder(); a.Append("["); foreach (var e in analogs) { a.Append("{"); a.Append("\"fn\":\"" + e.n + "\","); a.Append("\"sn\":\"" + e.sn + "\","); a.Append("\"s\":\"" + e.s + "\","); a.Append("\"v\":"); if (e.v) a.Append("true"); else a.Append("false"); a.Append("},"); } if(a.Length > 1) a.Remove(a.Length - 1, 1); a.Append("]"); return a; } public StringBuilder ReturnResultJson() { StringBuilder a = new StringBuilder(); a.Append("["); for (int e = 0; e < analogs.Count; e++) { bool flag = false; for (int i = 0; i < retAnalogs.Length; i++) flag |= (e == retAnalogs[i]); if (!flag) continue; a.Append("[2,\"x\",\"y\""); if (analogs[e].answer.Length > 0) a.Append("," + analogs[e].answer); a.Append("],"); } if(a.Length > 1) a.Remove(a.Length - 1, 1); a.Append("]"); return a; } private static int SortDelegate(Analog x, Analog y) { if (x.id == null || x.id.Length < 1) if (y.id == null || y.id.Length < 1) return 0; else return 1; else if (y.id == null || y.id.Length < 1) return -1; else return x.id[0].CompareTo(y.id[0]); } } public class Analog { public int[] id = new int[0]; public string n = ""; public string sn = ""; public string s = ""; public double m = 1; public bool v = true; public StringBuilder answer = new StringBuilder(); public List<(long x, double? y)> Signals = new List<(long, double?)>(); public DateTime lastDate; public void AddSignal(DateTime d, byte?[] lh) { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); long x = CustomConverters.JStDateConv(d); double? y = lh[0].HasValue && lh[1].HasValue ? n == "Вакуум" ? BitConverter.ToUInt16(new byte[] { (byte)lh[0], (byte)lh[1] }, 0) * m : BitConverter.ToInt16(new byte[] { (byte)lh[0], (byte)lh[1] }, 0) * m : (double?)null; try { if (Signals.Count == 0) { Signals.Add((x, y)); return; } if (y == null) { Signals.Add((Signals.Last().x, y)); Signals.Add((x, y)); return; } if (Signals.Count < 2 || y != Signals.Last().y || y != Signals[Signals.Count - 2].y || d < lastDate) { Signals.Add((x, y)); return; } Signals.Add((x, y)); Signals.RemoveAt(Signals.Count - 2); } finally { lastDate = d; while (Signals.Count > 3) { string yy = Signals[0].y.HasValue ? Signals[0].y.ToString() : "null"; if (answer.Length != 0) answer.Append(","); answer.Append(Signals[0].x + "," + yy); Signals.RemoveAt(0); } } } public void Finish() { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); while (Signals.Count > 0) { string yy = Signals[0].y.HasValue ? Signals[0].y.ToString() : "null"; if (answer.Length != 0) answer.Append(","); answer.Append(Signals[0].x + "," + yy); Signals.RemoveAt(0); } } } }