2020-09-04 12:49:15 +05:00
|
|
|
|
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<string> techCycle = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"Конец технологического цикла", //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<string> analogFull = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //000
|
|
|
|
|
"", //001
|
|
|
|
|
"", //002
|
|
|
|
|
"", //003
|
|
|
|
|
"", //004
|
|
|
|
|
"", //005
|
|
|
|
|
"", //006
|
|
|
|
|
"", //007
|
|
|
|
|
"", //008
|
|
|
|
|
"", //009
|
|
|
|
|
"", //010
|
|
|
|
|
"", //011
|
|
|
|
|
"", //012
|
|
|
|
|
"Вакуум" //013
|
|
|
|
|
};
|
|
|
|
|
public static List<string> analogShort = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //000
|
|
|
|
|
"", //001
|
|
|
|
|
"", //002
|
|
|
|
|
"", //003
|
|
|
|
|
"", //004
|
|
|
|
|
"", //005
|
|
|
|
|
"", //006
|
|
|
|
|
"", //007
|
|
|
|
|
"", //008
|
|
|
|
|
"", //009
|
|
|
|
|
"", //010
|
|
|
|
|
"", //011
|
|
|
|
|
"", //012
|
|
|
|
|
"Вакуум" //013
|
|
|
|
|
};
|
|
|
|
|
public static List<string> analogMeasure = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //000
|
|
|
|
|
"", //001
|
|
|
|
|
"", //002
|
|
|
|
|
"", //003
|
|
|
|
|
"", //004
|
|
|
|
|
"", //005
|
|
|
|
|
"", //006
|
|
|
|
|
"", //007
|
|
|
|
|
"", //008
|
|
|
|
|
"", //009
|
|
|
|
|
"", //010
|
|
|
|
|
"", //011
|
|
|
|
|
"", //012
|
|
|
|
|
"мкм.рт.ст" //013
|
|
|
|
|
};
|
|
|
|
|
public static List<string> discretFull = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //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<string> discretShort = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //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<string[]> dscretMods = new List<string[]>()
|
|
|
|
|
{
|
|
|
|
|
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<string> protect = new List<string>()
|
|
|
|
|
{
|
|
|
|
|
"", //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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-25 17:00:45 +05:00
|
|
|
|
override public string ToString()
|
2020-09-04 12:49:15 +05:00
|
|
|
|
{
|
|
|
|
|
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<int, Tuple<DateTime, double?>[]> an = new Dictionary<int, Tuple<DateTime, double?>[]>();
|
|
|
|
|
public Dictionary<int, Tuple<DateTime, bool?>[]> di = new Dictionary<int, Tuple<DateTime, bool?>[]>();
|
|
|
|
|
}
|
|
|
|
|
public class AnalogsMatrix
|
|
|
|
|
{
|
|
|
|
|
public Dictionary<int, Analog> matrix = new Dictionary<int, Analog>();
|
|
|
|
|
|
|
|
|
|
public AnalogsMatrix(int vdp = 0)
|
|
|
|
|
{
|
|
|
|
|
matrix.Add(13, new Analog() { min = 0, max = 1000, mul = 0.1, byteId = new ushort[] { 26, 27 } });
|
2021-05-25 17:00:45 +05:00
|
|
|
|
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 } });
|
|
|
|
|
}
|
2020-09-04 12:49:15 +05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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<int, Discret> matrix = new Dictionary<int, Discret>();
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|