using System; using System.Collections.Generic; using System.Text; namespace DataClients { public class IshData { public DateTime time; public ushort id; public string value; } public class TechCycle { public enum Operation : ushort { end_tech_cycle = 0, unloading_loading = 1, vacuum_welding = 2, welding = 5, cooling_welding = 6, looking_welding = 7, vacuum_melting = 8, breeding_bathtub = 9, melting = 10, VUR = 11, cooling_ingot = 12, unloading_kit = 13, vacuum_reflow = 14, reflow = 15, cooling_reflow = 16, overflow_metal = 17, check_protection = 25 } public DateTime start; public DateTime end; public Operation index; } public class ByteMatrix { public DateTime time; public byte?[] matrix; } public static class Converter { public static char ConvertByteToChar(byte b) { char temp; switch (b) { case 0x00: temp = ' '; break; case 0x09: temp = '\t'; break; case 0x0a: temp = '\n'; break; case 0x80: temp = 'А'; break; case 0x81: temp = 'Б'; break; case 0x82: temp = 'В'; break; case 0x83: temp = 'Г'; break; case 0x84: temp = 'Д'; break; case 0x85: temp = 'Е'; break; case 0x86: temp = 'Ж'; break; case 0x87: temp = 'З'; break; case 0x88: temp = 'И'; break; case 0x89: temp = 'Й'; break; case 0x8a: temp = 'К'; break; case 0x8b: temp = 'Л'; break; case 0x8c: temp = 'М'; break; case 0x8d: temp = 'Н'; break; case 0x8e: temp = 'О'; break; case 0x8f: temp = 'П'; break; case 0x90: temp = 'Р'; break; case 0x91: temp = 'С'; break; case 0x92: temp = 'Т'; break; case 0x93: temp = 'У'; break; case 0x94: temp = 'Ф'; break; case 0x95: temp = 'Х'; break; case 0x96: temp = 'Ц'; break; case 0x97: temp = 'Ч'; break; case 0x98: temp = 'Ш'; break; case 0x99: temp = 'Щ'; break; case 0x9a: temp = 'Ъ'; break; case 0x9b: temp = 'Ы'; break; case 0x9c: temp = 'Ь'; break; case 0x9d: temp = 'Э'; break; case 0x9e: temp = 'Ю'; break; case 0x9f: temp = 'Я'; break; case 0xa0: temp = 'а'; break; case 0xa1: temp = 'б'; break; case 0xa2: temp = 'в'; break; case 0xa3: temp = 'г'; break; case 0xa4: temp = 'д'; break; case 0xa5: temp = 'е'; break; case 0xa6: temp = 'ж'; break; case 0xa7: temp = 'з'; break; case 0xa8: temp = 'и'; break; case 0xa9: temp = 'й'; break; case 0xaa: temp = 'к'; break; case 0xab: temp = 'л'; break; case 0xac: temp = 'м'; break; case 0xad: temp = 'н'; break; case 0xae: temp = 'о'; break; case 0xaf: temp = 'п'; break; case 0xe0: temp = 'р'; break; case 0xe1: temp = 'c'; break; case 0xe2: temp = 'т'; break; case 0xe3: temp = 'у'; break; case 0xe4: temp = 'ф'; break; case 0xe5: temp = 'х'; break; case 0xe6: temp = 'ц'; break; case 0xe7: temp = 'ч'; break; case 0xe8: temp = 'ш'; break; case 0xe9: temp = 'щ'; break; case 0xea: temp = 'ъ'; break; case 0xeb: temp = 'ы'; break; case 0xec: temp = 'ь'; break; case 0xed: temp = 'э'; break; case 0xee: temp = 'ю'; break; case 0xef: temp = 'я'; break; case 0xf0: temp = 'Ё'; break; case 0xf1: temp = 'ё'; break; default: temp = Convert.ToChar(b); break; } return temp; } public static DateTime ConvertUnixTimeToDateTime(int unixTimeStamp) { DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).AddHours(5); return dtDateTime; } } public static class Names { public static List techCycle = new List() { "Конец технологического цикла", //00 "Выгрузка-загрузка", //01 "Вакуумирование на приварку", //02 "Цикл 3", //03 "Цикл 4", //04 "Приварка", //05 "Охлаждение приварки", //06 "Осмотр приварки", //07 "Вакуумирование на плавку", //08 "Разведение ванны", //09 "Плавка (основной режим)", //10 "ВУР", //11 "Охлаждение слитка", //12 "Выгрузка комплекта", //13 "Вакуумирование на оплавление", //14 "Оплавление", //15 "Охлаждение оплавыша", //16 "Слив металла", //17 "Цикл 18", //18 "Цикл 19", //19 "Цикл 20", //20 "Цикл 21", //21 "Цикл 22", //22 "Цикл 23", //23 "Цикл 24", //24 "Проверка защит" //25 }; public static List analogFull = new List() { "", //000 "", //001 "", //002 "", //003 "", //004 "", //005 "", //006 "", //007 "", //008 "", //009 "", //010 "", //011 "", //012 "Вакуум" //013 }; public static List analogShort = new List() { "", //000 "", //001 "", //002 "", //003 "", //004 "", //005 "", //006 "", //007 "", //008 "", //009 "", //010 "", //011 "", //012 "Вакуум" //013 }; public static List analogMeasure = new List() { "", //000 "", //001 "", //002 "", //003 "", //004 "", //005 "", //006 "", //007 "", //008 "", //009 "", //010 "", //011 "", //012 "мкм.рт.ст" //013 }; public static List discretFull = new List() { "", //000 "", //001 "", //002 "", //003 "", //004 "", //005 "", //006 "", //007 "", //008 "", //009 "", //010 "", //011 "", //012 "", //013 "", //014 "", //015 "", //016 "", //017 "", //018 "", //019 "", //020 "", //021 "SZO включен" //022 }; public static List discretShort = new List() { "", //000 "", //001 "", //002 "", //003 "", //004 "", //005 "", //006 "", //007 "", //008 "", //009 "", //010 "", //011 "", //012 "", //013 "", //014 "", //015 "", //016 "", //017 "", //018 "", //019 "", //020 "", //021 "" //022 }; public static List dscretMods = new List() { new string[] { "","" }, //000 new string[] { "","" }, //001 new string[] { "","" }, //002 new string[] { "","" }, //003 new string[] { "","" }, //004 new string[] { "","" }, //005 new string[] { "","" }, //006 new string[] { "","" }, //007 new string[] { "","" }, //008 new string[] { "","" }, //009 new string[] { "","" }, //010 new string[] { "","" }, //011 new string[] { "","" }, //012 new string[] { "","" }, //013 new string[] { "","" }, //014 new string[] { "","" }, //015 new string[] { "","" }, //016 new string[] { "","" }, //017 new string[] { "","" }, //018 new string[] { "","" }, //019 new string[] { "","" }, //020 new string[] { "","" }, //021 new string[] { "Нет","Да" } //022 }; public static List protect = new List() { "", //00 "", //01 "", //02 "", //03 "", //04 "", //05 "", //06 "", //07 "", //08 "", //09 "", //10 "", //11 "", //12 "", //13 "", //14 "", //15 "", //16 "", //17 "", //18 "", //19 "", //20 "", //21 "", //22 "", //23 "", //24 "", //25 "", //26 "", //27 "", //28 "", //29 "", //30 "", //31 "", //32 "", //33 "", //34 "", //35 "", //36 "", //37 "", //38 "", //39 "", //40 "", //41 "", //42 "", //43 "", //44 "", //45 "", //46 "", //47 "", //48 "", //49 "", //50 "", //51 "", //52 "", //53 "", //54 "", //55 "", //56 "", //57 "", //58 "", //59 "", //60 "", //61 "", //62 "", //63 "", //64 "", //65 "", //66 "", //67 "", //68 "", //69 "", //70 "", //71 "Алгоритм 31: Низкая скорость плавки!", //72 "", //73 "", //74 "", //75 "", //76 "", //77 "", //78 "", //79 "" //80 }; } public class Pasport { public byte numVDP = 0x00; public DateTime time_start = DateTime.Now; public DateTime time_end = DateTime.Now; public bool have_pasport = false; public int kod_npl = 0; public string nplav = ""; public string rm = ""; public string splav = ""; public string _is = ""; public ushort notd = 0; public ushort vessl = 0; public ushort diam = 0; public ushort prpl = 0; public string tin = ""; public string dzap = ""; public short dlog = 0; public short last = 0; public short dlper = 0; public string nazn = ""; public ushort kompl = 0; public ushort izl = 0; public float robm = 0.0f; public float rizol = 0.0f; public ushort dkr = 0; public string nkon = ""; public string pos = ""; public string ukaz = ""; public string zakaz = ""; public string kat = ""; public string pril = ""; public string rezerved = ""; public byte[] time_start_byte { set { time_start = byte_to_date(value); } } public byte[] time_end_byte { set { time_end = byte_to_date(value); } } private DateTime byte_to_date(byte[] a) { return (a.Length < 7) ? DateTime.Now : new DateTime(BitConverter.ToUInt16(a, 0), (int)a[2], (int)a[3], (int)a[4], (int)a[5], (int)a[6]); } public byte[] byteArr { set { var i = 0; if (value.Length < i + 1) return; numVDP = value[i]; i += 1; if (value.Length < i + 7) return; var arr = new byte[7]; Array.Copy(value, i, arr, 0, 7); time_start_byte = arr; i += 7; if (value.Length < i + 7) return; arr = new byte[7]; Array.Copy(value, i, arr, 0, 7); time_end_byte = arr; i += 7; if (value.Length < i + 1) return; have_pasport = value[i] == 0x01; i += 1; if (!have_pasport) return; if (value.Length < i + 4) return; kod_npl = BitConverter.ToInt32(value, i); i += 4; Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var enc = Encoding.GetEncoding(866); if (value.Length < i + 12) return; nplav = enc.GetString(value, i, 12); i += 12; if (value.Length < i + 11) return; rm = enc.GetString(value, i, 11); i += 11; if (value.Length < i + 101) return; splav = enc.GetString(value, i, 101); i += 101; if (value.Length < i + 51) return; _is = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 2) return; notd = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 2) return; vessl = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 2) return; diam = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 2) return; prpl = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 9) return; tin = enc.GetString(value, i, 9); i += 9; if (value.Length < i + 9) return; dzap = enc.GetString(value, i, 9); i += 9; if (value.Length < i + 2) return; dlog = BitConverter.ToInt16(value, i); i += 2; if (value.Length < i + 2) return; last = BitConverter.ToInt16(value, i); i += 2; if (value.Length < i + 2) return; dlper = BitConverter.ToInt16(value, i); i += 2; if (value.Length < i + 51) return; nazn = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 2) return; kompl = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 2) return; izl = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 4) return; robm = BitConverter.ToSingle(value, i); i += 4; if (value.Length < i + 4) return; rizol = BitConverter.ToSingle(value, i); i += 4; if (value.Length < i + 2) return; dkr = BitConverter.ToUInt16(value, i); i += 2; if (value.Length < i + 51) return; nkon = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 6) return; pos = enc.GetString(value, i, 6); i += 6; if (value.Length < i + 51) return; ukaz = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 51) return; zakaz = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 51) return; kat = enc.GetString(value, i, 51); i += 51; if (value.Length < i + 3) return; pril = enc.GetString(value, i, 3); i += 3; if (value.Length < i + 1023) return; rezerved = enc.GetString(value, i, 1023); i += 1023; } } override public string ToString() { var r = new StringBuilder(); r.Append("numVDP:\t"); r.Append(numVDP); r.Append('\n'); r.Append("tStart:\t"); r.Append(time_start.ToString()); r.Append('\n'); r.Append("tEnd:\t"); r.Append(time_end.ToString()); r.Append('\n'); r.Append("Check:\t"); r.Append(have_pasport.ToString()); r.Append('\n'); if (!have_pasport) return r.ToString(); r.Append("knpl:\t"); r.Append(kod_npl); r.Append('\n'); r.Append("nplav:\t"); r.Append(nplav); r.Append('\n'); r.Append("rm:\t"); r.Append(rm); r.Append('\n'); r.Append("splav:\t"); r.Append(splav); r.Append('\n'); r.Append("_is:\t"); r.Append(_is); r.Append('\n'); r.Append("notd:\t"); r.Append(notd); r.Append('\n'); r.Append("vessl:\t"); r.Append(vessl); r.Append('\n'); r.Append("diam:\t"); r.Append(diam); r.Append('\n'); r.Append("prpl:\t"); r.Append(prpl); r.Append('\n'); r.Append("tin:\t"); r.Append(tin); r.Append('\n'); r.Append("dzap:\t"); r.Append(dzap); r.Append('\n'); r.Append("dlog:\t"); r.Append(dlog); r.Append('\n'); r.Append("last:\t"); r.Append(last); r.Append('\n'); r.Append("dlper:\t"); r.Append(dlper); r.Append('\n'); r.Append("nazn:\t"); r.Append(nazn); r.Append('\n'); r.Append("kompl:\t"); r.Append(kompl); r.Append('\n'); r.Append("izl:\t"); r.Append(izl); r.Append('\n'); r.Append("robm:\t"); r.Append(robm); r.Append('\n'); r.Append("rizol:\t"); r.Append(rizol); r.Append('\n'); r.Append("dkr:\t"); r.Append(dkr); r.Append('\n'); r.Append("nkon:\t"); r.Append(nkon); r.Append('\n'); r.Append("pos:\t"); r.Append(pos); r.Append('\n'); r.Append("ukaz:\t"); r.Append(ukaz); r.Append('\n'); r.Append("zakaz:\t"); r.Append(zakaz); r.Append('\n'); r.Append("kat:\t"); r.Append(kat); r.Append('\n'); r.Append("pril:\t"); r.Append(pril); r.Append('\n'); r.Append("rezerv:\t"); r.Append(rezerved); r.Append('\n'); return r.ToString(); } } public class ADresult { public Dictionary[]> an = new Dictionary[]>(); public Dictionary[]> di = new Dictionary[]>(); } public class AnalogsMatrix { public Dictionary matrix = new Dictionary(); public AnalogsMatrix(int vdp = 0) { matrix.Add(13, new Analog() { min = 0, max = 1000, mul = 0.1, byteId = new ushort[] { 26, 27 } }); if (vdp == 50) { matrix.Add(0, new Analog() { min = -10000, max = 10000, mul = 1, byteId = new ushort[] { 0, 1 } }); matrix.Add(1, new Analog() { min = -10000, max = 10000, mul = 1, byteId = new ushort[] { 2, 3 } }); } } } public class Analog { public double min = double.MinValue; public double max = double.MaxValue; public double mul = 1; public ushort[] byteId = new ushort[0]; } public class DiscretsMatrix { public Dictionary matrix = new Dictionary(); public DiscretsMatrix(int vdp = 0) { matrix.Add(22, new Discret() { byteId = 0x30, bitId = 6, invert = false }); } } public class Discret { public ushort byteId = 0x00; public ushort bitId = 0x00; public bool invert = false; } public class Protect { public DateTime time; public int id; public int value; } }