Save last

This commit is contained in:
Georgy.Khatuncev 2024-09-22 04:27:05 +05:00
parent 0e645d20e2
commit ef797b23df
377 changed files with 14540 additions and 5819 deletions

Binary file not shown.

BIN
ASCKU_PC.zip Normal file

Binary file not shown.

@ -7,10 +7,17 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.10" />
<PackageReference Include="SharpZipLib" Version="1.3.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataClient\DataClient.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Parametrs\Новая папка\" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties config_4analog_4global_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class DateGetAnalogApi
{
public int Vdp { get; set; }
public int Index { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetAnalogClient
{
public Analog[] Analog { get; set; }
}
public class DateGetAnalogsApi
{
public int Vdp { get; set; }
public int[] Index { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetAnalogsClient
{
public AnalogArr[] Analogs { get; set; }
}
public class DateGetTechCycleApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DateGetTechCycleClient
{
public TechCycle[] TechCycle { get; set; }
}
public class DateGetProtectApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DateGetProtectClient
{
public Protect[] Protect { get; set; }
}
public class DateGetDiscretApi
{
public int Vdp { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetDiscretClient
{
public Discret[] Discret { get; set; }
}
}

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class DiscretGetiscretsMatrixApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DiscretGetDscretsMatrixClient
{
public StateStruct[] StateParams { get; set; }
public DiscretParams[] DiscretParams { get; set; }
public DiscretMatrix[] Discrets { get; set; }
}
public class DiscretGetiscretsApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DiscretGetDscretsClient
{
public StateStruct[] StateParams { get; set; }
public DiscretParams[] DiscretParams { get; set; }
public Discret[] Discrets { get; set; }
}
}

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class ParamsGetAnalogApi
{
public string Name { get; set; }
}
public class ParamsGetAnalogClient
{
public AnalogParams[] Analog_params { get; set; }
}
public class ParamsGetMetricClient
{
public Metric[] Metrics { get; set; }
}
public class ParamsGetTechCycleNameClient
{
public TechCycleName[] Name { get; set; }
}
public class ParamsGetTechCycleColorClient
{
public TechCycleColor[] Color { get; set; }
}
public class ParamsGetStateStructClient
{
public StateStruct[] StateStruct { get; set; }
}
public class ParamsGetProtectStateApi
{
public string Name { get; set; }
}
public class ParamsGetProtectStateClient
{
public ProtectState[] ProtectState { get; set; }
}
public class ParamsGetDiscretApi
{
public string Name { get; set; }
}
public class ParamsGetDiscretClient
{
public DiscretParams[] Discret_params { get; set; }
}
}

@ -34,5 +34,48 @@ namespace ApiServer.ApiStruct
public class PasportGetListClient
{
public string[] Name { get; set; }
public string[] Time { get; set; }
}
public class PasportGetPasportApi
{
public DateTime Date { get; set; }
public string Name { get; set; }
}
public class PasportGetPasportClient
{
public bool HasData { get; set; }
public byte? NumVDP { get; set; }
public string DStart { get; set; }
public string DEnd { get; set; }
public bool HasPasport { get; set; }
public int Kod_npl { get; set; }
public string Nplav { get; set; }
public string Rm { get; set; }
public string Splav { get; set; }
public string IS { get; set; }
public ushort Notd { get; set; }
public ushort Vessl { get; set; }
public ushort Diam { get; set; }
public ushort Prpl { get; set; }
public string Tin { get; set; }
public string Dzap { get; set; }
public short Dlog { get; set; }
public short Last { get; set; }
public short Dlper { get; set; }
public string Nazn { get; set; }
public ushort Kompl { get; set; }
public ushort Izl { get; set; }
public float Robm { get; set; }
public float Rizol { get; set; }
public ushort Dkr { get; set; }
public string Nkon { get; set; }
public string Pos { get; set; }
public string Ukaz { get; set; }
public string Zakaz { get; set; }
public string Kat { get; set; }
public string Pril { get; set; }
public string Rezerved { get; set; }
}
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,380 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Ток дуги",
"s_name": "I д",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 0, 1 ]
},
{
"index": 1,
"name": "Напряжение дуги",
"s_name": "U д",
"metric": "В",
"mul": 0.1,
"show_default": true,
"bytes": [ 2, 3 ]
},
{
"index": 2,
"name": "Ток рабочего двигателя",
"s_name": "I рд",
"metric": "А",
"mul": 0.1,
"bytes": [ 4, 5 ]
},
{
"index": 3,
"name": "U рабочего двигателя",
"s_name": "U рд",
"metric": "В",
"mul": 0.1,
"bytes": [ 6, 7 ]
},
{
"index": 4,
"name": "Ток соленоида",
"s_name": "I сол",
"metric": "А",
"mul": 0.1,
"bytes": [ 8, 9 ]
},
{
"index": 5,
"name": "U соленоида",
"s_name": "U сол",
"metric": "В",
"mul": 0.1,
"bytes": [ 10, 11 ]
},
{
"index": 6,
"name": "Ток задания",
"s_name": "I рз",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 12, 13 ]
},
{
"index": 7,
"name": "t кристаллизатора на входе",
"s_name": "t кр.вых",
"metric": "гр.С",
"mul": 1,
"bytes": [ 14, 15 ]
},
{
"index": 8,
"name": "t кристаллизатора на выходе",
"s_name": "t кр.вх",
"metric": "гр.С",
"mul": 1,
"bytes": [ 16, 17 ]
},
{
"index": 9,
"name": "t вакуум-камеры",
"s_name": "t вак-кам",
"metric": "гр.С",
"mul": 1,
"bytes": [ 18, 19 ]
},
{
"index": 10,
"name": "t штока",
"s_name": "t шт",
"metric": "гр.С",
"mul": 1,
"bytes": [ 20, 21 ]
},
{
"index": 11,
"name": "U контроля",
"s_name": "U конт",
"metric": "В",
"mul": 0.1,
"bytes": [ 22, 23 ]
},
{
"index": 12,
"name": "Перемещение",
"s_name": "S шт",
"metric": "мм",
"mul": 1,
"bytes": [ 24, 25 ]
},
{
"index": 13,
"name": "Вакуум",
"s_name": "Вакуум",
"metric": "мкм.рт.ст",
"mul": 1,
"show_default": true,
"bytes": [ 26, 27 ]
},
{
"index": 14,
"name": "Изоляция шток-крышка",
"s_name": "R шт-кр",
"metric": "В",
"mul": 0.1,
"bytes": [ 28, 29 ]
},
{
"index": 15,
"name": "Изоляция крышка-камера",
"s_name": "R кр-кам",
"metric": "В",
"mul": 0.1,
"bytes": [ 30, 31 ]
},
{
"index": 16,
"name": "Расход воды",
"s_name": "Q в.кр",
"metric": "м^3/ч",
"mul": 1,
"bytes": [ 32, 33 ]
},
{
"index": 17,
"name": "Капельные замыкания",
"s_name": "Кап.зам.",
"metric": "УЕ",
"mul": 0.01,
"bytes": [ 34, 35 ]
},
{
"index": 18,
"name": "Усреднённая ширина импульсов КЗ",
"s_name": "Кап.зым.",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 36, 37 ]
},
{
"index": 19,
"name": "Проток воды фланца",
"s_name": "Qв. фл.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 38, 39 ]
},
{
"index": 20,
"name": "Проток воды штока",
"s_name": "Qв. шт.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 40, 41 ]
},
{
"index": 21,
"name": "Давление воды крист.+1,5",
"s_name": "P в.кр",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": [ 42, 43 ]
},
{
"index": 22,
"name": "Проток воды камеры",
"s_name": "Qв. кам.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 44, 45 ]
},
{
"index": 23,
"name": "Ток задания источника(САУ)",
"s_name": "I з.ист САУ",
"metric": "кА",
"mul": 0.1,
"bytes": [ 58, 59 ]
},
{
"index": 24,
"name": "",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 60, 61 ]
},
{
"index": 25,
"name": "ПИД-рег. основная уставка",
"s_name": "ПИД-осн",
"metric": "В",
"mul": 0.1,
"bytes": [ 62, 63 ]
},
{
"index": 26,
"name": "ПИД-рег. макс. скорость",
"s_name": "ПИД-макс",
"metric": "В",
"mul": 0.1,
"bytes": [ 64, 65 ]
},
{
"index": 27,
"name": "t фланца вакуум-камеры",
"s_name": "t фл.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 66, 67 ]
},
{
"index": 28,
"name": "t подставки",
"s_name": "t под.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 68, 69 ]
},
{
"index": 29,
"name": "Проток воды подставки",
"s_name": "Qв. под.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 70, 71 ]
},
{
"index": 30,
"name": "Задание соленоида",
"s_name": "Зад. сол.",
"metric": "А",
"mul": 0.1,
"bytes": [ 72, 73 ]
},
{
"index": 31,
"name": "Ток задания источника(преобраз.)",
"s_name": "I з.ист. преоб.",
"metric": "кА",
"mul": 0.1,
"bytes": [ 74, 75 ]
},
{
"index": 32,
"name": "Резерв",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 76, 77 ]
},
{
"index": 33,
"name": "Вакуум по МЕТРАН-1200",
"s_name": "МЕТРАН-1200",
"metric": "мм.рт.ст",
"mul": 0.1,
"show_default": true,
"bytes": [ 78, 79 ]
},
{
"index": 34,
"name": "Вакуум по МЕТРАН-18,75",
"s_name": "МЕТРАН-18,25",
"metric": "мм.рт.ст",
"mul": 0.001,
"show_default": true,
"bytes": [ 80, 81 ]
},
{
"index": 35,
"name": "Давление газа в баллоне",
"s_name": "P г.балл.",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": [ 82, 83 ]
},
{
"index": 36,
"name": "Давление воды поддона",
"s_name": "P в.подд.",
"metric": "кгс/см^2",
"mul": 1,
"bytes": [ 84, 85 ]
},
{
"index": 37,
"name": "Задание тока дуги (ЦАП)",
"s_name": "Зад.I, ЦАП",
"metric": "кА",
"mul": 0.1,
"bytes": [ 86, 87 ]
},
{
"index": 38,
"name": "Задкние скорости рабочего двигателя",
"s_name": "Зад.ск.раб.дв",
"metric": "В",
"mul": 0.1,
"bytes": [ 88, 89 ]
},
{
"index": 39,
"name": "Ток двигателя насоса ARPW",
"s_name": "I дв. ARPW",
"metric": "А",
"mul": 0.01,
"bytes": [ 90, 91 ]
},
{
"index": 40,
"name": "Энергия плавильного пролёта",
"s_name": "Эн.пролёта, МВт",
"metric": "МВт",
"mul": 0.1,
"bytes": [ 92, 93 ]
},
{
"index": 41,
"name": "Среднее напряжение плавления",
"s_name": "U средн, В",
"metric": "В",
"mul": 0.1,
"bytes": [ 94, 95 ]
},
{
"index": 42,
"name": "ГМП: ток катушки 1",
"s_name": "I кат1 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 96, 97 ]
},
{
"index": 43,
"name": "ГМП: ток катушки 2",
"s_name": "I кат2 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 98, 99 ]
},
{
"index": 44,
"name": "ГМП: ток катушки 3",
"s_name": "I кат3 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 100, 101 ]
},
{
"index": 45,
"name": "ГМП: частота",
"s_name": "Част. ГМП",
"metric": "Гц",
"mul": 1,
"bytes": [ 102, 103 ]
}
]
}
}

