Помощь      Поиск      Пользователи      BanList


 Страниц (1): [1]   

> Без описания
alexz60
Отправлено: 21 Апреля, 2017 - 16:45:59
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2017  





Читаю описание функции ReadRaw

"IncludeBounds – параметр определяющий, включать ли в выборку данных
граничные точки (тип bool, значение true – включать"

А на самом деле, если true, то если не нашел значение, то читает первое ближайшее
Например я задавал, читать данные за 10 секунд от текущего момента (тег изменяется каждую секунду). И вижу при старте приложения, когда нет данных за 10 секунд от текущего момента, читается последнее до данного момента значение. То есть граничная точка - это ближайшая к данной границе?
 
 Top
Support
Отправлено: 24 Апреля, 2017 - 11:31:09
Post Id



Администратор
Full Member


Покинул форум
Сообщений всего: 185
Дата рег-ции: Сент. 2010  





Для чтения данных из тренда Вы используете функцию HistoricalServiceHelper.ReadRaw(Client, "Объект", "ВА", "ТЗ", null, start, end, true). Последним аргументом задается учитывать границы при чтении или нет. При указании включения границ, если точка попадает на границу интервала, то она будет добавлена в выборку. Иногда удобно немного расширить выборку на 1мск, чтобы гарантировано получить точку. Рассмотрим небольшой пример. Предположим тренде есть данные (значение, метка времени) за сегодня:
0,142353450945743 24.04.2017 10:00:00
0,366081327836067 24.04.2017 11:00:00
0,241190170050222 24.04.2017 12:00:00
0,860418572025568 24.04.2017 13:00:00
0,780246515190344 24.04.2017 13:30:00

DateTime start = new DateTime(2017, 4, 24, 7, 0, 0); // 10:00 MSK
DateTime end = new DateTime(2017, 4, 24, 10, 30, 0); // 13:30 MSK

Запрос данных с границами приведет к результату выборки всех 5 точек на данном интервале.
Если указать «не включать» границы, то при таком интервале запроса будет следующий результат:

0,142353450945743 24.04.2017 10:00:00
0,366081327836067 24.04.2017 11:00:00
0,241190170050222 24.04.2017 12:00:00
0,860418572025568 24.04.2017 13:00:00

Прикладываем маленький пример с использованием функции HistoricalServiceHelper.ReadRaw, чтобы можно было попробовать выборку данных на ваших данных.

Скачать файл: ПроектReadTest.zip
Скачан раз: 97
 
 Top
alexz60
Отправлено: 26 Апреля, 2017 - 12:43:33
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2017  





 Support пишет:
Для чтения данных из тренда Вы используете функцию HistoricalServiceHelper.ReadRaw(Client, "Объект", "ВА", "ТЗ", null, start, end, true). Последним аргументом задается учитывать границы при чтении или нет. При указании включения границ, если точка попадает на границу интервала, то она будет добавлена в выборку. Иногда удобно немного расширить выборку на 1мск, чтобы гарантировано получить точку. Рассмотрим небольшой пример. Предположим тренде есть данные (значение, метка времени) за сегодня:
0,142353450945743 24.04.2017 10:00:00
0,366081327836067 24.04.2017 11:00:00
0,241190170050222 24.04.2017 12:00:00
0,860418572025568 24.04.2017 13:00:00
0,780246515190344 24.04.2017 13:30:00

DateTime start = new DateTime(2017, 4, 24, 7, 0, 0); // 10:00 MSK
DateTime end = new DateTime(2017, 4, 24, 10, 30, 0); // 13:30 MSK

Запрос данных с границами приведет к результату выборки всех 5 точек на данном интервале.
Если указать «не включать» границы, то при таком интервале запроса будет следующий результат:

0,142353450945743 24.04.2017 10:00:00
0,366081327836067 24.04.2017 11:00:00
0,241190170050222 24.04.2017 12:00:00
0,860418572025568 24.04.2017 13:00:00

Прикладываем маленький пример с использованием функции HistoricalServiceHelper.ReadRaw, чтобы можно было попробовать выборку данных на ваших данных.


А у меня получается, если включать границы, и задать (по Вашим данным) границы 10:59 - 13:30, то 1-я прочитанная запись будет 10:00
 
 Top
alexz60
Отправлено: 27 Апреля, 2017 - 13:26:55
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2017  





Извините, я неправильно сказал.
При параметре bound = true, получается следующая ситуация:
Если задан интервал времени внутри и позже которого нет данных, то читает одно значение, которое наиболее близко к начальной границе. Например в нашей ситуации начальное время = 20:00, конечное = 21:00, прочтем одно значение за 13:30. А это согласитесь, немного неожиданно.
 
 Top
Support
Отправлено: 02 Мая, 2017 - 14:18:14
Post Id



Администратор
Full Member


Покинул форум
Сообщений всего: 185
Дата рег-ции: Сент. 2010  





Алгоритм выборки данных работает именно так, как вы описали, при отсутствующих данных на интервале и указанном включении границ. По какой причине было реализовано именно так сейчас сказать довольно сложно, но никто не жаловался на некорректность данного алгоритма. Поскольку алгоритм чтения данных является общим для всей подсистемы трендирования, то мы не можем в него вносить никаких изменений. Поэтому Вам следует принять как данность такое поведение и обработать лишнюю с вашей точки зрения точку после обращения к хранилищу, к тому же все это делается одной проверкой на наличие найденной точки и положения ее метки времени относительно границы интервала.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SCADA/HMI DataRate »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by ExBB FM 1.0 Final