tmp
This commit is contained in:
262
ShowTrend_tmp3/ShowTrend3/Libs/AnalogSignals.cs
Normal file
262
ShowTrend_tmp3/ShowTrend3/Libs/AnalogSignals.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
67
ShowTrend_tmp3/ShowTrend3/Libs/Converters.cs
Normal file
67
ShowTrend_tmp3/ShowTrend3/Libs/Converters.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
18
ShowTrend_tmp3/ShowTrend3/Libs/DiscretSignals.cs
Normal file
18
ShowTrend_tmp3/ShowTrend3/Libs/DiscretSignals.cs
Normal 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
|
||||
{
|
||||
|
||||
}
|
||||
}
|
703
ShowTrend_tmp3/ShowTrend3/Libs/NetClient.cs
Normal file
703
ShowTrend_tmp3/ShowTrend3/Libs/NetClient.cs
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
130
ShowTrend_tmp3/ShowTrend3/Libs/TempDirectory.cs
Normal file
130
ShowTrend_tmp3/ShowTrend3/Libs/TempDirectory.cs
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
91
ShowTrend_tmp3/ShowTrend3/Libs/Tempdir.cs
Normal file
91
ShowTrend_tmp3/ShowTrend3/Libs/Tempdir.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
85
ShowTrend_tmp3/ShowTrend3/Libs/VDP.cs
Normal file
85
ShowTrend_tmp3/ShowTrend3/Libs/VDP.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user