@ -0,0 +1,110 @@
{
"00": {
"struct": [
{
"index": 0,
"name": "Общий: t воды водооборота",
"s_name": "t в",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 1,
"name": "Общий: Давление воды водооборота",
"s_name": "P в",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": []
},
{
"index": 2,
"name": "Общий: Давление масла в бутыли",
"s_name": "P масла бут",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 3,
"name": "Общий: t воздуха в машинном зале",
"s_name": "t машзал",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 4,
"name": "Общий: t воздуха на улице",
"s_name": "t улица",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 5,
"name": "Общий: Атмосферное давление",
"s_name": "p атм",
"metric": "мм.рт.ст",
"mul": 0.1,
"bytes": []
},
{
"index": 6,
"name": "Общий: Давление масла в магистрали",
"s_name": "P масла маг",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 7,
"name": "Общий: Давление воды водооборота-К90",
"s_name": "P в-90",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 8,
"name": "Скорость штока за 1 мин",
"s_name": "V шт",
"metric": "мм/мин",
"mul": 0.01,
"bytes": []
},
{
"index": 9,
"name": "Вакуум по МЕТРАН 1,2",
"s_name": "МЕТРАН1,2",
"metric": "мм.рт.ст",
"mul": 0.001,
"bytes": []
},
{
"index": 10,
"name": "ВС: Ток дуги",
"s_name": "ВС:I д",
"metric": "кА",
"mul": 0.1,
"bytes": []
},
{
"index": 12,
"name": "ВС: Напряжение дуги",
"s_name": "ВС:U д",
"metric": "В",
"mul": 0.1,
"bytes": []
},
{
"index": 13,
"name": "ВС: Ток задания",
"s_name": "ВС:I рз",
"metric": "кА",
"mul": 0.1,
"bytes": []
}
]
}
}

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

