This commit is contained in:
2021-11-12 15:00:41 +05:00
parent 78b2f5ac24
commit 0e645d20e2
519 changed files with 176134 additions and 852 deletions

View File

@@ -0,0 +1,262 @@
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<Analog> analogs = new List<Analog>();
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<byte?> 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);
}
}
}
}

View File

@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ShowTrend3.Libs
{
public static class CustomConverters
{
private static DateTime _jan1st1970 = new DateTime(1970, 1, 1);
public static long JStDateConv(DateTime from)
{
return System.Convert.ToInt64((from - _jan1st1970).TotalMilliseconds);
}
public static DateTime JStDateConv(long from)
{
return _jan1st1970.AddMilliseconds(from);
}
public static int ArchNameToNumVDP(string s)
{
var t = s.Split('.');
if (t.Last() != "gz")
return int.Parse(t.Last());
t = t[0].Split('-');
if (t.Length == 2)
return int.Parse(t.Last());
if (t.Length == 4)
return int.Parse(t[2]);
return -1;
}
public static bool CompareStringBuilder(ref StringBuilder a, StringBuilder b)
{
if (a.Length <= 0 || b.Length <= 0)
return false;
if (a[0] != '[' && a[a.Length - 1] != ']')
return false;
if (b[0] != '[' && b[b.Length - 1] != ']')
return false;
if (b.Length > 2)
{
a.Remove(a.Length - 1, 1);
if (a.Length > 1)
a.Append(',');
a.Append(b, 1, b.Length - 1);
}
return true;
}
public static string ExceptionToString(Exception e)
{
string res = "";
char sl = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? '/' : '\\';
var st = new StackTrace(e, true).GetFrame(0);
res = st.GetFileName().Split(sl).Last() + " > " +
st.GetMethod().DeclaringType + " > " +
st.GetMethod() + " > " +
st.GetFileLineNumber() + ":" +
st.GetFileColumnNumber() + " > " +
e.Message;
return res;
}
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ShowTrend3.Libs
{
public class DiscretSignals
{
public int VDP = -1;
public List<Discret> discret = new List<Discret>();
}
public class Discret
{
}
}

View File

@@ -0,0 +1,703 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.IO;
namespace ShowTrend3.Libs
{
public class NetClient
{
private readonly string ServerStr = "10.10.45.152";
private readonly int PortStr = 1070;
private readonly IPEndPoint IpPoint;
private enum Cmd
{
pasp_download = 4,
history = 20,
download_nh = 21,
dir_browse = 23
}
public NetClient()
{
IpPoint = new IPEndPoint(IPAddress.Parse(ServerStr), PortStr);
}
public Queue<string> DirBrowse(string dir)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveTimeout = 5000,
SendTimeout = 5000
};
try
{
//Connect
socket.Connect(IpPoint);
//SendRequest
socket.Send(CreateCommand(Cmd.dir_browse, dir, 0).ToArray());
Queue<string> result = new Queue<string>();
//GetRequest
byte mark;
while (true)
{
mark = SocketReceiveByte(ref socket);
if (mark == 0xff || mark == 0x00)
break;
if (mark == 0x01)
{
string r = SocketReceiveString(ref socket);
if (r != "" || r != "." || r != "..")
result.Enqueue(r);
}
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new Queue<string>();
}
finally
{
socket.Disconnect(false);
}
}
public PasportVDP PaspDownload(string dir)
{
PasportVDP result = new PasportVDP();
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveTimeout = 5000,
SendTimeout = 2000
};
try
{
//Connect
socket.Connect(IpPoint);
//SendRequest
socket.Send(CreateCommand(Cmd.pasp_download, dir).ToArray());
//GetRequest1
if (SocketReceiveByte(ref socket) != 0x01)
return result;
byte[] t = SocketReceiveBytes(ref socket, 15);
if (t.Length != 15)
return result;
//ConvertPasport1
result.NumberVDP = t[0];
result.TimeStart = new DateTime(t[1] + t[2] * 256, t[3], t[4], t[5], t[6], t[7]);
result.TimeEnd = new DateTime(t[8] + t[9] * 256, t[10], t[11], t[12], t[13], t[14]);
result.HaveDate = true;
//GetRequest2
if (SocketReceiveByte(ref socket) != 0x01)
return result;
t = SocketReceiveBytes(ref socket, 1512);
if (t.Length != 1512)
return result;
//ConvertPasport2
int caret = 0;
result.KodNPlav = BitConverter.ToInt32(t, 0); caret += 4;
result.NPlav = ConvertBytesToString(t, caret, 12); caret += 12;
result.RM = ConvertBytesToString(t, caret, 11); caret += 11;
result.Splav = ConvertBytesToString(t, caret, 101); caret += 101;
result._is = ConvertBytesToString(t, caret, 51); caret += 51;
result.Notd = BitConverter.ToUInt16(t, caret); caret += 2;
result.VesSlit = BitConverter.ToUInt16(t, caret); caret += 2;
result.Diam = BitConverter.ToUInt16(t, caret); caret += 2;
result.PrPl = BitConverter.ToUInt16(t, caret); caret += 2;
result.Tin = ConvertBytesToString(t, caret, 9); caret += 9;
result.Dzap = ConvertBytesToString(t, caret, 9); caret += 9;
result.Dlog = BitConverter.ToUInt16(t, caret); caret += 2;
result.Last = BitConverter.ToUInt16(t, caret); caret += 2;
result.Dlper = BitConverter.ToUInt16(t, caret); caret += 2;
result.Nazn = ConvertBytesToString(t, caret, 51); caret += 51;
result.Kompl = BitConverter.ToUInt16(t, caret); caret += 2;
result.Izl = BitConverter.ToUInt16(t, caret); caret += 2;
result.Robm = BitConverter.ToSingle(t, caret); caret += 4;
result.Rizol = BitConverter.ToSingle(t, caret); caret += 4;
result.Dkr = BitConverter.ToUInt16(t, caret); caret += 2;
result.Nkon = ConvertBytesToString(t, caret, 51); caret += 51;
result.Pos = ConvertBytesToString(t, caret, 6); caret += 6;
result.Ukaz = ConvertBytesToString(t, caret, 51); caret += 51;
result.Zakaz = ConvertBytesToString(t, caret, 51); caret += 51;
result.Kat = ConvertBytesToString(t, caret, 51); caret += 51;
result.Pril = ConvertBytesToString(t, caret, 3); caret += 3;
result.Reserved = ConvertBytesToString(t, caret, 1023); caret += 1023;
result.HavePasport = true;
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return result;
}
finally
{
socket.Disconnect(false);
}
}
public async Task<SortedList<DateTime, int>> TechCycle(int VDP, DateTime TimeStart, DateTime TimeEnd)
{
SortedList<DateTime, int> result = new SortedList<DateTime, int>();
List<Task<Queue<byte>>> tasks = new List<Task<Queue<byte>>>();
try
{
//Check Params
if (VDP < 0 || (VDP > 50 && VDP < 90) || VDP > 94)
throw new Exception("Нет печи №" + VDP);
if (TimeStart > TimeEnd)
throw new Exception("Не верно задано время.");
//PreStart
DateTime tempDateTime = TimeStart;
List<string> requests = new List<string>();
bool flag = false;
while (!flag)
{
requests.Add(
tempDateTime.Year.ToString() + tempDateTime.Month.ToString("D2") +
tempDateTime.Day.ToString("D2") + "." + VDP.ToString("D2") + "3");
flag = (tempDateTime.Year >= TimeEnd.Year &&
tempDateTime.Month >= TimeEnd.Month &&
tempDateTime.Day >= TimeEnd.Day);
tempDateTime = tempDateTime.AddDays(1);
}
//LoadAllList
if (TimeStart <= DateTime.Now.AddDays(-9) &&
!await UploadArchiveToServer(VDP, 3, TimeStart, TimeEnd))
throw new Exception("Не загружен архив.");
//SendRequests
foreach (var e in requests)
tasks.Add(DownloadAllPackage(CreateCommand(Cmd.download_nh, e).ToArray()));
//ConvertResult
foreach (var e in tasks)
{
e.Wait();
var r = e.Result;
while (true)
{
if (r.Count == 0)
break;
string x = "";
while (r.Peek() != 0x09 && r.Peek() != 0x0a)
x += ConvertByteToChar(r.Dequeue());
int value = int.Parse(x);
r.Dequeue();
while (r.Peek() != 0x09 && r.Peek() != 0x0a)
r.Dequeue();
r.Dequeue();
x = "";
while (r.Peek() != 0x09 && r.Peek() != 0x0a)
x += ConvertByteToChar(r.Dequeue());
DateTime key = ConvertUnixTimeToDateTime(int.Parse(x));
r.Dequeue();
if (result.ContainsKey(key))
result[key] = value;
else
result.Add(key, value);
}
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new SortedList<DateTime, int>();
}
}
public async Task<AnalogSignals> Analog(int VDP, DateTime TimeStart, DateTime TimeEnd, int[] listSignals)
{
Queue<Task> tasks = new Queue<Task>();
List<string> requests = new List<string>();
try
{
//Check Params
if (VDP < 0 || (VDP > 50 && VDP < 90) || VDP > 94)
throw new Exception("Нет печи №" + VDP);
if (TimeStart > TimeEnd)
throw new Exception("Не верно задано время.");
//PreStart
DateTime tempDateTime = TimeStart;
bool flag = false;
while (!flag)
{
requests.Add(
tempDateTime.Year.ToString() + tempDateTime.Month.ToString("D2") +
tempDateTime.Day.ToString("D2") + "." + VDP.ToString("D2") + "1");
flag = (tempDateTime.Year == TimeEnd.Year &&
tempDateTime.Month == TimeEnd.Month &&
tempDateTime.Day == TimeEnd.Day);
tempDateTime = tempDateTime.AddDays(1);
TempDir.LockRead(requests.Last());
}
//Load All List
if (TimeStart <= DateTime.Now.AddDays(-9) &&
!await UploadArchiveToServer(VDP, 1, TimeStart, TimeEnd))
throw new Exception("Не загружен архив.");
//Send Requests
foreach (var e in requests)
tasks.Enqueue(DownloadAllPackage(e));
//Result
AnalogSignals result = new AnalogSignals(VDP){ retAnalogs = listSignals};
double step = (VDP >= 0 && VDP <= 50) ? 0.5 : 1;
for (int e = 0; e < requests.Count; e++)
{
await tasks.Dequeue();
Console.WriteLine("read_" + (e + 1) + ": " + DateTime.Now.ToLongTimeString());
double secondsCount = 0;
List<byte?> row = new List<byte?>();
DateTime d = DateTime.ParseExact(requests[e].Substring(0, 8), "yyyyMMdd", CultureInfo.InvariantCulture).ToUniversalTime();
int tic = 60;
while (!TempDir.CanRead(requests[e]))
{
await Task.Delay(1000);
if (tic-- == 0)
throw new Exception("Занят локальный архив: " + requests[e]);
}
using (FileStream r = TempDir.StartRead(requests[e]))
{
while (r.Position < r.Length)
{
var t = r.ReadByte();
switch (t)
{
case 0xfb:
if (row.Count != 0 &&
d.AddSeconds((double)secondsCount) > TimeStart &&
d.AddSeconds((double)secondsCount) < TimeEnd)
result.AddSignals(d.AddSeconds((double)secondsCount), row);
secondsCount = step * BitConverter.ToInt32(new byte[] { (byte)r.ReadByte(), (byte)r.ReadByte(), (byte)r.ReadByte(), (byte)r.ReadByte() }, 0);
break;
case 0xfc:
if (row.Count == 0)
row.Add(null);
if (d.AddSeconds((double)secondsCount) > TimeStart &&
d.AddSeconds((double)secondsCount) < TimeEnd)
result.AddSignals(d.AddSeconds((double)secondsCount), row);
for (var j = 0; j < row.Count; j++)
row[j] = null;
secondsCount = step * BitConverter.ToInt32(new byte[] { (byte)r.ReadByte(), (byte)r.ReadByte(), (byte)r.ReadByte(), (byte)r.ReadByte() }, 0);
if (d.AddSeconds((double)secondsCount) > TimeStart &&
d.AddSeconds((double)secondsCount) < TimeEnd)
result.AddSignals(d.AddSeconds((double)secondsCount), row);
break;
case 0xfe:
if (row.Count != 0 &&
d.AddSeconds((double)secondsCount) > TimeStart &&
d.AddSeconds((double)secondsCount) < TimeEnd)
result.AddSignals(d.AddSeconds((double)secondsCount), row);
secondsCount += step * BitConverter.ToInt16(new byte[] { (byte)r.ReadByte(), (byte)r.ReadByte() }, 0);
break;
case 0xff:
if (row.Count != 0 &&
d.AddSeconds((double)secondsCount) > TimeStart &&
d.AddSeconds((double)secondsCount) < TimeEnd)
result.AddSignals(d.AddSeconds((double)secondsCount), row);
secondsCount += step;
break;
default:
while (row.Count <= t)
row.Add(null);
row[t] = (byte)r.ReadByte();
break;
}
}
}
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new AnalogSignals(VDP) { retAnalogs = listSignals };
}
finally
{
foreach(var e in requests)
TempDir.FreeRead(e);
}
}
private Queue<byte> CreateCommand(Cmd cmd, string val, int dir = 0)
{
Queue<byte> q = new Queue<byte>();
foreach (var e in BitConverter.GetBytes((uint)cmd))
q.Enqueue(e);
if (cmd == Cmd.dir_browse)
q.Enqueue((byte)dir);
foreach (var e in BitConverter.GetBytes((uint)val.Length))
q.Enqueue(e);
foreach (var e in val)
q.Enqueue((byte)e);
q.Enqueue(0x00);
return q;
}
private byte SocketReceiveByte(ref Socket socket)
{
try
{
byte[] t = new byte[1];
int countbyte = socket.Receive(t);
if (countbyte != 1)
throw new Exception("Ошибка получение Байта");
return t[0];
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return 0xff;
}
}
private bool SocketReceiveBytes(ref Socket socket, ref Queue<byte> q, int length)
{
try
{
while (length != 0)
{
byte[] b = new byte[length];
int countbytes = socket.Receive(b);
for (int i = 0; i < countbytes; i++)
q.Enqueue(b[i]);
length -= countbytes;
}
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
private byte[] SocketReceiveBytes(ref Socket socket, int length)
{
List<byte> result = new List<byte>();
try
{
while (result.Count != length)
{
int count = length - result.Count;
byte[] t = new byte[count];
int countbytes = socket.Receive(t);
if (countbytes > 0)
result.AddRange(t.Take(countbytes));
}
return result.ToArray();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new byte[0];
}
}
private string SocketReceiveString(ref Socket socket)
{
Queue<byte> q = new Queue<byte>();
if (SocketReceiveBytes(ref socket, ref q, (int)BitConverter.ToUInt32(SocketReceiveBytes(ref socket, 4), 0) + 1))
return ConvertBytesToString(ref q);
return "";
}
private async Task<bool> UploadArchiveToServer(int vdp, int type, DateTime tStart, DateTime tEnd)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveTimeout = 5000,
SendTimeout = 5000
};
socket.Connect(IpPoint);
try
{
int caret = 0;
byte[] t = new byte[15];
foreach (var e in BitConverter.GetBytes((uint)Cmd.history))
t[caret++] = e;
t[caret++] = (byte)vdp;
t[caret++] = (byte)type;
t[caret++] = 0x01;
t[caret++] = Convert.ToByte(tStart.Year % 256);
t[caret++] = Convert.ToByte(tStart.Year / 256);
t[caret++] = (byte)tStart.Month;
t[caret++] = (byte)tStart.Day;
t[caret++] = Convert.ToByte(tEnd.Year % 256);
t[caret++] = Convert.ToByte(tEnd.Year / 256);
t[caret++] = (byte)tEnd.Month;
t[caret++] = (byte)tEnd.Day;
socket.Send(t);
while (true)
{
byte mark = SocketReceiveByte(ref socket);
switch (mark)
{
case 0x03:
await Task.Delay(100);
continue;
case 0x01:
return true;
default:
return false;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
private async Task<Queue<byte>> DownloadAllPackage(byte[] cmd)
{
await Task.Delay(0);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveTimeout = 5000,
SendTimeout = 5000
};
Queue<byte> result = new Queue<byte>();
try
{
int TotlalLength = 0;
socket.Connect(IpPoint);
socket.Send(cmd);
byte mark = 0x00;
do
{
mark = SocketReceiveByte(ref socket);
switch (mark)
{
case 0x01:
if (!SocketReceiveBytes(ref socket, ref result,
BitConverter.ToInt32(
SocketReceiveBytes(ref socket, 4), 0)))
throw new Exception("Ошибка получения части пакета.");
break;
case 0x02:
TotlalLength = BitConverter.ToInt32(SocketReceiveBytes(ref socket, 4), 0);
break;
}
} while (mark != 0xFF);
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new Queue<byte>();
}
finally
{
socket.Disconnect(false);
}
}
private async Task DownloadAllPackage(string name)
{
if (TempDir.CheckFileExist(name))
return;
var stream = TempDir.StartWrite(name);
await Task.Delay(0);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveTimeout = 5000,
SendTimeout = 5000
};
try
{
int TotlalLength = 0;
socket.Connect(IpPoint);
socket.Send(CreateCommand(Cmd.download_nh, name).ToArray());
byte mark = 0x00;
do
{
mark = SocketReceiveByte(ref socket);
switch (mark)
{
case 0x01:
int size = BitConverter.ToInt32(SocketReceiveBytes(ref socket, 4), 0);
stream.Write(SocketReceiveBytes(ref socket, size), 0, size);
break;
case 0x02:
TotlalLength = BitConverter.ToInt32(SocketReceiveBytes(ref socket, 4), 0);
break;
}
} while (mark != 0xFF);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return;
}
finally
{
TempDir.EndWrite(name);
stream.Close();
socket.Disconnect(false);
}
}
private string ConvertBytesToString(ref Queue<byte> q)
{
StringBuilder result = new StringBuilder();
while (q.Count != 0)
result.Append(ConvertByteToChar(q.Dequeue()));
return result.ToString().Trim();
}
private string ConvertBytesToString(byte[] b, int caret, int length)
{
StringBuilder result = new StringBuilder();
for (int i = caret; i < length + caret; i++)
result.Append(ConvertByteToChar(b[i]));
return result.ToString().Trim();
}
private char ConvertByteToChar(byte b)
{
char temp;
switch (b)
{
case 0x00: temp = ' '; 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;
}
private DateTime ConvertUnixTimeToDateTime(int unixTimeStamp)
{
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).AddHours(5);
return dtDateTime;
}
}
class Old
{
private enum Cmd
{
pasp_download = 4,
history = 20,
download_nh = 21,
dir_browse = 23
}
private void CreateCommand(ref Queue<Byte> q, Cmd cmd, string val, int dir = 0)
{
q.Clear();
foreach (var e in BitConverter.GetBytes((uint)cmd))
q.Enqueue(e);
if (cmd == Cmd.dir_browse)
q.Enqueue((byte)dir);
foreach (var e in val)
q.Enqueue((byte)e);
q.Enqueue(0x00);
}
private bool SocketSendCommand(ref Socket socket, Cmd cmd, string val, int dir = 0)
{
try
{
int l = 5 + val.Length;
if (cmd == Cmd.dir_browse)
l++;
byte[] s = new byte[l];
l = 0;
foreach (var e in BitConverter.GetBytes((uint)cmd))
s[l++] = e;
if (cmd == Cmd.dir_browse)
s[l++] = (byte)dir;
foreach (var e in val)
s[l++] = (byte)e;
socket.Send(s);
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
private string ConvertBytesToString(ref Queue<byte> q, int l)
{
StringBuilder result = new StringBuilder();
//for (int i = 0; i < l; i++)
// result.Append(ConvertByteToChar(q.Dequeue()));
return result.ToString().Trim();
}
}
}

View File

@@ -0,0 +1,130 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ShowTrend3.Libs
{
public static class TempDirectory
{
private static readonly char sl = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? '/' : '\\';
private static readonly string td = Directory.GetCurrentDirectory() + sl + "temp";
private static Dictionary<string, int> readFiles = new Dictionary<string, int>();
private static List<string> writeFiles = new List<string>();
private static long DirectorySize(DirectoryInfo d)
{
long Size = 0;
FileInfo[] fis = d.GetFiles();
foreach (FileInfo fi in fis)
Size += fi.Length;
DirectoryInfo[] dis = d.GetDirectories();
foreach (DirectoryInfo di in dis)
Size += DirectorySize(di);
return (Size);
}
public static bool Clear(long maxSize = 1073741824)
{
try
{
if (!Directory.Exists(td)) Directory.CreateDirectory(td);
var files = new DirectoryInfo(td).GetFiles();
foreach (var f in files)
{
var t = f.Name.Split('.');
var dateData = new DateTime(int.Parse(t[0]), int.Parse(t[1]), int.Parse(t[2]));
if (readFiles.ContainsKey(f.Name) ||
writeFiles.Contains(f.Name) ||
(f.CreationTime - dateData).TotalHours > 25 ||
(DateTime.Now - f.CreationTime).TotalMinutes <= 2)
continue;
f.Delete();
}
if (DirectorySize(new DirectoryInfo(td)) < maxSize)
return true;
files = new DirectoryInfo(td).GetFiles();
foreach(var f in files)
{
if (readFiles.ContainsKey(f.Name) ||
writeFiles.Contains(f.Name))
continue;
f.Delete();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(CustomConverters.ExceptionToString(e));
return false;
}
}
public static async Task<bool> Delete(string name)
{
bool flag = false;
try
{
if ( !writeFiles.Contains(name) && !File.Exists(td + sl + name))
return true;
while (writeFiles.Contains(name))
await Task.Delay(100);
writeFiles.Add(name);
flag = true;
while (readFiles.ContainsKey(name))
await Task.Delay(100);
File.Delete(td + sl + name);
writeFiles.Remove(name);
return true;
}
catch(Exception e)
{
Console.WriteLine(CustomConverters.ExceptionToString(e));
if(flag) writeFiles.Remove(name);
return false;
}
}
public static bool IsFileExist(string name)
{
return File.Exists(td + sl + name);
}
public static FileStream StartWrite(string name)
{
writeFiles.Add(name);
return new FileStream(td + sl + name, FileMode.CreateNew);
}
public static void EndWrite(string name)
{
writeFiles.Remove(name);
}
public static void LockRead(string name)
{
if (!readFiles.ContainsKey(name))
readFiles.Add(name, 0);
readFiles[name]++;
}
public static bool CanRead(string name)
{
if (!IsFileExist(name))
return false;
return !writeFiles.Contains(name);
}
public static FileStream StartRead(string name)
{
return new FileStream(td + sl + name, FileMode.Open);
}
public static void EndRead(string name)
{
if (!readFiles.ContainsKey(name))
return;
if (readFiles[name] > 0)
readFiles[name]--;
else
readFiles.Remove(name);
}
}
}

View File

@@ -0,0 +1,91 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace ShowTrend3.Libs
{
public static class TempDir
{
//private const char Slash = '\\';
private const char Slash = '/';
public enum Status { free, write, read };
private static Dictionary<string, int> readFile = new Dictionary<string, int>();
private static List<string> writeFile = new List<string>();
public static void Clear()
{
try
{
var tempDir = Directory.GetCurrentDirectory() + Slash + "temp";
if (!Directory.Exists(tempDir))
Directory.CreateDirectory(tempDir);
string[] files = Directory.GetFiles(tempDir, "*");
foreach (var e in files)
{
if (readFile.ContainsKey(e.Split(Slash).Last()) || writeFile.Contains(e.Split(Slash).Last()))
continue;
DateTime createDate = File.GetCreationTime(e);
bool flag = createDate.Year == DateTime.Now.Year &&
createDate.Month == DateTime.Now.Month &&
createDate.Day == DateTime.Now.Day &&
(DateTime.Now - createDate).TotalMinutes > 2;
flag |= createDate.Day == DateTime.Now.AddDays(-1).Day &&
DateTime.Now.Hour == 0 &&
(DateTime.Now - createDate).TotalMinutes > 2;
flag |= (DateTime.Now - createDate).TotalHours > 1;
if (flag)
File.Delete(e);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static bool CheckFileExist(string onlyName)
{
return writeFile.Contains(onlyName) ||
File.Exists(Directory.GetCurrentDirectory() + Slash + "temp" + Slash + onlyName);
}
public static FileStream StartWrite(string onlyName)
{
writeFile.Add(onlyName);
return new FileStream(Directory.GetCurrentDirectory() + Slash + "temp" + Slash + onlyName, FileMode.CreateNew);
}
public static void EndWrite(string onlyName)
{
writeFile.Remove(onlyName);
}
public static void LockRead(string onlyName)
{
if (!readFile.ContainsKey(onlyName))
readFile.Add(onlyName, 0);
readFile[onlyName]++;
}
public static bool CanRead(string onlyName)
{
if (!CheckFileExist(onlyName))
return false;
return !writeFile.Contains(onlyName);
}
public static FileStream StartRead(string onlyName)
{
return new FileStream(Directory.GetCurrentDirectory() + Slash + "temp" + Slash + onlyName, FileMode.Open);
}
public static void FreeRead(string onlyName)
{
if (!readFile.ContainsKey(onlyName))
return;
if (readFile[onlyName] > 0)
readFile[onlyName]--;
if (readFile[onlyName] == 0)
readFile.Remove(onlyName);
}
}
}

View File

@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace ShowTrend3.Libs
{
public class PasportVDP
{
public int NumberVDP;
public bool HaveDate = false;
public DateTime TimeStart;
public DateTime TimeEnd;
public bool HavePasport = false;
public int KodNPlav;
public string NPlav;
public string RM;
public string Splav;
public string _is;
public ushort Notd;
public ushort VesSlit;
public ushort Diam;
public ushort PrPl;
public string Tin;
public string Dzap;
public ushort Dlog;
public ushort Last;
public ushort Dlper;
public string Nazn;
public ushort Kompl;
public ushort Izl;
public Single Robm;
public Single Rizol;
public ushort Dkr;
public string Nkon;
public string Pos;
public string Ukaz;
public string Zakaz;
public string Kat;
public string Pril;
public string Reserved;
public JArray JsonFormat()
{
JArray result = new JArray();
return result;
}
}
public class TechCycle
{
public readonly string[] CycleName =
{
"Конец технологического цикла", "Выгрузка-загрузка", "Вакуумирование на приварку", "Цикл 3",
"Цикл 4", "Приварка", "Охлаждение приварки", "Осмотр приварки", "Вакуумирование на плавку",
"Разведение ванны", "Плавка (основной режим)", "ВУР", "Охлаждение слитка", "Выгрузка комплекта",
"Вакуумирование на оплавление", "Оплавление", "Охлаждение оплавыша", "Слив металла",
"Цикл 18", "Цикл 19", "Цикл 20", "Цикл 21", "Цикл 22", "Цикл 23", "Цикл 24", "Проверка защит"
};
public readonly string[] CycleColorHex =
{
"00ffff", "00ffff", "0000ff", "000000", "000000", "ff0000", "00ff00", "00ffff", "0000ff",
"800080", "ff0000", "ff00ff", "00ff00", "00ffff", "0000ff", "ff0000", "00ff00", "ff00ff",
"000000", "000000", "000000", "000000", "000000", "000000", "000000", "ffff00"
};
public string ConvertColorHexToRGB(string hex)
{
string result = "";
for (int i = 0; i < 3; i++)
{
byte t = Convert.ToByte(hex.Substring(i * 2, 2), 16);
result += t.ToString();
if (i < 2)
result += ",";
}
return result;
}
}
}