Тарировка (сsv, wlp)
Ссылка: https://tracktools.ru/tools/taring
Краткое описание
Инструмент создан для расчёта тарировочных таблиц и генерации из них csv и wlp файлов.
Создание датчиков происходит посредством разделения тарировочных таблиц на виртуальные датчики:
Такой способ может быть полезен при обработке тарировок баков сложных форм.
Инструмент применим только для систем мониторинга которые поддерживают формулы в датчиках.
Элементы интерфейса:
1 - Имя текущего файла тарировки
2 - Формула текущей тарировки
3 - Визуальное представление разделения датчиков
4 - Выбор файла тарировки (доступно только зарегистрированным пользователям)
5 - Загрузка файла для обработки
6 - Скачать результат в формате wlp (объект wialon)
7 - Скачать результат как отдельные csv/txt файлы (загрузка архива zip)
8 - Графики отдельных датчиков в текущей тарировке
9 - Содержимое файлов (файлов, которые скачиваются при загрузке архива zip)
10 - Исходный текст тарировки (доступен для редактирования зарегистрированным пользователям)
11 - График по формуле - расчёт значений по формуле при возрастающих значениях ДУТ.
12 - Текст файла wlp (загружаемого по кнопке "Скачать wlp")
Файлы с тарировкой загружаются по клику на кнопку Загрузить файл (5).
Незарегистрированным пользователям доступен только этот способ.
Зарегистрированные пользователи могут добавлять тарировки через кнопку Загрузить файл, а также создавать их без загрузки, в кабинете пользователя, во вкладке "Файлы тарировок":
Зарегистрированные пользователи также могут редактировать и удалять файлы тарировок.
У незарегистрированных нет такой возможности, и в случае обновления страницы после создания тарировки данные на странице не сохранятся.
Однако ссылка на созданную тарировку будет "жить" ещё 60 минут, если её заблаговременно скопировать с кнопки "Скачать wlp" или "Скачать архив".
Структура файла:
формат: csv или txt
разделитель: ";" (точка с запятой)
1-я колонка - литраж тарировки
2-я колонка - первый ДУТ
3-я колонка - второй ДУТ
4-я колонка - третий ДУТ
...и т.д.
Разрешённые символы: 0-9 цифры, . (точка) ; (точка с запятой) и перенос строки.
Пошаговый пример обработки файла
Для примера возьмём файл который видят все незарегистрированные пользователи, переходящие на страницу инструмента:
0;1;1
20;200;1
40;400;1
60;600;1
80;800;1
100;1000;1
120;1200;1
140;1200;1400
160;1200;1600
180;1200;1800
200;1200;2000
220;1200;2200
240;1200;2400
260;2600;2600
280;2800;2800
300;3000;3000
320;3200;3200
340;3400;3400
360;3600;3600
380;3800;3800
400;4000;4000
405;4050;4050
Как видно, это просто csv таблица.
Первая колонка должна быть литражом тарировки, а последующие - тарировками ДУТов, в правильном порядке (2-я колонка таблицы = первый ДУТ и т.д.).
Тарировка для демонстрации, не с реального транспортного средства. Бак в этом примере П-образной формы, и датчики установлены равномерно в обе половины бака.
Поэтому при заполнении бака сначала наполняется одна его часть, и достигнув определённого объёма топливо начинает переливаться в другую половину бака.
Из-за этого в тарировке образовываются отрезки где датчики не реагируют на заправляемое или расходуемое топливо, т.к. в данный момент топливо в них находится на одном уровне.
Что происходит при обработке данной тарировки:
В самом начале обработки удалятся все повторяющиеся значения - для расчёта нет смысла их оставлять.
0;1;
20;200;
40;400;
60;600;
80;800;
100;1000;
120;1200;
140;;1400
160;;1600
180;;1800
200;;2000
220;;2200
240;;2400
260;2600;2600
280;2800;2800
300;3000;3000
320;3200;3200
340;3400;3400
360;3600;3600
380;3800;3800
400;4000;4000
405;4050;4050
Если датчик начинается со значения которое в дальнейшем повторяется (единица во втором ДУТе в нашем случае), то эти
значения стираются полностью, но если повторяющиеся значения находятся в середине тарировки (как 1200 в этой тарировке),
то первое из них остаётся для расчёта, и стираются только все последующие.
Далее перебираются все значения чтобы определить где начинаются и кончаются датчики:
0 | 1 |
20 | 200 |
40 | 400 |
60 | 600 |
80 | 800 |
100 | 1000 |
120 | 1200 |
---------------------
140 | | 1400
160 | | 1600
180 | | 1800
200 | | 2000
220 | | 2200
240 | | 2400
---------------------
260 | 2600 | 2600
280 | 2800 | 2800
300 | 3000 | 3000
320 | 3200 | 3200
340 | 3400 | 3400
360 | 3600 | 3600
380 | 3800 | 3800
400 | 4000 | 4000
405 | 4050 | 4050
В этом моменте мы видим 6 частей данной тарировки, две из которых пустые.
Проходим по всем датчикам, убирая пустые и именуя по порядку все оставшиеся, попутно составляя таблицы "значения ДУТа : литры".
Имена датчиков по умолчанию будут DUT_x для физических и FUEL_x для виртуальных, где x - их порядковый номер.
DUT_1 - FUEL_1
{
1 : 0
200 : 20
400 : 40
600 : 60
800 : 80
1000 : 100
1200 : 120
}
DUT_1 - FUEL_2
{
2600 : 260
2800 : 280
3000 : 300
3200 : 320
3400 : 340
3600 : 360
3800 : 380
4000 : 400
4050 : 405
}
DUT_2 - FUEL_3
{
1400 : 140
1600 : 160
1800 : 180
2000 : 200
2200 : 220
2400 : 240
}
DUT_2 - FUEL_4
{
2600 : 260
2800 : 280
3000 : 300
3200 : 320
3400 : 340
3600 : 360
3800 : 380
4000 : 400
4050 : 405
}
В процессе этой обработки также создаётся формула, которая складывает все наши FUEL_x подряд, начиная с самого верха, однако если два и более FUEL_x находятся в одном диапазоне литража, (как в этом примере FUEL_2 и FUEL_4) формула склдывает их и делит на их количество, т.е. находит среднее значение:
[FUEL_1]+[FUEL_3]+([FUEL_2]+[FUEL_4])/const2
Так как все датчики FUEL_x складываются, нельзя оставлять полное соответствие данных ДУТа и литража в каждом из них, поэтому необходимо вычесть из каждого датчика максимальное значение предыдущего. В итоге получаем такую картину:
DUT_1 - FUEL_1
{
1 : 0
200 : 20
400 : 40
600 : 60
800 : 80
1000 : 100
1200 : 120
}
DUT_1 - FUEL_2
{
2600 : 20
2800 : 40
3000 : 60
3200 : 80
3400 : 100
3600 : 120
3800 : 140
4000 : 160
4050 : 165
}
DUT_2 - FUEL_3
{
1400 : 20
1600 : 40
1800 : 60
2000 : 80
2200 : 100
2400 : 120
}
DUT_2 - FUEL_4
{
2600 : 20
2800 : 40
3000 : 60
3200 : 80
3400 : 100
3600 : 120
3800 : 140
4000 : 160
4050 : 165
}
В целом тарировка готова, однако мы оставили возможность системе мониторинга дать датчику значение выше того, которое у него есть по таблице, а также ниже того что имеется. Таким образом, если наш FUEL_3 примет значение 800, при своём минимальном 1400, он попросту уйдёт в минус. Или приняв значение 3200 уйдёт сильно в плюс, т.к. его максимальное значение 2400.
Поэтому вновь проходим по всем виртуальным датчикам и расставляем им лимиты - границы, за которые они не смогут выйти:
DUT_1 - FUEL_1
{
1 : 0
200 : 20
400 : 40
600 : 60
800 : 80
1000 : 100
1200 : 120
1201 : 120
}
DUT_1 - FUEL_2
{
2399 : 0
2400 : 0
2600 : 20
2800 : 40
3000 : 60
3200 : 80
3400 : 100
3600 : 120
3800 : 140
4000 : 160
4050 : 165
}
DUT_2 - FUEL_3
{
1199 : 0
1200 : 0
1400 : 20
1600 : 40
1800 : 60
2000 : 80
2200 : 100
2400 : 120
2401 : 120
}
DUT_2 - FUEL_4
{
2399 : 0
2400 : 0
2600 : 20
2800 : 40
3000 : 60
3200 : 80
3400 : 100
3600 : 120
3800 : 140
4000 : 160
4050 : 165
}
Конечный лимит устанавливается всем датчикам кроме последних датчиков в ДУТе, в нашём случае их получили FUEL_1 и FUEL_3.
Начальный лимит устанавливается все датчикам кроме первых датчиков в ДУТе, в нашём случае их получили FUEL_2, FUEL_3 и FUEL_4.
Далее из получившегося формируется wlp-файл для скачивания и файлы для загрузки в виде zip-архива.