@ -0,0 +1,324 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class DateController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getanalog")]
public DateGetAnalogClient GetAnalog([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetAnalogApi>(
value.ToString());
log.Info("Ask analog: vdp-" +
getResult.Vdp.ToString() + " index-" +
getResult.Index.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_analogs = new Dictionary<int, List<Structures.Analog>>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
var sub_res = new List<Structures.Analog>();
while (flagDate <= getResult.End)
{
var analogs = WorkWithFiles.GetAnalogs(flagDate, getResult.Vdp);
foreach (var analog_arr in analogs)
{
if (analog_arr.Index != getResult.Index)
continue;
Structures.Analog first_analog = null;
for (var i = 0; i < analog_arr.Analogs.Length; i++)
{
if (analog_arr.Analogs[i].start < getResult.Start)
{
first_analog = analog_arr.Analogs[i];
first_analog.start = getResult.Start;
continue;
}
if (analog_arr.Analogs[i].start > getResult.End)
continue;
if (sub_res.Count == 0 && first_analog != null)
sub_res.Add(first_analog);
sub_res.Add(analog_arr.Analogs[i]);
}
}
flagDate = flagDate.AddDays(1);
}
return new DateGetAnalogClient()
{
Analog = sub_res.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
throw;
//return new DateGetAnalogClient();
}
}
[HttpPost, Route("getanalogs")]
public DateGetAnalogsClient GetAnalogs([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetAnalogsApi>(
value.ToString());
log.Info("Ask analog: vdp-" +
getResult.Vdp.ToString() + " index-" +
getResult.Index.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_analogs = new Dictionary<int, List<Structures.Analog>>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
var sub_res = new Dictionary<int, List<Structures.Analog>>();
while (flagDate <= getResult.End)
{
var analogs = WorkWithFiles.GetAnalogs(flagDate, getResult.Vdp);
foreach (var analog_arr in analogs)
{
if (!getResult.Index.Contains(analog_arr.Index))
continue;
if (!sub_res.ContainsKey(analog_arr.Index))
sub_res.Add(analog_arr.Index, new List<Structures.Analog>());
Structures.Analog first_analog = null;
for (var i = 0; i < analog_arr.Analogs.Length; i++)
{
if (analog_arr.Analogs[i].start < getResult.Start)
{
first_analog = analog_arr.Analogs[i];
first_analog.start = getResult.Start;
continue;
}
if (analog_arr.Analogs[i].start > getResult.End)
continue;
if (sub_res[analog_arr.Index].Count == 0 && first_analog != null)
sub_res[analog_arr.Index].Add(first_analog);
sub_res[analog_arr.Index].Add(analog_arr.Analogs[i]);
}
}
flagDate = flagDate.AddDays(1);
}
var result = new List<Structures.AnalogArr>();
foreach (var d in sub_res)
result.Add(new Structures.AnalogArr() {
Index = d.Key,
Analogs = d.Value.ToArray()
});
return new DateGetAnalogsClient()
{
Analogs = result.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetAnalogsClient();
}
}
[HttpPost, Route("gettechcycle")]
public DateGetTechCycleClient GetTechCycle([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetTechCycleApi>(
value.ToString());
log.Info("Ask tech cycle: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_tech_cycles = new List<Structures.TechCycle>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var lines = WorkWithFiles.GetFile(
flagDate.Year.ToString("D4") +
flagDate.Month.ToString("D2") +
flagDate.Day.ToString("D2") +
"." +
getResult.Vdp.ToString("D2") +
"3"
);
Structures.TechCycle first_tech_cycle = null;
for (var i = 0; i < lines.Length; i++)
{
var tc = new Structures.TechCycle(flagDate, lines[i]);
if (tc.start < getResult.Start)
{
first_tech_cycle = tc;
continue;
}
if (tc.start > getResult.End)
continue;
if (list_tech_cycles.Count == 0 && first_tech_cycle != null)
{
first_tech_cycle.start = getResult.Start;
list_tech_cycles.Add(first_tech_cycle);
}
list_tech_cycles.Add(tc);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetTechCycleClient()
{
TechCycle = list_tech_cycles.ToArray(),
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetTechCycleClient();
}
}
[HttpPost, Route("getprotect")]
public DateGetProtectClient GetProtect([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetProtectApi>(
value.ToString());
log.Info("Ask protects: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_protects = new List<Structures.Protect>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var protects = WorkWithFiles.GetProtects(flagDate, getResult.Vdp);
for (var i = 0; i < protects.Length; i++)
{
if (protects[i].start < getResult.Start)
continue;
if (protects[i].start > getResult.End)
continue;
list_protects.Add(protects[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetProtectClient()
{
Protect = list_protects.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetProtectClient();
}
}
[HttpPost, Route("getdiscret")]
public DateGetDiscretClient GetDiscret([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetDiscretApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.Discret>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscrets(flagDate, getResult.Vdp);
var first_discrets = new Dictionary<int, Structures.Discret>();
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
{
if (first_discrets.ContainsKey(discrets[i].Index))
first_discrets[discrets[i].Index] = discrets[i];
else
first_discrets.Add(discrets[i].Index, discrets[i]);
first_discrets[discrets[i].Index].start = getResult.Start;
continue;
}
if (discrets[i].start > getResult.End)
continue;
var last_id = list_discrets.FindLastIndex(x => x.Index == discrets[i].Index);
if (first_discrets.ContainsKey(discrets[i].Index) &&
last_id == -1 &&
discrets[i].start != getResult.Start)
{
list_discrets.Add(first_discrets[discrets[i].Index]);
first_discrets.Remove(discrets[i].Index);
}
if (last_id != -1 &&
list_discrets[last_id].State == discrets[i].State)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetDiscretClient()
{
Discret = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetDiscretClient();
}
}
}
}

@ -0,0 +1,138 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class DiscretController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getdiscrets")]
public DiscretGetDscretsClient GetDiscrets([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DiscretGetiscretsApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " "+
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.Discret>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0,0,0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscrets(flagDate, getResult.Vdp);
var first_discrets = new Dictionary<int, Structures.Discret>();
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
{
if (first_discrets.ContainsKey(discrets[i].Index))
first_discrets[discrets[i].Index] = discrets[i];
else
first_discrets.Add(discrets[i].Index, discrets[i]);
first_discrets[discrets[i].Index].start = getResult.Start;
continue;
}
if (discrets[i].start > getResult.End)
continue;
var last_id = list_discrets.FindLastIndex(x => x.Index == discrets[i].Index);
if (first_discrets.ContainsKey(discrets[i].Index) &&
last_id == -1 &&
discrets[i].start != getResult.Start)
{
list_discrets.Add(first_discrets[discrets[i].Index]);
first_discrets.Remove(discrets[i].Index);
}
if (last_id != -1 &&
list_discrets[last_id].State == discrets[i].State)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DiscretGetDscretsClient()
{
StateParams = Configuration.GetStateStructArray(),
DiscretParams = Configuration.GetDiscretParams(getResult.Vdp.ToString("D2")),
Discrets = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DiscretGetDscretsClient();
}
}
[HttpPost, Route("getdiscretsmatrix")]
public DiscretGetDscretsMatrixClient GetDiscretsMatrix([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DiscretGetiscretsApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.DiscretMatrix>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscretsMatrix(flagDate, getResult.Vdp);
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
continue;
if (discrets[i].start > getResult.End)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
log.Info("Send discret");
return new DiscretGetDscretsMatrixClient()
{
StateParams = Configuration.GetStateStructArray(),
DiscretParams = Configuration.GetDiscretParams(getResult.Vdp.ToString("D2")),
Discrets = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DiscretGetDscretsMatrixClient();
}
}
}
}

@ -0,0 +1,158 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class ParamsController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getanalogs")]
public ParamsGetAnalogClient GetAnalogs([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetAnalogApi>(
value.ToString());
log.Info("Ask analog params for \"" + getResult.Name + "\"");
return new ParamsGetAnalogClient()
{
Analog_params = Configuration.GetAnalogParams(getResult.Name)
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetAnalogClient();
}
}
[HttpPost, Route("getmetrics")]
public ParamsGetMetricClient GetMetrics([FromBody] object value)
{
try
{
log.Info("Ask metrics");
return new ParamsGetMetricClient()
{
Metrics = Configuration.GetMetricsArray()
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetMetricClient();
}
}
[HttpPost, Route("gettechcyclename")]
public ParamsGetTechCycleNameClient GetTechCycleName([FromBody] object value)
{
try
{
log.Info("Ask tech cycle name");
return new ParamsGetTechCycleNameClient()
{
Name = Configuration.GetTechCycleNames()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetTechCycleNameClient();
}
}
[HttpPost, Route("gettechcyclecolor")]
public ParamsGetTechCycleColorClient GetTechCycleColor([FromBody] object value)
{
try
{
log.Info("Ask tech cycle color");
return new ParamsGetTechCycleColorClient()
{
Color = Configuration.GetTechCycleColor()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetTechCycleColorClient();
}
}
[HttpPost, Route("getstatestruct")]
public ParamsGetStateStructClient GetStateStruct([FromBody] object value)
{
try
{
log.Info("Ask state struct");
return new ParamsGetStateStructClient()
{
StateStruct = Configuration.GetStateStructArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetStateStructClient();
}
}
[HttpPost, Route("getprotectstate")]
public ParamsGetProtectStateClient GetProtectState([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetProtectStateApi>(
value.ToString());
log.Info("Ask protect state for vdp: " + getResult.Name);
return new ParamsGetProtectStateClient()
{
ProtectState = Configuration.GetProtectState(getResult.Name)
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetProtectStateClient();
}
}
[HttpPost, Route("getdiscret")]
public ParamsGetDiscretClient GetDiscrets([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetDiscretApi>(
value.ToString());
log.Info("Ask discret params for \"" + getResult.Name + "\"");
return new ParamsGetDiscretClient()
{
Discret_params = Configuration.GetDiscretParams(getResult.Name)
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetDiscretClient();
}
}
}
}

@ -109,17 +109,21 @@ namespace ApiServer.Controllers
try
{
var pasportNameList = new List<string>();
var getResult = JsonConvert.DeserializeObject<PasportGetListApi>(value.ToString());
var pasportTimeList = new List<string>();
var getResult = JsonConvert.DeserializeObject<PasportGetListApi>(
value.ToString(),
new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd" });
log.Info("Ask pasport list: " + getResult.Date.ToString("yyyy-MM-dd"));
var pasportDir = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"pasport",
getResult.Date.Year.ToString("D4"),
getResult.Date.ToString("D2"),
getResult.Date.Month.ToString("D2"),
getResult.Date.Day.ToString("D2")
);
if (!Directory.Exists(pasportDir))
return new PasportGetListClient();
throw new Exception("Directory not exist: " + pasportDir);
var allPasportFiles = Directory.GetFiles(pasportDir);
foreach (var fullPasportName in allPasportFiles)
{
@ -132,10 +136,15 @@ namespace ApiServer.Controllers
pasport += "-";
pasport += pasportParts[i];
}
pasportTimeList.Add(pasportParts[0]);
pasportNameList.Add(pasport);
}
log.Info("Send pasport list: " + pasportNameList);
return new PasportGetListClient() { Name = pasportNameList.ToArray() };
return new PasportGetListClient()
{
Name = pasportNameList.ToArray(),
Time = pasportTimeList.ToArray()
};
}
catch (Exception e)
{
@ -144,6 +153,75 @@ namespace ApiServer.Controllers
}
}
[HttpPost, Route("getpasport")]
public PasportGetPasportClient GetPasport([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<PasportGetPasportApi>(
value.ToString(),
new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd" });
log.Info("Ask pasport: " + getResult.Date.ToString("yyyy-MM-dd") + " " + getResult.Name);
var pasportFile = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"pasport",
getResult.Date.Year.ToString("D4"),
getResult.Date.Month.ToString("D2"),
getResult.Date.Day.ToString("D2"),
getResult.Name
);
if (!System.IO.File.Exists(pasportFile))
throw new Exception("File not exist: " + pasportFile);
var pasport = new Pasport(System.IO.File.ReadAllBytes(pasportFile));
return new PasportGetPasportClient()
{
HasData = pasport.HasData,
NumVDP = pasport.numVDP,
DStart = pasport.dStart.HasValue ? pasport.dStart.Value.ToString("yyyy.MM.dd HH:mm:ss") : "",
DEnd = pasport.dEnd.HasValue ? pasport.dEnd.Value.ToString("yyyy.MM.dd HH:mm:ss") : "",
HasPasport = pasport.hasPasport,
Kod_npl = pasport.kod_npl,
Nplav = pasport.nplav,
Rm = pasport.rm,
Splav = pasport.splav,
IS = pasport.iS,
Notd = pasport.notd,
Vessl = pasport.vessl,
Diam = pasport.diam,
Prpl = pasport.prpl,
Tin = pasport.tin,
Dzap = pasport.dzap,
Dlog = pasport.dlog,
Last = pasport.last,
Dlper = pasport.dlper,
Nazn = pasport.nazn,
Kompl = pasport.kompl,
Izl = pasport.izl,
Robm = pasport.robm,
Rizol = pasport.rizol,
Dkr = pasport.dkr,
Nkon = pasport.nkon,
Pos = pasport.pos,
Ukaz = pasport.ukaz,
Zakaz = pasport.zakaz,
Kat = pasport.kat,
Pril = pasport.pril,
Rezerved = pasport.rezerved,
};
}
catch (Exception e)
{
log.Warn(e);
return new PasportGetPasportClient()
{
HasData = false,
HasPasport = false
};
}
}
}

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.DateController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAQAAAAAAAAAAABAAACCAAAAIAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Controllers\DateController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogApi">
<Position X="0.5" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogClient">
<Position X="0.5" Y="5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsApi">
<Position X="0.5" Y="6" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsClient">
<Position X="0.5" Y="7.75" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.AnalogArr" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="8.184" />
<Point X="5" Y="8.184" />
<Point X="5" Y="7.103" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleApi">
<Position X="5.5" Y="6" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleClient">
<Position X="5.5" Y="7.75" Width="2.25" />
<AssociationLine Name="TechCycle" Type="ApiServer.Structures.TechCycle" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="8.5" />
<Point X="10.5" Y="8.5" />
<Point X="10.5" Y="8.199" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="TechCycle" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectApi">
<Position X="5.5" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectClient">
<Position X="5.5" Y="5" Width="2.25" />
<AssociationLine Name="Protect" Type="ApiServer.Structures.Protect" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="5.529" />
<Point X="10.444" Y="5.529" />
<Point X="10.444" Y="5.19" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Protect" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretApi">
<Position X="5.5" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretClient">
<Position X="5.5" Y="2.25" Width="2.25" />
<AssociationLine Name="Discret" Type="ApiServer.Structures.Discret" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="2.779" />
<Point X="10.521" Y="2.779" />
<Point X="10.521" Y="2.44" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Analog">
<Position X="3" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.AnalogArr">
<Position X="3" Y="6" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.Analog" FixedToPoint="true">
<Path>
<Point X="5" Y="6" />
<Point X="5" Y="4.997" />
</Path>
<MemberNameLabel ManuallyPlaced="true">
<Position X="0.11" Y="0.677" />
</MemberNameLabel>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Discret">
<Position X="8" Y="0.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.Protect">
<Position X="8" Y="3.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.TechCycle">
<Position X="8" Y="6" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Structures\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.WorkWithFiles">
<Position X="0.5" Y="4.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAgAgAAACEIAAIAAAAAAAAAECAAAABA=</HashCode>
<FileName>WorkWithFiles.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Startup">
<Position X="0.5" Y="2.25" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAACAAAAAA=</HashCode>
<FileName>Startup.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Program">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Program.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.ParamsController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAQAAAAAAAAAAAAAiAAACAAAAIAAIAAAEAAAAAAAAAA=</HashCode>
<FileName>Controllers\ParamsController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogApi">
<Position X="0.5" Y="3.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogClient">
<Position X="0.5" Y="4.75" Width="2.25" />
<AssociationLine Name="Analog_params" Type="ApiServer.Parametrs.AnalogParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="0.669" Y="5.618" />
<Point X="0.669" Y="5.976" />
<Point X="3" Y="5.976" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetMetricClient">
<Position X="6" Y="5.25" Width="2.5" />
<AssociationLine Name="Metrics" Type="ApiServer.Parametrs.Metric" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.062" Y="6.118" />
<Point X="6.062" Y="6.5" />
<Point X="8.75" Y="6.5" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Metrics" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleNameClient">
<Position X="6" Y="12" Width="2.5" />
<AssociationLine Name="Name" Type="ApiServer.Parametrs.TechCycleName" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.125" Y="12.868" />
<Point X="6.125" Y="13.188" />
<Point X="8.75" Y="13.188" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Name" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleColorClient">
<Position X="6" Y="8.75" Width="2.5" />
<AssociationLine Name="Color" Type="ApiServer.Parametrs.TechCycleColor" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.188" Y="9.618" />
<Point X="6.188" Y="9.938" />
<Point X="8.75" Y="9.938" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Color" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetStateStructClient">
<Position X="0.5" Y="11" Width="2.25" />
<AssociationLine Name="StateStruct" Type="ApiServer.Parametrs.StateStruct" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="0.625" Y="11.868" />
<Point X="0.625" Y="12.312" />
<Point X="3" Y="12.312" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="StateStruct" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateApi">
<Position X="0.5" Y="8.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateClient">
<Position X="0.5" Y="10" Width="2.25" />
<AssociationLine Name="ProtectState" Type="ApiServer.Parametrs.ProtectState" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="10.688" />
<Point X="5.562" Y="10.688" />
<Point X="5.562" Y="10.238" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="ProtectState" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretApi">
<Position X="0.5" Y="6.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretClient">
<Position X="0.5" Y="7.75" Width="2.25" />
<AssociationLine Name="Discret_params" Type="ApiServer.Parametrs.DiscretParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="8.5" />
<Point X="5.5" Y="8.5" />
<Point X="5.5" Y="8.18" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.AnalogParams">
<Position X="3" Y="3.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAEAAAAAABAAAAAAEAAAAAQAAAACAgACAAEIAAAAEAA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.DiscretParams">
<Position X="3" Y="6.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAQAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAEAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Bits" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.ByteBit">
<Position X="7" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.Metric">
<Position X="8.75" Y="5.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Metrics.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.ProtectState">
<Position X="3" Y="8.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.State">
<Position X="7" Y="10.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.StateStruct">
<Position X="3" Y="11.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="States" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleName">
<Position X="8.75" Y="12" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleColor">
<Position X="8.75" Y="8.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Configuration">
<Position X="6" Y="0.5" Width="3.75" />
<AssociationLine Name="r_analogParams" Type="ApiServer.Parametrs.AnalogParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="9.5" Y="4.363" />
<Point X="9.5" Y="4.927" />
<Point X="5.75" Y="4.927" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAEAAAAEAAAAACgAgCAAAIAAAAAAAEEAAAAAAAEA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Field Name="r_analogParams" />
</ShowAsCollectionAssociation>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.PasportController">
<Position X="0.5" Y="0.5" Width="3.5" />
<TypeIdentifier>
<HashCode>AAAAEAgAAAAAAAAAAAAACAAAAAAAAEAAAAAAAAAAAAI=</HashCode>
<FileName>Controllers\PasportController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListApi">
<Position X="0.5" Y="4.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListClient">
<Position X="0.5" Y="5.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportApi">
<Position X="0.5" Y="3" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportClient">
<Position X="4.25" Y="0.5" Width="2.5" />
<TypeIdentifier>
<HashCode>UAAgEAIAEQgEIAACADAAggAIIACAARAAIBACAoIBAgQ=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

@ -0,0 +1,380 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.WorkWithFiles">
<Position X="19" Y="4.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAgAgAAACEIAAIAAAAAAAAAECAAAABA=</HashCode>
<FileName>WorkWithFiles.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Startup">
<Position X="19" Y="2.25" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAACAAAAAA=</HashCode>
<FileName>Startup.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Program">
<Position X="19" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Program.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.DateController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAQAAAAAAAAAAABAAACCAAAAIAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Controllers\DateController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.ParamsController">
<Position X="0.5" Y="11.75" Width="4.5" />
<TypeIdentifier>
<HashCode>AAQAAAAAAAAAAAAAiAAACAAAAIAAIAAAEAAAAAAAAAA=</HashCode>
<FileName>Controllers\ParamsController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.PasportController">
<Position X="0.5" Y="24.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAEAgAAAAAAAAAAAAACAAAAAAAAEAAAAAAAAAAAAI=</HashCode>
<FileName>Controllers\PasportController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogApi">
<Position X="5.25" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogClient">
<Position X="7.75" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsApi">
<Position X="5.25" Y="2.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsClient">
<Position X="7.75" Y="2.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleApi">
<Position X="5.25" Y="9.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleClient">
<Position X="7.75" Y="9.25" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="TechCycle" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectApi">
<Position X="5.25" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectClient">
<Position X="7.75" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Protect" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretApi">
<Position X="5.25" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretClient">
<Position X="7.75" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogApi">
<Position X="5.25" Y="11.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogClient">
<Position X="7.75" Y="11.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetMetricClient">
<Position X="7.75" Y="16.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Metrics" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleNameClient">
<Position X="7.75" Y="23" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Name" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleColorClient">
<Position X="7.75" Y="21.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Color" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetStateStructClient">
<Position X="7.75" Y="19.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="StateStruct" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateApi">
<Position X="5.25" Y="18" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateClient">
<Position X="7.75" Y="18" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="ProtectState" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretApi">
<Position X="5.25" Y="14.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretClient">
<Position X="7.75" Y="14.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListApi">
<Position X="5.25" Y="24.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListClient">
<Position X="7.75" Y="24.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportApi">
<Position X="5.25" Y="26" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportClient">
<Position X="7.75" Y="26" Width="2.5" />
<TypeIdentifier>
<HashCode>UAAgEAIAEQgEIAACADAAggAIIACAARAAIBACAoIBAgQ=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.AnalogParams">
<Position X="12.25" Y="11.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAEAAAAAABAAAAAAEAAAAAQAAAACAgACAAEIAAAAEAA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.DiscretParams">
<Position X="12.25" Y="14.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAQAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAEAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Bits" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.ByteBit">
<Position X="16.5" Y="14.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.Metric">
<Position X="12.25" Y="16.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Metrics.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.ProtectState">
<Position X="12.25" Y="18" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.State">
<Position X="16.5" Y="19.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.StateStruct">
<Position X="12.25" Y="19.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="States" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleName">
<Position X="12.25" Y="23" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleColor">
<Position X="12.25" Y="21.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Configuration">
<Position X="19" Y="11.75" Width="3.75" />
<TypeIdentifier>
<HashCode>AAAAAEAAAAEAAAAACgAgCAAAIAAAAAAAEEAAAAAAAEA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Field Name="r_analogParams" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Analog">
<Position X="11.75" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.AnalogArr">
<Position X="11.75" Y="2.75" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.Analog" FixedToPoint="true">
<Path>
<Point X="13.75" Y="2.75" />
<Point X="13.75" Y="2.247" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Discret">
<Position X="11.75" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.DiscretMatrix">
<Position X="16.5" Y="4.75" Width="2" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAgAAAAAAAAAAAABAAAAAAAAAIAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.Protect">
<Position X="11.75" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.TechCycle">
<Position X="12.25" Y="9.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Structures\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace ApiServer.Parametrs
{
public class AnalogParams
{
public int Index { get; set; }
public bool ShowDefault { get; set; }
public bool Skip { get; set; }
public string Name { get; set; }
public string Sname { get; set; }
public string Metric { get; set; }
public double? Min { get; set; }
public double? Max { get; set; }
public double Mul { get; set; }
public int[] Bytes {get;set;}
}
}
namespace ApiServer
{
public static partial class Configuration
{
private static Logger log = LogManager.GetCurrentClassLogger();
public static Dictionary<string,AnalogParams[]> r_analogParams = null;
public static AnalogParams[] GetAnalogParams(string name_analog)
{
log.Info("Ask analog parasm: " + name_analog);
if (r_analogParams != null && r_analogParams.ContainsKey(name_analog))
{
log.Info("Exist: " + name_analog);
return r_analogParams[name_analog];
}
var result = new List<AnalogParams>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Analog"
)
);
foreach (var file in list_files) {
log.Info("Try read " + file);
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_analog))
continue;
var analog = json_conf.Value<JObject>(name_analog);
if (analog.ContainsKey("struct"))
{
var struct_arr = analog.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var analog_param = GetAnalogParam(struct_el);
if (analog_param != null)
if (result.Find(x => x.Index == analog_param.Index) == null)
result.Add(analog_param);
}
}
if (analog.ContainsKey("parent"))
{
var parent_list = analog.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetAnalogParams(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
if (r_analogParams == null)
r_analogParams = new Dictionary<string, AnalogParams[]>();
if (r_analogParams.ContainsKey(name_analog))
r_analogParams[name_analog] = result.ToArray();
else
r_analogParams.Add(name_analog, result.ToArray());
return result.ToArray();
}
private static AnalogParams GetAnalogParam(JObject data)
{
if ( data == null || !data.ContainsKey("index"))
return null;
var index = data.Value<int>("index");
var result = new AnalogParams()
{
Index = index,
Name = "Аналог " + index,
Sname = "Аналог " + index,
Min = null,
Max = null,
Mul = 1,
Metric = "УЕ",
Skip = false,
ShowDefault = false,
Bytes = new int[0]
};
if (data.ContainsKey("skip"))
{
var skip = data.Value<bool>("skip");
if (skip)
{
result.Skip = true;
return result;
}
}
if (data.ContainsKey("name"))
result.Name = data.Value<string>("name");
if (data.ContainsKey("s_name"))
result.Sname = data.Value<string>("s_name");
if (data.ContainsKey("metric"))
result.Metric = data.Value<string>("metric");
if (data.ContainsKey("min"))
result.Min = data.Value<double>("min");
if (data.ContainsKey("max"))
result.Max = data.Value<double>("max");
if (data.ContainsKey("mul"))
result.Mul = data.Value<double>("mul");
if (data.ContainsKey("show_default"))
result.ShowDefault = data.Value<bool>("show_default");
if (data.ContainsKey("bytes"))
{
var bytes = data.Value<JArray>("bytes");
var arr = new List<int>();
try
{
for (var i = 0; i < bytes.Count; i++)
arr.Add(bytes[i].Value<int>());
result.Bytes = arr.ToArray();
}
catch
{
result.Bytes = new int[0];
}
}
return result;
}
}
}

@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class DiscretParams
{
public int Index { get; set; }
public bool Skip { get; set; }
public string Name { get; set; }
public ByteBit[] Bits {get;set;}
public string StateStruct { get; set; }
}
public class ByteBit
{
public int ByteIndex { get; set; }
public byte BitIndex { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static DiscretParams[] GetDiscretParams(string name_discret)
{
var result = new List<DiscretParams>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Discret"
)
);
foreach (var file in list_files) {
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_discret))
continue;
var discret = json_conf.Value<JObject>(name_discret);
if (discret.ContainsKey("struct"))
{
var struct_arr = discret.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var discret_param = GetDiscretParam(struct_el);
if (discret_param != null)
if (result.Find(x => x.Index == discret_param.Index) == null)
result.Add(discret_param);
}
}
if (discret.ContainsKey("parent"))
{
var parent_list = discret.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetDiscretParams(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
return result.ToArray();
}
private static DiscretParams GetDiscretParam(JObject data)
{
if (
data == null ||
!data.ContainsKey("index"))
return null;
if (data.ContainsKey("skip"))
{
var skip = data.Value<bool>("skip");
if (skip)
{
return new DiscretParams()
{
Index = data.Value<int>("index"),
Skip = true
};
}
}
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("state_struct") ||
!data.ContainsKey("bits")
)
return null;
var bits = data.Value<JArray>("bits");
var arr = new List<ByteBit>();
try
{
for (var i = 0; i < bits.Count; i++)
{
if (
bits[i] == null ||
!((JObject)bits[i]).ContainsKey("byte_index") ||
!((JObject)bits[i]).ContainsKey("bit_index")
)
continue;
arr.Add(new ByteBit()
{
ByteIndex = ((JObject)bits[i]).Value<int>("byte_index"),
BitIndex = ((JObject)bits[i]).Value<byte>("bit_index")
});
}
}
catch
{
return null;
}
return new DiscretParams()
{
Index = data.Value<int>("index"),
Skip = false,
Name = data.Value<string>("name"),
Bits = arr.ToArray(),
StateStruct = data.Value<string>("state_struct")
};
}
}
}

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class Metric
{
public string Name { get; set; }
public bool Log { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static Metric[] GetMetricsArray()
{
var result = new List<Metric>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Metrics.json"
)
)
);
var list_objects = json_conf.GetEnumerator();
while (list_objects.MoveNext())
{
try
{
var name = list_objects.Current.Key;
var log = (bool)list_objects.Current.Value;
if (result.FindIndex(x => x.Name == name) == -1)
result.Add(new Metric()
{
Name = name,
Log = log
});
}
catch
{
continue;
}
}
return result.ToArray();
}
}
}

@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class ProtectState
{
public byte Index { get; set; }
public string Name { get; set; }
public string StateStruct { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static ProtectState[] GetProtectState(string name_protect)
{
var result = new List<ProtectState>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Protect"
)
);
foreach (var file in list_files) {
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_protect))
continue;
var protect = json_conf.Value<JObject>(name_protect);
if (protect.ContainsKey("struct"))
{
var struct_arr = protect.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var protect_state = GetProtect(struct_el);
if (protect_state != null)
if (result.Find(x => x.Index == protect_state.Index) == null)
result.Add(protect_state);
}
}
if (protect.ContainsKey("parent"))
{
var parent_list = protect.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetProtectState(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
return result.ToArray();
}
private static ProtectState GetProtect(JObject data)
{
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("state_struct")
)
return null;
return new ProtectState()
{
Index = data.Value<byte>("index"),
Name = data.Value<string>("name"),
StateStruct = data.Value<string>("state_struct")
};
}
}
}

@ -0,0 +1,105 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class State
{
public byte Index { get; set; }
public string Name { get; set; }
public string Color { get; set; }
}
public class StateStruct
{
public string Name { get; set; }
public State[] States { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static StateStruct[] GetStateStructArray()
{
var result = new List<StateStruct>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"StateStruct.json"
)
)
);
var list_objects = json_conf.GetEnumerator();
while (list_objects.MoveNext())
{
var sub_res = GetStateStruct(
list_objects.Current.Key,
(JArray)list_objects.Current.Value
);
if (sub_res != null)
result.Add(sub_res);
}
return result.ToArray();
}
public static StateStruct GetStateStruct(string name)
{
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"StateStruct.json"
)
)
);
if (!json_conf.ContainsKey(name))
return null;
return GetStateStruct(name, json_conf.Value<JArray>(name));
}
private static StateStruct GetStateStruct(string name, JArray data)
{
if (data == null)
return null;
var result = new StateStruct() { Name = name };
var sub_res = new List<State>();
foreach (JObject j_state_struct in data)
{
var state = GetState(j_state_struct);
if (state == null)
continue;
sub_res.Add(state);
}
result.States = sub_res.ToArray();
return result;
}
private static State GetState(JObject data)
{
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("color")
)
return null;
return new State()
{
Index = data.Value<byte>("index"),
Name = data.Value<string>("name"),
Color = data.Value<string>("color")
};
}
}
}

