work
This commit is contained in:
@@ -115,5 +115,6 @@ namespace DataClient
|
||||
}
|
||||
return res.ToArray();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
15
DataClient/FileClient.cs
Normal file
15
DataClient/FileClient.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataClient
|
||||
{
|
||||
static class FileClient
|
||||
{
|
||||
private static string tmpDir = Path.Combine(Directory.GetCurrentDirectory(), "temp");
|
||||
private static List<string> block = new List<string>();
|
||||
}
|
||||
}
|
@@ -10,55 +10,100 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace DataClient
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс для связи с СТП. Содержит все инструменты, для получения данных.
|
||||
/// </summary>
|
||||
/// <summary>Класс для связи с СТП. Содержит все инструменты, для получения данных.</summary>
|
||||
public class STPClient
|
||||
{
|
||||
//Переменные
|
||||
Logger log = LogManager.GetCurrentClassLogger();
|
||||
string confDir = Path.Combine(Directory.GetCurrentDirectory(), "Config");
|
||||
private List<server> servers = new List<server>();
|
||||
private Dictionary<int,ConfAnalog[]> confAnalog = new Dictionary<int, ConfAnalog[]>();
|
||||
//ЛОГИРОВАНИЕ
|
||||
private Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
//КОНФИГУРАЦИЯ
|
||||
private string confDir = Path.Combine(Directory.GetCurrentDirectory(), "Config");
|
||||
private Dictionary<int, ConfAnalog[]> confAnalog = new Dictionary<int, ConfAnalog[]>();
|
||||
private List<(int num, string name)> vdpList = new List<(int num, string name)>();
|
||||
int serverDefault = -1;
|
||||
//Геттеры и сеттеры
|
||||
/// <summary>Чтение конфигурационнного файла и установка параметров по умолчанию.</summary>
|
||||
private void Config()
|
||||
{
|
||||
string jsonString;
|
||||
var confFile = Path.Combine(confDir, "config.json");
|
||||
try
|
||||
{
|
||||
jsonString = File.ReadAllText(confFile);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
log.Warn(e, "Can't read config file from " + confDir + ".");
|
||||
return;
|
||||
}
|
||||
var conf = (JObject)JsonConvert.DeserializeObject(jsonString);
|
||||
if (!conf.HasValues && !conf["servers"].HasValues && conf["servers"].Type != JTokenType.Array)
|
||||
{
|
||||
log.Warn("Doesn't exist \"servers\" object in config file.");
|
||||
return;
|
||||
}
|
||||
var count = -1;
|
||||
foreach (var s in conf["servers"])
|
||||
{
|
||||
count++;
|
||||
var name = (s["name"].Type == JTokenType.String) ? (string)s["name"] : "default";
|
||||
var ip = (s["ip"].Type == JTokenType.String) ? (string)s["ip"] : "";
|
||||
var port = (s["port"].Type == JTokenType.Integer) ? (int)s["port"] : -1;
|
||||
var dir = (s["dir"].Type == JTokenType.String) ? (string)s["dir"] : "";
|
||||
var res = false;
|
||||
var idx = _servers.FindIndex(x => x.name == name);
|
||||
if (idx == -1)
|
||||
res = AddServer(name, ip, port, dir);
|
||||
else
|
||||
{
|
||||
_servers.RemoveAt(idx);
|
||||
res = AddServer(name, ip, port, dir);
|
||||
}
|
||||
if (!res)
|
||||
log.Trace("Can't add or change server #" + count + " from conf file.");
|
||||
}
|
||||
//init vdp
|
||||
for (var i = 0; i < 49; i++)
|
||||
vdpList.Add(new(i, i == 0 ? "Общие" : "Печь " + i.ToString("D2")));
|
||||
for (var i = 91; i < 95; i++)
|
||||
vdpList.Add((i, "Печь " + i.ToString("D2")));
|
||||
//init analog
|
||||
var tmpvdp = new List<int>();
|
||||
foreach (var v in vdpList) tmpvdp.Add(v.num);
|
||||
confAnalog = Configuration.InitAnalogList(Path.Combine(confDir, "analog"), tmpvdp.ToArray());
|
||||
}
|
||||
|
||||
//РАБОТА С СЕРВЕРОМ
|
||||
private List<server> _servers = new List<server>();
|
||||
private int _useServer = -1;
|
||||
/// <summary>Номер сервера, используемого по умолчанию.</summary>
|
||||
public int UseServer
|
||||
{
|
||||
get { return serverDefault; }
|
||||
set {
|
||||
serverDefault =
|
||||
(servers.Count == 0) ? -1 :
|
||||
{
|
||||
get { return _useServer; }
|
||||
set
|
||||
{
|
||||
_useServer =
|
||||
(_servers.Count == 0) ? -1 :
|
||||
(value < 0) ? 0 :
|
||||
(value >= servers.Count) ? serverDefault = servers.Count - 1 :
|
||||
(value >= _servers.Count) ? _useServer = _servers.Count - 1 :
|
||||
value;
|
||||
}
|
||||
}
|
||||
/// <summary>Массив серверов, инициализированных в экземпляре класса.</summary>
|
||||
public server[] ListServers { get { return servers.ToArray(); } }
|
||||
|
||||
//Функции
|
||||
/// <summary>Получение номера сервера по его названию.</summary>
|
||||
/// <param name="name">Название сервера.</param>
|
||||
/// <returns>Номер сервера в списке серверов.</returns>
|
||||
public int GetServerIdByName(string name)
|
||||
{
|
||||
return servers.FindIndex(x => x.name == name);
|
||||
}
|
||||
/// <summary>Получение название сервера по его номеру.</summary>
|
||||
/// <param name="id">Номер сервера в списке серверов.</param>
|
||||
/// <returns>Название сервера.</returns>
|
||||
public string GetServerNameById(int id)
|
||||
{
|
||||
var res = (id >= servers.Count || id < 0) ? null : servers[id].name;
|
||||
return res;
|
||||
}
|
||||
/// <summary>Проверка параметров серевера перед их добавлением в список.</summary>
|
||||
/// <param name="ip">IP адресс сервера.</param>
|
||||
/// <param name="port">Порт сервера.</param>
|
||||
/// <param name="dir">Путь к архиву.</param>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
/// <summary>Массив серверов, инициализированных в экземпляре класса.</summary>
|
||||
public server[] ListServers
|
||||
{
|
||||
get { return _servers.ToArray(); }
|
||||
}
|
||||
/// <summary> Текущий рабочий сервер </summary>
|
||||
public server? Server
|
||||
{
|
||||
get { return (_useServer == -1) ? null : _servers[_useServer]; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Проверка параметров сервера.
|
||||
/// </summary>
|
||||
/// <param name="ip">Ip адрес сервера СТП.</param>
|
||||
/// <param name="port">Порт сервера СТП.</param>
|
||||
/// <param name="dir">Путь к архивным данным.</param>
|
||||
/// <returns>Результат проверки.</returns>
|
||||
private bool CheckDataServer(string ip, int port, string dir)
|
||||
{
|
||||
if (!IPAddress.TryParse(ip, out _))
|
||||
@@ -96,136 +141,41 @@ namespace DataClient
|
||||
log.Warn("Server not added: Incorrect name server.");
|
||||
return false;
|
||||
}
|
||||
if (servers.FindIndex(x => x.name == name) != -1)
|
||||
if (_servers.FindIndex(x => x.name == name) != -1)
|
||||
{
|
||||
log.Warn("Server not added: Server with this name exist.");
|
||||
return false;
|
||||
}
|
||||
servers.Add(new server(name, ip, port, dir));
|
||||
UseServer = 0;
|
||||
_servers.Add(new server(name, ip, port, dir));
|
||||
_useServer = 0;
|
||||
log.Trace("Server (name=" + name + ";ip=" + ip + ";port=" + port + ";dir=" + dir + ") added.");
|
||||
return true;
|
||||
}
|
||||
/// <summary>Изменение сервера в списке серверов по его номеру.</summary>
|
||||
/// <param name="id">Номер сервера в списке серверов.</param>
|
||||
/// <param name="name">Название сервера.</param>
|
||||
/// <param name="ip">IP адресс сервера.</param>
|
||||
/// <param name="port">Порт сервера.</param>
|
||||
/// <param name="dir">Путь к архиву.</param>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
public bool ChangeServerById(int id, string name, string ip, int port, string dir)
|
||||
{
|
||||
if (servers.Count == 0 || id >= servers.Count || id < 0)
|
||||
{
|
||||
log.Warn("Server not changed: Id incorrect.");
|
||||
return false;
|
||||
}
|
||||
if (!CheckDataServer(ip, port, dir))
|
||||
{
|
||||
log.Warn("Server not changed: Data incorrect.");
|
||||
return false;
|
||||
}
|
||||
var tmpId = servers.FindIndex(x => x.name == name);
|
||||
if (string.IsNullOrEmpty(name) || (tmpId != -1 && tmpId != id))
|
||||
{
|
||||
log.Warn("Server not changed: Name incorrect.");
|
||||
return false;
|
||||
}
|
||||
var tmp = new server(name, ip, port, dir);
|
||||
log.Trace("Server id=" + id + " changed: name=" + name + ";ip=" + ip + ";port=" + port.ToString() + ";dir=" + dir + ";.");
|
||||
servers[id] = tmp;
|
||||
return true;
|
||||
}
|
||||
/// <summary>Изменение сервера в списке серверов по его названию.</summary>
|
||||
/// <param name="name">Название сервера.</param>
|
||||
/// <param name="ip">IP адресс сервера.</param>
|
||||
/// <param name="port">Порт сервера.</param>
|
||||
/// <param name="dir">Путь к архиву.</param>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
public bool ChangeServerByName(string name, string ip, int port, string dir)
|
||||
{
|
||||
var id = servers.FindIndex(x => x.name == name);
|
||||
if (id == -1)
|
||||
{
|
||||
log.Warn("Server not changed: Name incorrect or server not exist.");
|
||||
return false;
|
||||
}
|
||||
return ChangeServerById(id, name, ip, port, dir);
|
||||
}
|
||||
/// <summary>Удаление сервера из списка серверов по его номеру.</summary>
|
||||
/// <param name="id">Номер сервера в списке серверов.</param>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
public bool RemoveServerById(int id)
|
||||
{
|
||||
if (servers.Count == 0 || id >= servers.Count || id < 0)
|
||||
public bool RemoveServer(int id)
|
||||
{
|
||||
if (_servers.Count == 0 || id >= _servers.Count || id < 0)
|
||||
{
|
||||
log.Warn("Server not removed: Id incorrect or list server are empty.");
|
||||
return false;
|
||||
}
|
||||
log.Trace("Server id=" + id.ToString() + ";name=" + servers[id].name + ";ip=" + servers[id].ip + ";port=" + servers[id].port.ToString() + ";dir=" + servers[id].dir + "; removed.");
|
||||
servers.RemoveAt(id);
|
||||
log.Trace("Server id=" + id.ToString() + ";name=" + _servers[id].name + ";ip=" + _servers[id].ip + ";port=" + _servers[id].port.ToString() + ";dir=" + _servers[id].dir + "; removed.");
|
||||
_servers.RemoveAt(id);
|
||||
UseServer = 0;
|
||||
return true;
|
||||
}
|
||||
/// <summary>Удаление сервера из списка серверов по его названию.</summary>
|
||||
/// <param name="name">Название сервера.</param>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
public bool RemoveServerByName(string name)
|
||||
{
|
||||
var id = servers.FindIndex(x => x.name == name);
|
||||
if (id == -1)
|
||||
{
|
||||
log.Warn("Server not removed: Name incorrect or server not exist.");
|
||||
return false;
|
||||
}
|
||||
return RemoveServerById(id);
|
||||
}
|
||||
/// <summary>Чтение конфигурационнного файла и установка параметров по умолчанию.</summary>
|
||||
private void Config()
|
||||
{
|
||||
string jsonString;
|
||||
var confFile = Path.Combine(confDir, "config.json");
|
||||
try
|
||||
{
|
||||
jsonString = File.ReadAllText(confFile);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
log.Warn(e, "Can't read config file from " + confDir + ".");
|
||||
return;
|
||||
}
|
||||
var conf = (JObject)JsonConvert.DeserializeObject(jsonString);
|
||||
if (!conf.HasValues && !conf["servers"].HasValues && conf["servers"].Type != JTokenType.Array)
|
||||
{
|
||||
log.Warn("Doesn't exist \"servers\" object in config file.");
|
||||
return;
|
||||
}
|
||||
var count = -1;
|
||||
foreach (var s in conf["servers"])
|
||||
{
|
||||
count++;
|
||||
var name = (s["name"].Type == JTokenType.String) ? (string)s["name"] : "default";
|
||||
var ip = (s["ip"].Type == JTokenType.String) ? (string)s["ip"] : "";
|
||||
var port = (s["port"].Type == JTokenType.Integer) ? (int)s["port"] : -1;
|
||||
var dir = (s["dir"].Type == JTokenType.String) ? (string)s["dir"] : "";
|
||||
var res = false;
|
||||
if (GetServerIdByName(name) == -1)
|
||||
res = AddServer(name, ip, port, dir);
|
||||
else
|
||||
res = ChangeServerByName(name, ip, port, dir);
|
||||
if (!res)
|
||||
log.Trace("Can't add or change server #" + count + " from conf file.");
|
||||
}
|
||||
//init vdp
|
||||
for (var i = 0; i < 49; i++)
|
||||
vdpList.Add(new (i, i == 0 ? "Общие" : "Печь " + i.ToString("D2")));
|
||||
for (var i = 91; i < 95; i++)
|
||||
vdpList.Add((i, "Печь " + i.ToString("D2")));
|
||||
//init analog
|
||||
var tmpvdp = new List<int>();
|
||||
foreach (var v in vdpList) tmpvdp.Add(v.num);
|
||||
confAnalog = Configuration.InitAnalogList(Path.Combine(confDir, "analog"), tmpvdp.ToArray());
|
||||
}
|
||||
//#################
|
||||
|
||||
//Переменные
|
||||
|
||||
|
||||
//Геттеры и сеттеры
|
||||
|
||||
//Функции
|
||||
|
||||
|
||||
/// <summary>Создание экземпляра класса.</summary>
|
||||
public STPClient()
|
||||
{
|
||||
@@ -241,41 +191,16 @@ namespace DataClient
|
||||
Config();
|
||||
}
|
||||
|
||||
public TechCycle[] GetTechCycles(int vdp, DateTime tS, DateTime tE)
|
||||
public TechCycle[] GetTechCyclesList(int vdp, DateTime tS, DateTime tE)
|
||||
{
|
||||
//Use File with ID = 3
|
||||
var res = new List<TechCycle>();
|
||||
return res.ToArray();
|
||||
}
|
||||
public Analog[] GetAnalogs(int vdp, DateTime tS, DateTime tE)
|
||||
|
||||
public (ConfAnalog conf, Analog[] list)[] GetAnalogsList(int vdp, DateTime tS, DateTime tE, int[] idA = null)
|
||||
{
|
||||
var res = new List<Analog>();
|
||||
var net = new NETClient(servers[serverDefault].ip, servers[serverDefault].port);
|
||||
if (!net.Connect()) return Array.Empty<Analog>();
|
||||
var s1 = new List<Task<byte[]>>();
|
||||
for (var d = new DateTime(tS.Year, tS.Month, tS.Day); d.Year <= tE.Year && d.Month <= tE.Month && d.Day <= tE.Day; d = d.AddDays(1))
|
||||
{
|
||||
var t = new Task<byte[]>(() => net.Full_Download(d, vdp, 01));
|
||||
t.Start();
|
||||
s1.Add(t);
|
||||
}
|
||||
var s2 = new List<Task<Analog[]>>();
|
||||
while(s1.Count > 0)
|
||||
{
|
||||
for(var i = 0; i < s1.Count; i++)
|
||||
if (s1[i].IsCompleted)
|
||||
{
|
||||
var t = new Task<Analog[]>( () => {
|
||||
if (!s1[i].IsCompletedSuccessfully)
|
||||
return new Analog[0];
|
||||
return s1[i].Result
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return res.ToArray();
|
||||
return Array.Empty<(ConfAnalog conf, Analog[] list)>();
|
||||
}
|
||||
|
||||
|
||||
|
@@ -8,6 +8,5 @@ namespace DataClient
|
||||
{
|
||||
static class StructConverter
|
||||
{
|
||||
Analog[]
|
||||
}
|
||||
}
|
||||
|
@@ -4,15 +4,365 @@
|
||||
"add": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "Test",
|
||||
"short_name": "Test",
|
||||
"measure": "kg",
|
||||
"mul": 1,
|
||||
"min": -100,
|
||||
"max": 100,
|
||||
"zero": 0,
|
||||
"logarithm": false,
|
||||
"byteId": [ 1, 12, 3 ]
|
||||
"name": "<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
"sname": "I <20>",
|
||||
"measure": "<EFBFBD><EFBFBD>",
|
||||
"mul": 0.1,
|
||||
"byteId": [ 0, 1 ]
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
"sname": "U <20>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [ 2, 3 ]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "I <20><>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [4,5]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "U <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "U <20><>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [6,7]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "I <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [8,9]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "U <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "U <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [10,11]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "I <20><>",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [12,13]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><>.<2E><><EFBFBD>",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [14,15]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><>.<2E><>",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [16,17]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><><EFBFBD>-<2D><><EFBFBD>",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [18,19]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><>",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [20,21]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.1",
|
||||
"sname": "S <20><>",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [22,23]
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "S <20><>",
|
||||
"measure": "<22><>",
|
||||
"byteId": [24,25]
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"measure": "<22><><EFBFBD>.<2E><>.<2E><>",
|
||||
"mul": -1,
|
||||
"byteId": [26,27]
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "R <20><>-<2D><>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [28,29]
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "R <20><>-<2D><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [30,31]
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
"sname": "Q <20>.<2E><>",
|
||||
"measure": "<22>^3/<2F>",
|
||||
"byteId": [ 32, 33 ]
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD>.<2E><><EFBFBD>.",
|
||||
"mul": 0.01,
|
||||
"byteId": [34,35]
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>",
|
||||
"sname": "<22><><EFBFBD>.<2E><><EFBFBD>.",
|
||||
"mul": 0.1,
|
||||
"byteId": [36,37]
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "Q<>. <20><>.",
|
||||
"measure": "<22>^3/<2F>",
|
||||
"mul": 0.01,
|
||||
"byteId": [38,39]
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "Q<>. <20><>.",
|
||||
"measure": "<22>^3/<2F>",
|
||||
"mul": 0.01,
|
||||
"byteId": [40,41]
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.+1,5",
|
||||
"sname": "P <20>.<2E><>",
|
||||
"measure": "<22><><EFBFBD>/<2F><>^2",
|
||||
"mul": 0.01,
|
||||
"byteId": [42,43]
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "Q<>. <20><><EFBFBD>.",
|
||||
"measure": "<22>^3/<2F>",
|
||||
"mul": 0.01,
|
||||
"byteId": [44,45]
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>)",
|
||||
"sname": "I <20>.<2E><><EFBFBD> <20><><EFBFBD>",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [58,59]
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "<22><><EFBFBD>-<2D><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD>-<2D><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [62,63]
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "<22><><EFBFBD>-<2D><><EFBFBD>. <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD>-<2D><><EFBFBD><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [64,65]
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><>.",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [66,67]
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "t <20><><EFBFBD>.",
|
||||
"measure": "<22><>.<2E>",
|
||||
"byteId": [68,69]
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "Q<>. <20><><EFBFBD>.",
|
||||
"measure": "<22>^3/<2F>",
|
||||
"mul": 0.01,
|
||||
"byteId": [70,71]
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD>. <20><><EFBFBD>.",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [72,73]
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.)",
|
||||
"sname": "I <20>.<2E><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>.",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [74,75]
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1200",
|
||||
"sname": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1200",
|
||||
"measure": "<22><>.<2E><>.<2E><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [78,79]
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-18,75",
|
||||
"sname": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-18,25",
|
||||
"measure": "<22><>.<2E><>.<2E><>",
|
||||
"mul": 0.001,
|
||||
"byteId": [80,81]
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "P <20>.<2E><><EFBFBD><EFBFBD>.",
|
||||
"measure": "<22><><EFBFBD>/<2F><>^2",
|
||||
"mul": 0.1,
|
||||
"byteId": [82,83]
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "P <20>.<2E><><EFBFBD><EFBFBD>.",
|
||||
"measure": "<22><><EFBFBD>/<2F><>^2",
|
||||
"byteId": [84,85]
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>)",
|
||||
"sname": "<22><><EFBFBD>.I, <20><><EFBFBD>",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [86,87]
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD>.<2E><>.<2E><><EFBFBD>.<2E><>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.01,
|
||||
"byteId": [88,89]
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ARPW",
|
||||
"sname": "I <20><>. ARPW",
|
||||
"measure": "<22>",
|
||||
"mul": 0.01,
|
||||
"byteId": [90,91]
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>",
|
||||
"measure": "<22><><EFBFBD>",
|
||||
"mul": 0.1,
|
||||
"byteId": []
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><> 1 <20><><EFBFBD>.",
|
||||
"sname": "U <20><>. 1<><31><EFBFBD>, <20>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [92,93]
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1",
|
||||
"sname": "I <20><><EFBFBD>1 <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"byteId": [94,95]
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2",
|
||||
"sname": "I <20><><EFBFBD>2 <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"byteId": [96,97]
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3",
|
||||
"sname": "I <20><><EFBFBD>3 <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"byteId": [98,99]
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"sname": "<22><><EFBFBD><EFBFBD>. <20><><EFBFBD>",
|
||||
"measure": "<22><>",
|
||||
"mul": 0.1,
|
||||
"byteId": [100,101]
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>p",
|
||||
"mul": 0.01,
|
||||
"byteId": [102,103]
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"name": "<22><><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>i",
|
||||
"mul": 0.01,
|
||||
"byteId": [104,105]
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"byteId": [106,107]
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"name": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> U <20><><EFBFBD>",
|
||||
"measure": "<22>",
|
||||
"mul": 0.1,
|
||||
"byteId": [108,109]
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
a35e80ad0f3cac2804cec2e84481a2b816e18b57
|
||||
87bece5d0c6996144f4c9f6e3331fc77f0523159
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user