Объект DataQueue - специальный объект, доступный в контексте исполнения программы JavaScript на стороне сервера jCjS.
Объект DataQueue предназначен для создания очереди данных, и вывод их в формате JSON для отображения данных на графиках в браузере.
new SerialTaskWrap() Создать объект
// Создать объект
var queue = new DataQueue();
// Сконфигурить объект
with(queue)
{
//---------------------------------------------------------
//----- очередь данных
//---------------------------------------------------------
description = 'Значение на входе АЦП'; // Описание данных
physicalUnit = 'мВ';
intervalSec = 3600; // Ширина очереди
doCalcRegress = false; // рассчитать регрессионную модель, если расчет регресса остановлен,
// то возвращаются старые значения, рассчитанные до остановки расчета
intervalRegressSec = 0; // считать параметры регрессионной модели за такой период
minPointsForRegress = 2; // минимальное количество точек для расчета регресса
autoCalcExtremum = false; // Пересчитывать автоматом макс и мин (напрягает сервер. Лучше вынести этот расчет на сторону клиента)
calcStatistic = false; // Расчет Дисперсии и СКО
precision = 2; // До скольких знаков округлять входные (и выходные в JSON) значения
medianFiltrOrder = 0; // использовать входной медианный фильтр, если его порядок больше 0,
// и если устанавливаемый порядок четное число, порядок будет дополнен до нечетного >= 3
useRangeFiltr = false; // использовать входной диапазонный фильтр
minRangeFiltr = 0; // Минимальное значение фильтра
maxRangeFiltr = 0; // Максимальное значение фильтра
limAlg = 'none'; // алгоритм, по которому будут вычислятся точки для графика (работает только если включен limSec)
// none - отключен
// max - будут выбраны максимумы на отрезках
// min - будут выбраны минимумы ...
// avg - будут усреднены значения ...
limSec = 0; // ограничение выходного количества точек (влияет на максимальное кол-во точек, которое будет на графике)
// Вся очередь будет разделена на отрезки по limSec, в которых будет применяться алгоритм limAlg
// С помощью этого механизма можно создавать широкие по времени очереди в которую поступают очень часто данные
}
// добавить значение в очередь
queue.append(15.3)
Пример использования:
// Создать объект var queue = new DataQueue(); //свойство параметра чтение/запись: var propVal = queue.propName; // чтение propVal = 'newValue' queue.propName = propVal; // запись
String queue.description Чтение/запись
Текстовое описание физической величины
queue.description = 'Значение на входе АЦП';
String queue.physicalUnit Чтение/запись
Текстовое описание единицы измерения
queue.physicalUnit = 'мВ';
int queue.intervalSec Чтение/запись
ВременнАя ширина очереди в секундах
queue.intervalSec = 3600;
String queue.limAlg Чтение/запись
Алгоритм, по которому будут вычислятся точки для графика (работает только если включен limSec)
Возможны варианты:
queue.limAlg = 'max'; queue.limSec = 60;
double queue.limSec Чтение/запись
Ограничение выходного количества точек (влияет на максимальное кол-во точек, которое будет на графике)
Вся очередь будет разделена на отрезки по limSec, в которых будет применяться алгоритм limAlg
С помощью этого механизма можно создавать широкие по времени очереди в которую поступают очень часто данные
queue.limAlg = 'max'; queue.limSec = 60;
bool queue.expo Чтение/запись
Управление режимом вывода данных функцией jsonRevisionObj()
Если присвоить значение true, то значения очереди будут генерироваться
в экспонентиальном формате 1.234e+01
double queue.currentTimeSec Чтение
Текущее время в секундах от 1970.01.01 00:00:00
post.log('прошло времени с 1970 года: ' + queue.currentTimeSec + ' сек.');
String queue.currentTimeTxt Чтение
Текущее время текстом yyyy-MM-dd-hh:mm:ss.zzz
post.log(queue.currentTimeTxt);
int queue.length Чтение
int queue.size Чтение
Количество элементов в массиве очереди
post.log('в массиве очереди ' + queue.length + ' элементов');
double queue.lastTime Чтение
Время последнего значения (в секундах от 1970.01.01)
double queue.firstTime Чтение
Время самого старого значение (в секундах от 1970.01.01)
double queue.lastValue Чтение
Последнее значение параметра
double queue.firstId Чтение
Идентификатор первого элемента данных
double queue.lastId Чтение
Идентификатор последнего элемента данных
double queue.intervalRegressSec Чтение
считать параметры регрессионной модели за такой период
int queue.minPointsForRegress Чтение/запись
минимальное количество точек для расчета регресса
int queue.medianFiltrOrder Чтение/запись
использовать входной медианный фильтр, если его порядок больше 0,
и если устанавливаемый порядок четное число, оно будет дополнено до нечетного >= 3
double queue.regressA Чтение
Регресс A (при чтении производится расчет регресса)
double queue.regressK Чтение
Регресс K (при чтении производится расчет регресса)
bool queue.autoCalcExtremum Чтение/запись
Пересчитывать автоматом Min и Max (напрягает сервер. Лучше вынести этот расчет на сторону клиента)
double queue.valMin Чтение
Минимальное значение в очереди
double queue.valMax Чтение
Максимальное значение в очереди
bool queue.calcStatistic Чтение/запись
Пересчитывать автоматом Дисперсию и СКО (напрягает сервер. Лучше вынести этот расчет на сторону клиента)
double queue.valAvg Чтение
Среднее значение в очереди
double queue.valSKO Чтение
Среднее квадратичное отклонение в очереди
не имеет
Пример использования:
var queue = new DataQueue() // Функция (возвращает некое значение) var arg1 = 12; var arg2 = 'text' + '/' + 'xml'; var retVal = queue.function(arg1, arg2, .....);
void queue.append(double v, dt = new Date()) процедура
Добавить значение в очередь (старые значение удаляются и производится расчет Мин, Макс, Среднее, СКО и Регресс)
Если используется второй агргумент, то программист берет на себя
ответственноять за его корректное значение (все добавляемые знячения времени должны увеличиваться).
queue.append(15.3);
void queue.clear() процедура
Очистка всей очереди
queue.clear();
Object queue.last() Функция
Взять последнее добавленое значение из очереди
(если используется limAlg, то выданное значение будет обработано алгоритмом)
var last_point = queue.last(); // возвратит js объект {time: 110565665.43, value: 15.3}
double queue.moving_val(intrvl_sec, String mode = "max") Функция
Скользящее значение за период intrvl_sec режим mode = 'min' 'max' 'avg'
var min_val = queue.moving_val(30, 'min'); // взять минимальное значение за интервал 30 сек var max_val = queue.moving_val(30, 'max'); // взять максимальное значение за интервал 30 сек var avg_val = queue.moving_val(30, 'avg'); // взять скользящее среднее за интервал 30 сек
int queue.moving_count(intrvl_sec) Функция
количество значений в скользящем за период intrvl_sec
var mov_vals = queue.moving_count(30);
var min_val = queue.moving_val(30, 'min'); // взять минимальное значение за интервал 30 сек
var max_val = queue.moving_val(30, 'max'); // взять максимальное значение за интервал 30 сек
var avg_val = queue.moving_val(30, 'avg'); // взять скользящее среднее за интервал 30 сек
post.log('count=' + mov_vals + ': min=' + min_val + ' max=' + max_val + ' avg=' + avg_val);
bool queue.exist(id) Функция
Проверить наличие элемента по идентификатору
post.log('в массиве очереди элемент с id=562 ' + (queue.exist(562) ? 'существует' : 'отсутствует'));
double queue.value(id) Функция
Взять значение элемента по идентификатору
post.log('Значение элемента с id=562: ' + queue.value(562) );
double queue.time(id) Функция
Взять время добавления элемента по идентификатору
post.log('элемент с id=562 был добавлен в очередь: ' + queue.time(562) );
double queue.currentTimeSec(dt = new Date()) Функция
Расчитать количество сек, прошедших с 1970.01.01 00:00:00
аргументом может служит JS объект Date. Если вызвать без агргумента,
то будет расчитано кол-во сек. на текущий момент.
post.log('прошло времени с 1970 года: ' + queue.currentTimeSec() + ' сек.');
String queue.jsonRevision(idLast) Функция
Сформировать JSON очереди с элементами, идентификатор которых старше idLast
если указан 0 или несуществующий элемент - будет отдана вся очередь
var json_str = queue.jsonRevision(0);
Object queue.jsonRevisionObj(idLast, precision = 2, mass_only = false) Функция
Сформировать JS объект очереди с элементами, идентификатор которых старше idLast
Аргументы:
var json_obj = queue.jsonRevisionObj(0); // затем преобразовать в JSON var json_str = jsext.stringify(json_obj, 0, 2);
void queue.resetMedianFiltr() процедура
сброс очереди медианного фильтра
void queue.resetCalcRegress(double waitStartTime) процедура
сброс рассчета регресса, удержание старого значения, начать расчет спустя waitStartTime сек