@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class TechCycleName
{
public int Index { get; set; }
public string Name { get; set; }
}
public class TechCycleColor
{
public int Index { get; set; }
public string Color { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static TechCycleName[] GetTechCycleNames()
{
var result = new List<TechCycleName>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"TechCycle.json"
)
)
);
if (!json_conf.ContainsKey("tech_cycle_conf"))
return result.ToArray();
var tc_array = json_conf.Value<JArray>("tech_cycle_conf");
foreach(JObject tc in tc_array)
{
int? index = null;
string name = null;
if (tc.ContainsKey("index"))
index = tc.Value<int>("index");
if (tc.ContainsKey("name"))
name = tc.Value<string>("name");
if (!string.IsNullOrEmpty(name) && index.HasValue)
result.Add(
new TechCycleName()
{
Index = index.Value,
Name = name
}
);
}
return result.ToArray();
}
public static TechCycleColor[] GetTechCycleColor()
{
var result = new List<TechCycleColor>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"TechCycle.json"
)
)
);
if (!json_conf.ContainsKey("tech_cycle_conf"))
return result.ToArray();
var tc_array = json_conf.Value<JArray>("tech_cycle_conf");
foreach (JObject tc in tc_array)
{
int? index = null;
string color = null;
if (tc.ContainsKey("index"))
index = tc.Value<int>("index");
if (tc.ContainsKey("color"))
color = tc.Value<string>("color");
if (!string.IsNullOrEmpty(color) && index.HasValue)
result.Add(
new TechCycleColor()
{
Index = index.Value,
Color = color
}
);
}
return result.ToArray();
}
}
}

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Analog
{
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public double? Value { get; set; }
}
public class AnalogArr
{
public int Index { get; set; }
public Analog[] Analogs { get; set; }
}
}

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Discret
{
public int Index { get; set; }
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public byte? State { get; set; }
}
public class DiscretMatrix
{
public string Dt { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public byte?[] M { get; set; }
}
}

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Protect
{
public byte Index { get; set; }
public byte State { get; set; }
public DateTime start;
public string Start { get { return start.ToString("yyyy.MM.dd HH.mm.ss.fff"); } }
}
}

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class TechCycle
{
public sbyte Index { get; set; }
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public TechCycle(DateTime date, string line)
{
var splits = line.Split('\t');
if (splits[0] == "00")
this.Index = -1;
else
this.Index = sbyte.Parse(splits[0]);
var times = splits[1].Split(":");
this.start = new DateTime(
date.Year,
date.Month,
date.Day,
int.Parse(times[0]),
int.Parse(times[1]),
int.Parse(times[2])
);
}
}
}

544
ApiServer/WorkWithFiles.cs Normal file

@ -0,0 +1,544 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;
using System.IO;
using ApiServer.Structures;
using NLog;
namespace ApiServer
{
public static class WorkWithFiles
{
private static Logger log = LogManager.GetCurrentClassLogger();
public static string[] GetFile(string fileName)
{
var vdp = fileName.Substring(9, 2);
var dir_archive = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"data",
fileName.Substring(0,4),
fileName.Substring(4, 2),
fileName.Substring(6, 2)
);
var tmp = Path.Combine(
Directory.GetCurrentDirectory(),
"temp",
System.Guid.NewGuid().ToString()
);
if (!Directory.Exists(tmp))
Directory.CreateDirectory(tmp);
var flag_exist = false;
var tar_gz = false;
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar.gz")))
{
flag_exist = true;
tar_gz = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar.gz");
}
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar")))
{
flag_exist = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar");
}
if (!flag_exist)
return Array.Empty<string>();
if (tar_gz)
ExtractTarGZ(dir_archive, tmp);
else
ExtractTar(dir_archive, tmp);
if (!File.Exists(Path.Combine(tmp, fileName)))
{
Directory.Delete(tmp, true);
return Array.Empty<string>();
}
var result = File.ReadAllLines(Path.Combine(tmp, fileName));
Directory.Delete(tmp, true);
return result;
}
public static byte[] GetFileBytes(string fileName)
{
var vdp = fileName.Substring(9, 2);
var dir_archive = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"data",
fileName.Substring(0, 4),
fileName.Substring(4, 2),
fileName.Substring(6, 2)
);
var tmp = Path.Combine(
Directory.GetCurrentDirectory(),
"temp",
System.Guid.NewGuid().ToString()
);
log.Info("Path: " + dir_archive);
if (!Directory.Exists(tmp))
Directory.CreateDirectory(tmp);
var flag_exist = false;
var tar_gz = false;
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar.gz")))
{
flag_exist = true;
tar_gz = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar.gz");
}
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar")))
{
flag_exist = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar");
}
if (!flag_exist)
return Array.Empty<byte>();
if (tar_gz)
ExtractTarGZ(dir_archive, tmp);
else
ExtractTar(dir_archive, tmp);
if (!File.Exists(Path.Combine(tmp, fileName)))
{
Directory.Delete(tmp, true);
return Array.Empty<byte>();
}
var result = File.ReadAllBytes(Path.Combine(tmp, fileName));
Directory.Delete(tmp, true);
return result;
}
private static void ExtractTarGZ(String gzArchiveName, String destFolder)
{
using (var a = (Stream)File.OpenRead(gzArchiveName))
using (var b = (Stream)new GZipInputStream(a))
using (var c = TarArchive.CreateInputTarArchive(b))
c.ExtractContents(destFolder);
}
private static void ExtractTar(String tarFileName, String destFolder)
{
using (var a = (Stream)File.OpenRead(tarFileName))
using (var b = TarArchive.CreateInputTarArchive(a))
b.ExtractContents(destFolder);
}
public static Protect[] GetProtects(DateTime date, int vdp)
{
var result = new List<Protect>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"4"
);
for (var i = 0; i < byte_arr.Length; i++)
{
if (i + 3 >= byte_arr.Length)
break;
var unix_date = BitConverter.ToUInt32(byte_arr, i);
i += 4;
var date_time = new DateTime(1970, 1, 1, 0, 0, 0, 0);
date_time = date_time.AddSeconds(unix_date).ToLocalTime();
if (i + 3 >= byte_arr.Length)
break;
var nanosec = BitConverter.ToUInt32(byte_arr, i);
i += 4;
date_time.AddMilliseconds(nanosec / 1000000);
while (byte_arr[i] != 0xff)
{
if (i >= byte_arr.Length)
break;
var index = byte_arr[i];
i++;
if (i >= byte_arr.Length)
break;
var state = byte_arr[i];
i++;
result.Add(
new Protect()
{
Index = index,
start = date_time,
State = state
}
);
}
}
return result.ToArray();
}
public static Discret[] GetDiscrets(DateTime date, int vdp)
{
var desc_struct = Configuration.GetDiscretParams(vdp.ToString("D2"));
var result = new List<Discret>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
foreach (var dm in date_bytes_struct)
{
foreach (var dp in desc_struct)
{
if (dp.Skip)
continue;
byte? state = 0;
for (var i = 0; i < dp.Bits.Length; i++)
{
if (
dm.arr.Length <= dp.Bits[i].ByteIndex ||
!dm.arr[dp.Bits[i].ByteIndex].HasValue
)
{
state = null;
break;
}
var curr_bit = (dm.arr[dp.Bits[i].ByteIndex].Value >> dp.Bits[i].BitIndex) & 1;
state += (byte)(curr_bit * Math.Pow(2, i));
}
var last = result.FindLastIndex(x => x.Index == dp.Index);
if (last != -1 && result[last].State == state)
continue;
result.Add(new Discret()
{
Index = dp.Index,
start = dm.dt,
State = state
});
}
}
return result.ToArray();
}
public static AnalogArr[] GetAnalogs(DateTime date, int vdp)
{
var analog_struct = Configuration.GetAnalogParams(vdp.ToString("D2"));
var result = new List<AnalogArr>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
var sub_res = new Dictionary<int, List<Analog>>();
foreach (var dm in date_bytes_struct)
{
foreach (var dp in analog_struct)
{
if (dp.Skip)
continue;
double? value = 0;
var val_arr = new List<byte>();
for (var i = 0; i < dp.Bytes.Length; i++)
{
if (
dm.arr.Length <= dp.Bytes[i] ||
!dm.arr[dp.Bytes[i]].HasValue
)
{
value = null;
break;
}
val_arr.Add(dm.arr[dp.Bytes[i]].Value);
}
if (val_arr != null)
{
if (val_arr.Count == 1)
value = val_arr[0];
else if (val_arr.Count == 2)
value = BitConverter.ToInt16(val_arr.ToArray(), 0);
else if (val_arr.Count == 4)
value = BitConverter.ToInt32(val_arr.ToArray(), 0);
else if (val_arr.Count == 8)
value = BitConverter.ToInt64(val_arr.ToArray(), 0);
else
for (var i = 0; i < val_arr.Count; i++)
value += (val_arr[i] * Math.Pow(256, i));
}
if (value != null)
{
value = Math.Round(value.Value);
value = value.Value * dp.Mul;
}
if (!sub_res.ContainsKey(dp.Index))
sub_res.Add(dp.Index, new List<Analog>());
if (sub_res[dp.Index].Count != 0 &&
sub_res[dp.Index][sub_res[dp.Index].Count - 1].Value == value)
continue;
sub_res[dp.Index].Add(new Analog()
{
start = dm.dt,
Value = value
});
}
}
foreach (var d in sub_res)
result.Add(new AnalogArr()
{
Index = d.Key,
Analogs = d.Value.ToArray()
});
return result.ToArray();
}
public static DiscretMatrix[] GetDiscretsMatrix(DateTime date, int vdp)
{
log.Info("Load discret struct for vpd " + vdp);
var desc_struct = Configuration.GetDiscretParams(vdp.ToString("D2"));
var result = new List<DiscretMatrix>();
log.Info("Load file " +
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1");
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
log.Info("Parse file to structs.");
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
var b_matrix = new List<byte?>();
foreach(var d_slice in date_bytes_struct)
{
var sub_res = new DiscretMatrix() { start = d_slice.dt };
foreach (var d_struct in desc_struct)
{
while (b_matrix.Count <= d_struct.Index)
b_matrix.Add(null);
byte? state = 0;
for (var i = 0; i < d_struct.Bits.Length; i++)
{
if (
d_slice.arr.Length <= d_struct.Bits[i].ByteIndex ||
!d_slice.arr[d_struct.Bits[i].ByteIndex].HasValue
)
{
state = null;
break;
}
var curr_bit = (d_slice.arr[d_struct.Bits[i].ByteIndex].Value >> d_struct.Bits[i].BitIndex) & 1;
state += (byte)(curr_bit * Math.Pow(2, i));
}
b_matrix[d_struct.Index] = state;
}
sub_res.M = b_matrix.ToArray();
result.Add(sub_res);
}
return result.ToArray();
}
}
}

@ -36,6 +36,7 @@
"DataClient": "0.0.3",
"NLog": "4.7.10",
"Newtonsoft.Json": "13.0.1",
"SharpZipLib": "1.3.3",
"Microsoft.AspNetCore.Antiforgery": "5.0.0.0",
"Microsoft.AspNetCore.Authentication.Abstractions": "5.0.0.0",
"Microsoft.AspNetCore.Authentication.Cookies": "5.0.0.0",
@ -392,6 +393,17 @@
"lib/net5.0/NLog.Extensions.Logging.dll": {}
}
},
"SharpZipLib/1.3.3": {
"runtime": {
"lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {
"assemblyVersion": "1.3.3.11",
"fileVersion": "1.3.3.11"
}
},
"compile": {
"lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {}
}
},
"DataClient/0.0.3": {
"dependencies": {
"NLog": "4.7.10",
@ -2181,6 +2193,13 @@
"path": "nlog.extensions.logging/1.7.2",
"hashPath": "nlog.extensions.logging.1.7.2.nupkg.sha512"
},
"SharpZipLib/1.3.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-N8+hwhsKZm25tDJfWpBSW7EGhH/R7EMuiX+KJ4C4u+fCWVc1lJ5zg1u3S1RPPVYgTqhx/C3hxrqUpi6RwK5+Tg==",
"path": "sharpziplib/1.3.3",
"hashPath": "sharpziplib.1.3.3.nupkg.sha512"
},
"DataClient/0.0.3": {
"type": "project",
"serviceable": false,

@ -1,11 +1,10 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\google\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\google\\.nuget\\packages",
"C:\\Users\\Admin\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Admin\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet"
]
}
}

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -1,368 +1,380 @@
{
"deleteAll": true,
"delete": [],
"add": [
"default": {
"struct": [
{
"id": 0,
"name": "Ток дуги",
"sname": "I д",
"measure": "кА",
"index": 0,
"name": "Ток дуги",
"s_name": "I д",
"metric": "кА",
"mul": 0.1,
"byteId": [ 0, 1 ]
"show_default": true,
"bytes": [ 0, 1 ]
},
{
"id": 1,
"name": "Напряжение дуги",
"sname": "U д",
"measure": "В",
"index": 1,
"name": "Напряжение дуги",
"s_name": "U д",
"metric": "В",
"mul": 0.1,
"byteId": [ 2, 3 ]
"show_default": true,
"bytes": [ 2, 3 ]
},
{
"id": 2,
"name": "Ток рабочего двигателя",
"sname": "I рд",
"measure": "А",
"index": 2,
"name": "Ток рабочего двигателя",
"s_name": "I рд",
"metric": "А",
"mul": 0.1,
"byteId": [4,5]
"bytes": [ 4, 5 ]
},
{
"id": 3,
"name": "U рабочего двигателя",
"sname": "U рд",
"measure": "В",
"index": 3,
"name": "U рабочего двигателя",
"s_name": "U рд",
"metric": "В",
"mul": 0.1,
"byteId": [6,7]
"bytes": [ 6, 7 ]
},
{
"id": 4,
"name": "Ток соленоида",
"sname": "I сол",
"measure": "А",
"index": 4,
"name": "Ток соленоида",
"s_name": "I сол",
"metric": "А",
"mul": 0.1,
"byteId": [8,9]
"bytes": [ 8, 9 ]
},
{
"id": 5,
"name": "U соленоида",
"sname": "U сол",
"measure": "В",
"index": 5,
"name": "U соленоида",
"s_name": "U сол",
"metric": "В",
"mul": 0.1,
"byteId": [10,11]
"bytes": [ 10, 11 ]
},
{
"id": 6,
"name": "Ток задания",
"sname": "I рз",
"measure": "кА",
"index": 6,
"name": "Ток задания",
"s_name": "I рз",
"metric": "кА",
"mul": 0.1,
"byteId": [12,13]
"show_default": true,
"bytes": [ 12, 13 ]
},
{
"id": 7,
"name": "t кристаллизатора на входе",
"sname": "t кр.вых",
"measure": "гр.С",
"byteId": [14,15]
"index": 7,
"name": "t кристаллизатора на входе",
"s_name": "t кр.вых",
"metric": "гр.С",
"mul": 1,
"bytes": [ 14, 15 ]
},
{
"id": 8,
"name": "t кристаллизатора на выходе",
"sname": "t кр.вх",
"measure": "гр.С",
"byteId": [16,17]
"index": 8,
"name": "t кристаллизатора на выходе",
"s_name": "t кр.вх",
"metric": "гр.С",
"mul": 1,
"bytes": [ 16, 17 ]
},
{
"id": 9,
"name": "t вакуум-камеры",
"sname": "t вак-кам",
"measure": "гр.С",
"byteId": [18,19]
"index": 9,
"name": "t вакуум-камеры",
"s_name": "t вак-кам",
"metric": "гр.С",
"mul": 1,
"bytes": [ 18, 19 ]
},
{
"id": 10,
"name": "t штока",
"sname": "t шт",
"measure": "гр.С",
"byteId": [20,21]
"index": 10,
"name": "t штока",
"s_name": "t шт",
"metric": "гр.С",
"mul": 1,
"bytes": [ 20, 21 ]
},
{
"id": 11,
"name": "Перемещение 0.1",
"sname": "S шт",
"measure": "мм",
"index": 11,
"name": "U контроля",
"s_name": "U конт",
"metric": "В",
"mul": 0.1,
"byteId": [22,23]
"bytes": [ 22, 23 ]
},
{
"id": 12,
"name": "Перемещение",
"sname": "S шт",
"measure": "мм",
"byteId": [24,25]
"index": 12,
"name": "Перемещение",
"s_name": "S шт",
"metric": "мм",
"mul": 1,
"bytes": [ 24, 25 ]
},
{
"id": 13,
"name": "Остаточное давление",
"measure": "мкм.рт.ст",
"index": 13,
"name": "Вакуум",
"s_name": "Вакуум",
"metric": "мкм.рт.ст",
"mul": -1,
"byteId": [26,27]
"show_default": true,
"bytes": [ 26, 27 ]
},
{
"id": 14,
"name": "Изоляция шток-крышка",
"sname": "R шт-кр",
"measure": "В",
"index": 14,
"name": "Изоляция шток-крышка",
"s_name": "R шт-кр",
"metric": "В",
"mul": 0.1,
"byteId": [28,29]
"bytes": [ 28, 29 ]
},
{
"id": 15,
"name": "Изоляция крышка-камера",
"sname": "R кр-кам",
"measure": "В",
"index": 15,
"name": "Изоляция крышка-камера",
"s_name": "R кр-кам",
"metric": "В",
"mul": 0.1,
"byteId": [30,31]
"bytes": [ 30, 31 ]
},
{
"id": 16,
"name": "Расход воды",
"sname": "Q в.кр",
"measure": "м^3/ч",
"byteId": [ 32, 33 ]
"index": 16,
"name": "Расход воды",
"s_name": "Q в.кр",
"metric": "м^3/ч",
"mul": 1,
"bytes": [ 32, 33 ]
},
{
"id": 17,
"name": "Капельные замыкания",
"sname": "Кап.зам.",
"index": 17,
"name": "Капельные замыкания",
"s_name": "Кап.зам.",
"metric": "УЕ",
"mul": 0.01,
"byteId": [34,35]
"bytes": [ 34, 35 ]
},
{
"id": 18,
"name": "Усреднённая ширина импульсов КЗ",
"sname": "Кап.зым.",
"index": 18,
"name": "Усреднённая ширина импульсов КЗ",
"s_name": "Кап.зым.",
"metric": "УЕ",
"mul": 0.1,
"byteId": [36,37]
"bytes": [ 36, 37 ]
},
{
"id": 19,
"name": "Проток воды фланца",
"sname": "Qв. фл.",
"measure": "м^3/ч",
"index": 19,
"name": "Проток воды фланца",
"s_name": "Qв. фл.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [38,39]
"bytes": [ 38, 39 ]
},
{
"id": 20,
"name": "Проток воды штока",
"sname": "Qв. шт.",
"measure": "м^3/ч",
"index": 20,
"name": "Проток воды штока",
"s_name": "Qв. шт.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [40,41]
"bytes": [ 40, 41 ]
},
{
"id": 21,
"name": "Давление воды крист.+1,5",
"sname": "P в.кр",
"measure": "кгс/см^2",
"index": 21,
"name": "Давление воды крист.+1,5",
"s_name": "P в.кр",
"metric": "кгс/см^2",
"mul": 0.01,
"byteId": [42,43]
"bytes": [ 42, 43 ]
},
{
"id": 22,
"name": "Проток воды камеры",
"sname": "Qв. кам.",
"measure": "м^3/ч",
"index": 22,
"name": "Проток воды камеры",
"s_name": "Qв. кам.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [44,45]
"bytes": [ 44, 45 ]
},
{
"id": 23,
"name": "Ток задания источника(САУ)",
"sname": "I з.ист САУ",
"measure": "кА",
"index": 23,
"name": "Ток задания источника(САУ)",
"s_name": "I з.ист САУ",
"metric": "кА",
"mul": 0.1,
"byteId": [58,59]
"bytes": [ 58, 59 ]
},
{
"id": 25,
"name": "ПИД-рег. основная уставка",
"sname": "ПИД-осн",
"measure": "В",
"index": 24,
"name": "",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"byteId": [62,63]
"bytes": [ 60, 61 ]
},
{
"id": 26,
"name": "ПИД-рег. макс. скорость",
"sname": "ПИД-макс",
"measure": "В",
"index": 25,
"name": "ПИД-рег. основная уставка",
"s_name": "ПИД-осн",
"metric": "В",
"mul": 0.1,
"byteId": [64,65]
"bytes": [ 62, 63 ]
},
{
"id": 27,
"name": "t фланца вакуум-камеры",
"sname": "t фл.",
"measure": "гр.С",
"byteId": [66,67]
"index": 26,
"name": "ПИД-рег. макс. скорость",
"s_name": "ПИД-макс",
"metric": "В",
"mul": 0.1,
"bytes": [ 64, 65 ]
},
{
"id": 28,
"name": "t подставки",
"sname": "t под.",
"measure": "гр.С",
"byteId": [68,69]
"index": 27,
"name": "t фланца вакуум-камеры",
"s_name": "t фл.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 66, 67 ]
},
{
"id": 29,
"name": "Проток воды подставки",
"sname": "Qв. под.",
"measure": "м^3/ч",
"index": 28,
"name": "t подставки",
"s_name": "t под.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 68, 69 ]
},
{
"index": 29,
"name": "Проток воды подставки",
"s_name": "Qв. под.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [70,71]
"bytes": [ 70, 71 ]
},
{
"id": 30,
"name": "Задание соленоида",
"sname": "Зад. сол.",
"measure": "А",
"index": 30,
"name": "Задание соленоида",
"s_name": "Зад. сол.",
"metric": "А",
"mul": 0.1,
"byteId": [72,73]
"bytes": [ 72, 73 ]
},
{
"id": 31,
"name": "Ток задания источника(преобраз.)",
"sname": "I з.ист. преоб.",
"measure": "кА",
"index": 31,
"name": "Ток задания источника(преобраз.)",
"s_name": "I з.ист. преоб.",
"metric": "кА",
"mul": 0.1,
"byteId": [74,75]
"bytes": [ 74, 75 ]
},
{
"id": 33,
"name": "Вакуум по МЕТРАН-1200",
"sname": "МЕТРАН-1200",
"measure": "мм.рт.ст",
"index": 32,
"name": "Резерв",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"byteId": [78,79]
"bytes": [ 76, 77 ]
},
{
"id": 34,
"name": "Вакуум по МЕТРАН-18,75",
"sname": "МЕТРАН-18,25",
"measure": "мм.рт.ст",
"index": 33,
"name": "Вакуум по МЕТРАН-1200",
"s_name": "МЕТРАН-1200",
"metric": "мм.рт.ст",
"mul": 0.1,
"show_default": true,
"bytes": [ 78, 79 ]
},
{
"index": 34,
"name": "Вакуум по МЕТРАН-18,75",
"s_name": "МЕТРАН-18,25",
"metric": "мм.рт.ст",
"mul": 0.001,
"byteId": [80,81]
"show_default": true,
"bytes": [ 80, 81 ]
},
{
"id": 35,
"name": "Давление газа в баллоне",
"sname": "P г.балл.",
"measure": "кгс/см^2",
"index": 35,
"name": "Давление газа в баллоне",
"s_name": "P г.балл.",
"metric": "кгс/см^2",
"mul": 0.1,
"byteId": [82,83]
"bytes": [ 82, 83 ]
},
{
"id": 36,
"name": "Давление воды поддона",
"sname": "P в.подд.",
"measure": "кгс/см^2",
"byteId": [84,85]
"index": 36,
"name": "Давление воды поддона",
"s_name": "P в.подд.",
"metric": "кгс/см^2",
"mul": 1,
"bytes": [ 84, 85 ]
},
{
"id": 37,
"name": "Задание тока дуги (ЦАП)",
"sname": "Зад.I, ЦАП",
"measure": "кА",
"index": 37,
"name": "Задание тока дуги (ЦАП)",
"s_name": "Зад.I, ЦАП",
"metric": "кА",
"mul": 0.1,
"byteId": [86,87]
"bytes": [ 86, 87 ]
},
{
"id": 38,
"name": "Задание скорости рабочего двигателя",
"sname": "Зад.ск.раб.дв",
"measure": "В",
"index": 38,
"name": "Задкние скорости рабочего двигателя",
"s_name": "Зад.ск.раб.дв",
"metric": "В",
"mul": 0.1,
"bytes": [ 88, 89 ]
},
{
"index": 39,
"name": "Ток двигателя насоса ARPW",
"s_name": "I дв. ARPW",
"metric": "А",
"mul": 0.01,
"byteId": [88,89]
"bytes": [ 90, 91 ]
},
{
"id": 39,
"name": "Ток двигателя насоса ARPW",
"sname": "I дв. ARPW",
"measure": "А",
"mul": 0.01,
"byteId": [90,91]
},
{
"id": 40,
"name": "Энергия плавильного пролёта",
"sname": "Эн.пролёта, МВт",
"measure": "МВт",
"index": 40,
"name": "Энергия плавильного пролёта",
"s_name": "Эн.пролёта, МВт",
"metric": "МВт",
"mul": 0.1,
"byteId": []
"bytes": [ 92, 93 ]
},
{
"id": 41,
"name": "Среднее напряжение плавл. за 1 мин.",
"sname": "U ср. 1мин, В",
"measure": "В",
"index": 41,
"name": "Среднее напряжение плавления",
"s_name": "U средн, В",
"metric": "В",
"mul": 0.1,
"byteId": [92,93]
"bytes": [ 94, 95 ]
},
{
"id": 42,
"name": "ГМП: ток катушки 1",
"sname": "I кат1 ГМП",
"measure": "А",
"byteId": [94,95]
"index": 42,
"name": "ГМП: ток катушки 1",
"s_name": "I кат1 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 96, 97 ]
},
{
"id": 43,
"name": "ГМП: ток катушки 2",
"sname": "I кат2 ГМП",
"measure": "А",
"byteId": [96,97]
"index": 43,
"name": "ГМП: ток катушки 2",
"s_name": "I кат2 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 98, 99 ]
},
{
"id": 44,
"name": "ГМП: ток катушки 3",
"sname": "I кат3 ГМП",
"measure": "А",
"byteId": [98,99]
"index": 44,
"name": "ГМП: ток катушки 3",
"s_name": "I кат3 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 100, 101 ]
},
{
"id": 45,
"name": "ГМП: частота",
"sname": "Част. ГМП",
"measure": "Гц",
"mul": 0.1,
"byteId": [100,101]
},
{
"id": 46,
"name": "ПИД: коэффицинт Кp",
"mul": 0.01,
"byteId": [102,103]
},
{
"id": 47,
"name": "ПИД: коэффицинт Кi",
"mul": 0.01,
"byteId": [104,105]
},
{
"id": 49,
"name": "Количество точек усреднения",
"byteId": [106,107]
},
{
"id": 50,
"name": "Пороговое U ДКЗ",
"measure": "В",
"mul": 0.1,
"byteId": [108,109]
"index": 45,
"name": "ГМП: частота",
"s_name": "Част. ГМП",
"metric": "Гц",
"mul": 1,
"bytes": [ 102, 103 ]
}
]
}
}

@ -0,0 +1,110 @@
{
"00": {
"struct": [
{
"index": 0,
"name": "Общий: t воды водооборота",
"s_name": "t в",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 1,
"name": "Общий: Давление воды водооборота",
"s_name": "P в",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": []
},
{
"index": 2,
"name": "Общий: Давление масла в бутыли",
"s_name": "P масла бут",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 3,
"name": "Общий: t воздуха в машинном зале",
"s_name": "t машзал",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 4,
"name": "Общий: t воздуха на улице",
"s_name": "t улица",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 5,
"name": "Общий: Атмосферное давление",
"s_name": "p атм",
"metric": "мм.рт.ст",
"mul": 0.1,
"bytes": []
},
{
"index": 6,
"name": "Общий: Давление масла в магистрали",
"s_name": "P масла маг",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 7,
"name": "Общий: Давление воды водооборота-К90",
"s_name": "P в-90",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 8,
"name": "Скорость штока за 1 мин",
"s_name": "V шт",
"metric": "мм/мин",
"mul": 0.01,
"bytes": []
},
{
"index": 9,
"name": "Вакуум по МЕТРАН 1,2",
"s_name": "МЕТРАН1,2",
"metric": "мм.рт.ст",
"mul": 0.001,
"bytes": []
},
{
"index": 10,
"name": "ВС: Ток дуги",
"s_name": "ВС:I д",
"metric": "кА",
"mul": 0.1,
"bytes": []
},
{
"index": 12,
"name": "ВС: Напряжение дуги",
"s_name": "ВС:U д",
"metric": "В",
"mul": 0.1,
"bytes": []
},
{
"index": 13,
"name": "ВС: Ток задания",
"s_name": "ВС:I рз",
"metric": "кА",
"mul": 0.1,
"bytes": []
}
]
}
}

@ -0,0 +1 @@
{}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

@ -1,13 +0,0 @@
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

@ -1,9 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

@ -1,10 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

@ -36,6 +36,7 @@
"DataClient": "0.0.3",
"NLog": "4.7.10",
"Newtonsoft.Json": "13.0.1",
"SharpZipLib": "1.3.3",
"Microsoft.AspNetCore.Antiforgery": "5.0.0.0",
"Microsoft.AspNetCore.Authentication.Abstractions": "5.0.0.0",
"Microsoft.AspNetCore.Authentication.Cookies": "5.0.0.0",
@ -392,6 +393,17 @@
"lib/net5.0/NLog.Extensions.Logging.dll": {}
}
},
"SharpZipLib/1.3.3": {
"runtime": {
"lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {
"assemblyVersion": "1.3.3.11",
"fileVersion": "1.3.3.11"
}
},
"compile": {
"lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {}
}
},
"DataClient/0.0.3": {
"dependencies": {
"NLog": "4.7.10",
@ -2181,6 +2193,13 @@
"path": "nlog.extensions.logging/1.7.2",
"hashPath": "nlog.extensions.logging.1.7.2.nupkg.sha512"
},
"SharpZipLib/1.3.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-N8+hwhsKZm25tDJfWpBSW7EGhH/R7EMuiX+KJ4C4u+fCWVc1lJ5zg1u3S1RPPVYgTqhx/C3hxrqUpi6RwK5+Tg==",
"path": "sharpziplib/1.3.3",
"hashPath": "sharpziplib.1.3.3.nupkg.sha512"
},
"DataClient/0.0.3": {
"type": "project",
"serviceable": false,

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

@ -1,368 +1,380 @@
{
"deleteAll": true,
"delete": [],
"add": [
"default": {
"struct": [
{
"id": 0,
"name": "Ток дуги",
"sname": "I д",
"measure": "кА",
"index": 0,
"name": "Ток дуги",
"s_name": "I д",
"metric": "кА",
"mul": 0.1,
"byteId": [ 0, 1 ]
"show_default": true,
"bytes": [ 0, 1 ]
},
{
"id": 1,
"name": "Напряжение дуги",
"sname": "U д",
"measure": "В",
"index": 1,
"name": "Напряжение дуги",
"s_name": "U д",
"metric": "В",
"mul": 0.1,
"byteId": [ 2, 3 ]
"show_default": true,
"bytes": [ 2, 3 ]
},
{
"id": 2,
"name": "Ток рабочего двигателя",
"sname": "I рд",
"measure": "А",
"index": 2,
"name": "Ток рабочего двигателя",
"s_name": "I рд",
"metric": "А",
"mul": 0.1,
"byteId": [4,5]
"bytes": [ 4, 5 ]
},
{
"id": 3,
"name": "U рабочего двигателя",
"sname": "U рд",
"measure": "В",
"index": 3,
"name": "U рабочего двигателя",
"s_name": "U рд",
"metric": "В",
"mul": 0.1,
"byteId": [6,7]
"bytes": [ 6, 7 ]
},
{
"id": 4,
"name": "Ток соленоида",
"sname": "I сол",
"measure": "А",
"index": 4,
"name": "Ток соленоида",
"s_name": "I сол",
"metric": "А",
"mul": 0.1,
"byteId": [8,9]
"bytes": [ 8, 9 ]
},
{
"id": 5,
"name": "U соленоида",
"sname": "U сол",
"measure": "В",
"index": 5,
"name": "U соленоида",
"s_name": "U сол",
"metric": "В",
"mul": 0.1,
"byteId": [10,11]
"bytes": [ 10, 11 ]
},
{
"id": 6,
"name": "Ток задания",
"sname": "I рз",
"measure": "кА",
"index": 6,
"name": "Ток задания",
"s_name": "I рз",
"metric": "кА",
"mul": 0.1,
"byteId": [12,13]
"show_default": true,
"bytes": [ 12, 13 ]
},
{
"id": 7,
"name": "t кристаллизатора на входе",
"sname": "t кр.вых",
"measure": "гр.С",
"byteId": [14,15]
"index": 7,
"name": "t кристаллизатора на входе",
"s_name": "t кр.вых",
"metric": "гр.С",
"mul": 1,
"bytes": [ 14, 15 ]
},
{
"id": 8,
"name": "t кристаллизатора на выходе",
"sname": "t кр.вх",
"measure": "гр.С",
"byteId": [16,17]
"index": 8,
"name": "t кристаллизатора на выходе",
"s_name": "t кр.вх",
"metric": "гр.С",
"mul": 1,
"bytes": [ 16, 17 ]
},
{
"id": 9,
"name": "t вакуум-камеры",
"sname": "t вак-кам",
"measure": "гр.С",
"byteId": [18,19]
"index": 9,
"name": "t вакуум-камеры",
"s_name": "t вак-кам",
"metric": "гр.С",
"mul": 1,
"bytes": [ 18, 19 ]
},
{
"id": 10,
"name": "t штока",
"sname": "t шт",
"measure": "гр.С",
"byteId": [20,21]
"index": 10,
"name": "t штока",
"s_name": "t шт",
"metric": "гр.С",
"mul": 1,
"bytes": [ 20, 21 ]
},
{
"id": 11,
"name": "Перемещение 0.1",
"sname": "S шт",
"measure": "мм",
"index": 11,
"name": "U контроля",
"s_name": "U конт",
"metric": "В",
"mul": 0.1,
"byteId": [22,23]
"bytes": [ 22, 23 ]
},
{
"id": 12,
"name": "Перемещение",
"sname": "S шт",
"measure": "мм",
"byteId": [24,25]
"index": 12,
"name": "Перемещение",
"s_name": "S шт",
"metric": "мм",
"mul": 1,
"bytes": [ 24, 25 ]
},
{
"id": 13,
"name": "Остаточное давление",
"measure": "мкм.рт.ст",
"index": 13,
"name": "Вакуум",
"s_name": "Вакуум",
"metric": "мкм.рт.ст",
"mul": -1,
"byteId": [26,27]
"show_default": true,
"bytes": [ 26, 27 ]
},
{
"id": 14,
"name": "Изоляция шток-крышка",
"sname": "R шт-кр",
"measure": "В",
"index": 14,
"name": "Изоляция шток-крышка",
"s_name": "R шт-кр",
"metric": "В",
"mul": 0.1,
"byteId": [28,29]
"bytes": [ 28, 29 ]
},
{
"id": 15,
"name": "Изоляция крышка-камера",
"sname": "R кр-кам",
"measure": "В",
"index": 15,
"name": "Изоляция крышка-камера",
"s_name": "R кр-кам",
"metric": "В",
"mul": 0.1,
"byteId": [30,31]
"bytes": [ 30, 31 ]
},
{
"id": 16,
"name": "Расход воды",
"sname": "Q в.кр",
"measure": "м^3/ч",
"byteId": [ 32, 33 ]
"index": 16,
"name": "Расход воды",
"s_name": "Q в.кр",
"metric": "м^3/ч",
"mul": 1,
"bytes": [ 32, 33 ]
},
{
"id": 17,
"name": "Капельные замыкания",
"sname": "Кап.зам.",
"index": 17,
"name": "Капельные замыкания",
"s_name": "Кап.зам.",
"metric": "УЕ",
"mul": 0.01,
"byteId": [34,35]
"bytes": [ 34, 35 ]
},
{
"id": 18,
"name": "Усреднённая ширина импульсов КЗ",
"sname": "Кап.зым.",
"index": 18,
"name": "Усреднённая ширина импульсов КЗ",
"s_name": "Кап.зым.",
"metric": "УЕ",
"mul": 0.1,
"byteId": [36,37]
"bytes": [ 36, 37 ]
},
{
"id": 19,
"name": "Проток воды фланца",
"sname": "Qв. фл.",
"measure": "м^3/ч",
"index": 19,
"name": "Проток воды фланца",
"s_name": "Qв. фл.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [38,39]
"bytes": [ 38, 39 ]
},
{
"id": 20,
"name": "Проток воды штока",
"sname": "Qв. шт.",
"measure": "м^3/ч",
"index": 20,
"name": "Проток воды штока",
"s_name": "Qв. шт.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [40,41]
"bytes": [ 40, 41 ]
},
{
"id": 21,
"name": "Давление воды крист.+1,5",
"sname": "P в.кр",
"measure": "кгс/см^2",
"index": 21,
"name": "Давление воды крист.+1,5",
"s_name": "P в.кр",
"metric": "кгс/см^2",
"mul": 0.01,
"byteId": [42,43]
"bytes": [ 42, 43 ]
},
{
"id": 22,
"name": "Проток воды камеры",
"sname": "Qв. кам.",
"measure": "м^3/ч",
"index": 22,
"name": "Проток воды камеры",
"s_name": "Qв. кам.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [44,45]
"bytes": [ 44, 45 ]
},
{
"id": 23,
"name": "Ток задания источника(САУ)",
"sname": "I з.ист САУ",
"measure": "кА",
"index": 23,
"name": "Ток задания источника(САУ)",
"s_name": "I з.ист САУ",
"metric": "кА",
"mul": 0.1,
"byteId": [58,59]
"bytes": [ 58, 59 ]
},
{
"id": 25,
"name": "ПИД-рег. основная уставка",
"sname": "ПИД-осн",
"measure": "В",
"index": 24,
"name": "",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"byteId": [62,63]
"bytes": [ 60, 61 ]
},
{
"id": 26,
"name": "ПИД-рег. макс. скорость",
"sname": "ПИД-макс",
"measure": "В",
"index": 25,
"name": "ПИД-рег. основная уставка",
"s_name": "ПИД-осн",
"metric": "В",
"mul": 0.1,
"byteId": [64,65]
"bytes": [ 62, 63 ]
},
{
"id": 27,
"name": "t фланца вакуум-камеры",
"sname": "t фл.",
"measure": "гр.С",
"byteId": [66,67]
"index": 26,
"name": "ПИД-рег. макс. скорость",
"s_name": "ПИД-макс",
"metric": "В",
"mul": 0.1,
"bytes": [ 64, 65 ]
},
{
"id": 28,
"name": "t подставки",
"sname": "t под.",
"measure": "гр.С",
"byteId": [68,69]
"index": 27,
"name": "t фланца вакуум-камеры",
"s_name": "t фл.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 66, 67 ]
},
{
"id": 29,
"name": "Проток воды подставки",
"sname": "Qв. под.",
"measure": "м^3/ч",
"index": 28,
"name": "t подставки",
"s_name": "t под.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 68, 69 ]
},
{
"index": 29,
"name": "Проток воды подставки",
"s_name": "Qв. под.",
"metric": "м^3/ч",
"mul": 0.01,
"byteId": [70,71]
"bytes": [ 70, 71 ]
},
{
"id": 30,
"name": "Задание соленоида",
"sname": "Зад. сол.",
"measure": "А",
"index": 30,
"name": "Задание соленоида",
"s_name": "Зад. сол.",
"metric": "А",
"mul": 0.1,
"byteId": [72,73]
"bytes": [ 72, 73 ]
},
{
"id": 31,
"name": "Ток задания источника(преобраз.)",
"sname": "I з.ист. преоб.",
"measure": "кА",
"index": 31,
"name": "Ток задания источника(преобраз.)",
"s_name": "I з.ист. преоб.",
"metric": "кА",
"mul": 0.1,
"byteId": [74,75]
"bytes": [ 74, 75 ]
},
{
"id": 33,
"name": "Вакуум по МЕТРАН-1200",
"sname": "МЕТРАН-1200",
"measure": "мм.рт.ст",
"index": 32,
"name": "Резерв",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"byteId": [78,79]
"bytes": [ 76, 77 ]
},
{
"id": 34,
"name": "Вакуум по МЕТРАН-18,75",
"sname": "МЕТРАН-18,25",
"measure": "мм.рт.ст",
"index": 33,
"name": "Вакуум по МЕТРАН-1200",
"s_name": "МЕТРАН-1200",
"metric": "мм.рт.ст",
"mul": 0.1,
"show_default": true,
"bytes": [ 78, 79 ]
},
{
"index": 34,
"name": "Вакуум по МЕТРАН-18,75",
"s_name": "МЕТРАН-18,25",
"metric": "мм.рт.ст",
"mul": 0.001,
"byteId": [80,81]
"show_default": true,
"bytes": [ 80, 81 ]
},
{
"id": 35,
"name": "Давление газа в баллоне",
"sname": "P г.балл.",
"measure": "кгс/см^2",
"index": 35,
"name": "Давление газа в баллоне",
"s_name": "P г.балл.",
"metric": "кгс/см^2",
"mul": 0.1,
"byteId": [82,83]
"bytes": [ 82, 83 ]
},
{
"id": 36,
"name": "Давление воды поддона",
"sname": "P в.подд.",
"measure": "кгс/см^2",
"byteId": [84,85]
"index": 36,
"name": "Давление воды поддона",
"s_name": "P в.подд.",
"metric": "кгс/см^2",
"mul": 1,
"bytes": [ 84, 85 ]
},
{
"id": 37,
"name": "Задание тока дуги (ЦАП)",
"sname": "Зад.I, ЦАП",
"measure": "кА",
"index": 37,
"name": "Задание тока дуги (ЦАП)",
"s_name": "Зад.I, ЦАП",
"metric": "кА",
"mul": 0.1,
"byteId": [86,87]
"bytes": [ 86, 87 ]
},
{
"id": 38,
"name": "Задание скорости рабочего двигателя",
"sname": "Зад.ск.раб.дв",
"measure": "В",
"index": 38,
"name": "Задкние скорости рабочего двигателя",
"s_name": "Зад.ск.раб.дв",
"metric": "В",
"mul": 0.1,
"bytes": [ 88, 89 ]
},
{
"index": 39,
"name": "Ток двигателя насоса ARPW",
"s_name": "I дв. ARPW",
"metric": "А",
"mul": 0.01,
"byteId": [88,89]
"bytes": [ 90, 91 ]
},
{
"id": 39,
"name": "Ток двигателя насоса ARPW",
"sname": "I дв. ARPW",
"measure": "А",
"mul": 0.01,
"byteId": [90,91]
},
{
"id": 40,
"name": "Энергия плавильного пролёта",
"sname": "Эн.пролёта, МВт",
"measure": "МВт",
"index": 40,
"name": "Энергия плавильного пролёта",
"s_name": "Эн.пролёта, МВт",
"metric": "МВт",
"mul": 0.1,
"byteId": []
"bytes": [ 92, 93 ]
},
{
"id": 41,
"name": "Среднее напряжение плавл. за 1 мин.",
"sname": "U ср. 1мин, В",
"measure": "В",
"index": 41,
"name": "Среднее напряжение плавления",
"s_name": "U средн, В",
"metric": "В",
"mul": 0.1,
"byteId": [92,93]
"bytes": [ 94, 95 ]
},
{
"id": 42,
"name": "ГМП: ток катушки 1",
"sname": "I кат1 ГМП",
"measure": "А",
"byteId": [94,95]
"index": 42,
"name": "ГМП: ток катушки 1",
"s_name": "I кат1 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 96, 97 ]
},
{
"id": 43,
"name": "ГМП: ток катушки 2",
"sname": "I кат2 ГМП",
"measure": "А",
"byteId": [96,97]
"index": 43,
"name": "ГМП: ток катушки 2",
"s_name": "I кат2 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 98, 99 ]
},
{
"id": 44,
"name": "ГМП: ток катушки 3",
"sname": "I кат3 ГМП",
"measure": "А",
"byteId": [98,99]
"index": 44,
"name": "ГМП: ток катушки 3",
"s_name": "I кат3 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 100, 101 ]
},
{
"id": 45,
"name": "ГМП: частота",
"sname": "Част. ГМП",
"measure": "Гц",
"mul": 0.1,
"byteId": [100,101]
},
{
"id": 46,
"name": "ПИД: коэффицинт Кp",
"mul": 0.01,
"byteId": [102,103]
},
{
"id": 47,
"name": "ПИД: коэффицинт Кi",
"mul": 0.01,
"byteId": [104,105]
},
{
"id": 49,
"name": "Количество точек усреднения",
"byteId": [106,107]
},
{
"id": 50,
"name": "Пороговое U ДКЗ",
"measure": "В",
"mul": 0.1,
"byteId": [108,109]
"index": 45,
"name": "ГМП: частота",
"s_name": "Част. ГМП",
"metric": "Гц",
"mul": 1,
"bytes": [ 102, 103 ]
}
]
}
}

@ -0,0 +1,110 @@
{
"00": {
"struct": [
{
"index": 0,
"name": "Общий: t воды водооборота",
"s_name": "t в",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 1,
"name": "Общий: Давление воды водооборота",
"s_name": "P в",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": []
},
{
"index": 2,
"name": "Общий: Давление масла в бутыли",
"s_name": "P масла бут",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 3,
"name": "Общий: t воздуха в машинном зале",
"s_name": "t машзал",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 4,
"name": "Общий: t воздуха на улице",
"s_name": "t улица",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 5,
"name": "Общий: Атмосферное давление",
"s_name": "p атм",
"metric": "мм.рт.ст",
"mul": 0.1,
"bytes": []
},
{
"index": 6,
"name": "Общий: Давление масла в магистрали",
"s_name": "P масла маг",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 7,
"name": "Общий: Давление воды водооборота-К90",
"s_name": "P в-90",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 8,
"name": "Скорость штока за 1 мин",
"s_name": "V шт",
"metric": "мм/мин",
"mul": 0.01,
"bytes": []
},
{
"index": 9,
"name": "Вакуум по МЕТРАН 1,2",
"s_name": "МЕТРАН1,2",
"metric": "мм.рт.ст",
"mul": 0.001,
"bytes": []
},
{
"index": 10,
"name": "ВС: Ток дуги",
"s_name": "ВС:I д",
"metric": "кА",
"mul": 0.1,
"bytes": []
},
{
"index": 12,
"name": "ВС: Напряжение дуги",
"s_name": "ВС:U д",
"metric": "В",
"mul": 0.1,
"bytes": []
},
{
"index": 13,
"name": "ВС: Ток задания",
"s_name": "ВС:I рз",
"metric": "кА",
"mul": 0.1,
"bytes": []
}
]
}
}

@ -0,0 +1 @@
{}

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\ApiServer.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 618ef8a3-70d7-42a8-a407-aa3e47fe184c-->

@ -57,6 +57,10 @@
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.1, )"
},
"SharpZipLib": {
"target": "Package",
"version": "[1.3.3, )"
}
},
"imports": [
@ -77,7 +81,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.300\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.201\\RuntimeIdentifierGraph.json"
}
}
},
@ -151,7 +155,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.300\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.201\\RuntimeIdentifierGraph.json"
}
}
}

@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Admin\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.10.0</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.11.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Admin\.nuget\packages\" />

@ -1 +1 @@
eece26e2641288ea40de3e4121e24408575928d1
5643e18af42acbd094b9a55b464ee34c70e33f4c

@ -30,3 +30,48 @@ D:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.dll
D:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ref\ApiServer.dll
D:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.pdb
D:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.genruntimeconfig.cache
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\appsettings.Development.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\appsettings.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Colors.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Discret\all.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Discret\default.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Discret\power_new.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Protect\all.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Protect\default.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\StateStruct.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\TechCycle.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.exe
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\analog\default.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\config.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.deps.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.runtimeconfig.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.runtimeconfig.dev.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ref\ApiServer.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ApiServer.pdb
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Newtonsoft.Json.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\NLog.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\NLog.Extensions.Logging.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\ICSharpCode.SharpZipLib.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\DataClient.dll
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\DataClient.pdb
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\DataClient.xml
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.csproj.AssemblyReference.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.GeneratedMSBuildEditorConfig.editorconfig
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.AssemblyInfoInputs.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.AssemblyInfo.cs
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.csproj.CoreCompileInputs.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.MvcApplicationPartsAssemblyInfo.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\staticwebassets\ApiServer.StaticWebAssets.Manifest.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\staticwebassets\ApiServer.StaticWebAssets.xml
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\scopedcss\bundle\ApiServer.styles.css
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.RazorTargetAssemblyInfo.cache
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.csproj.CopyComplete
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.dll
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ref\ApiServer.dll
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.pdb
F:\GIT\ASCKU_PC\ApiServer\obj\Debug\net5.0\ApiServer.genruntimeconfig.cache
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Analog\all.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Analog\global.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\bufer.json
F:\GIT\ASCKU_PC\ApiServer\bin\Debug\net5.0\Config\Metrics.json

@ -1 +1 @@
0a8c2f7fcebea58b73a53bb1c0a2aa1056202aba
b0f840db997650a7593b11f7a1ba44023edfe205

Some files were not shown because too many files have changed in this diff Show More