Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Работа системы архивирования данных  (Прочитано 4986 раз)

atg

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Здравствуйте.
Версия 2.2. Проект запущен без клиента (через сервер). Есть нарекания к работе системы архивации.

1. Есть переменные с типом архива "комбинированный". вот значения в базе
Код
| 13 | 2017-03-15 06:54:01.157 |     0 |       1 |
| 13 | 2017-03-15 06:54:01.147 |     1 |       1 |
| 13 | 2017-03-15 06:41:21.563 |     1 |       1 |
| 13 | 2017-03-15 06:41:21.553 |     0 |       1 |
| 13 | 2017-03-15 06:04:44.141 |     0 |       1 |
| 13 | 2017-03-15 06:04:44.131 |     1 |       1 |
| 13 | 2017-03-15 05:55:10.391 |     1 |       1 |
| 13 | 2017-03-15 05:55:10.381 |     0 |       1 |
| 13 | 2017-03-15 05:04:41.766 |     0 |       1 |
| 13 | 2017-03-15 05:04:41.756 |     1 |       1 |
| 13 | 2017-03-15 04:50:16.594 |     1 |       1 |
| 13 | 2017-03-15 04:50:16.584 |     0 |       1 |
| 13 | 2017-03-15 03:54:43.891 |     0 |       1 |
| 13 | 2017-03-15 03:54:43.881 |     1 |       1 |
| 13 | 2017-03-15 03:41:59.157 |     1 |       1 |
| 13 | 2017-03-15 03:41:59.147 |     0 |       1 |
| 13 | 2017-03-15 03:02:12.766 |     0 |       1 |
| 13 | 2017-03-15 03:02:12.756 |     1 |       1 |
| 13 | 2017-03-15 02:50:57.110 |     1 |       1 |

Зачем-то перед измененным состоянием дублируется предыдущее.

2. Почему игнорируется интервал архивирования из настроек? Стоит например 10 сек., а для комбинированной переменной запись происходит через час.

3. Я так понимаю сервер не пишет сразу данные в БД, а кэширует данные и пишет их по наступлению какого-то события. Это может привести к потере данных в случае аварийного завершения сервера. Не зафиксируется даже значение на момент старта проекта. Например (для комбинированной переменной)  наблюдал такую ситуацию:
16:00 (условно) переменная меняет значение 0->1. Происходит запись.
16:01 выключение проекта.
16:02 изменения значение переменной 1->0 (не через скаду)
16:03 старт проекта.
17:00 (прошел почти час) аварийное завершение сервера.
В итоге в БД нет ни одного значения начиная со старта сервера. Даже не зафиксировано значение переменной с quality = 2.

4. Пару раз проскочила такая ошибка. Между 16:04 и 15:41 была остановка проекта (через кнопку стоп на сервере), но значения переменной с quality = 3 записано не было:
Код
| 16 | 2017-03-15 16:45:40.603 |     0 |       3 |
| 16 | 2017-03-15 16:04:20.511 |     0 |       2 |
| 16 | 2017-03-15 15:41:16.548 |     0 |       1 |
| 16 | 2017-03-15 15:41:16.538 |     1 |       1 |
« Изменён: 17 Марта 2017, 15:49:44 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Работа системы архивирования данных
« Ответ #1 : 15 Марта 2017, 15:56:16 »
Здравствуйте.

Цитировать
Зачем-то перед измененным состоянием дублируется предыдущее.
У тренда выбран тип отрисовки "ступенчатый"? Судя по всему так и есть, предыдущее значение дублируется для создания ступенек на тренде.

Цитировать
2. Почему игнорируется интервал архивирования из настроек? Стоит например 10 сек., а для комбинированной переменной запись происходит через час.
Переменная долго находится в одном состоянии? Если да, то скада не будет добавлять одно и то же значение каждые 10 сек, т.к. это ничего не изменит ни на тренде, ни при расчетах с учетом времени.

Цитировать
Я так понимаю сервер не пишет сразу данные в БД, а кэширует данные и пишет их по наступлению какого-то события. Это может привести к потере данных в случае аварийного завершения сервера. Не зафиксируется даже значение на момент старта проекта.
Да, данные накапливаются в буферы и сбрасываются на жесткий диск каждые 5 минут (для основного слоя), поэтому в случае аварийного потеряется не более 5 мин. основного слоя. Минутный слой сбрасывается каждую минуту, часовой - час, суточный - день. Для часового и суточного слоев делается резервная копия каждые 10 минут и в случае сбоя данные из резерва будут восстановлены после очередного запуска сервера.

Цитировать
была остановка проекта (через кнопку стоп на сервере), но значения переменной с quality = 3 записано не было
Проверим.

atg

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Работа системы архивирования данных
« Ответ #2 : 17 Марта 2017, 15:10:29 »
Цитировать
2. Почему игнорируется интервал архивирования из настроек? Стоит например 10 сек., а для комбинированной переменной запись происходит через час.
Переменная долго находится в одном состоянии? Если да, то скада не будет добавлять одно и то же значение каждые 10 сек, т.к. это ничего не изменит ни на тренде, ни при расчетах с учетом времени.

Ну мне кажется в этом и суть "комбинированной" переменной писать и так и так, мало ли для чего это нужно инженеру. Рекомендации про 1 час в руководстве у вас даны. Для чего насильно изменять при этом интервал (нигде про это не упоминая) не понятно и вводит в заблуждение.

Цитировать
Да, данные накапливаются в буферы и сбрасываются на жесткий диск каждые 5 минут (для основного слоя), поэтому в случае аварийного потеряется не более 5 мин. основного слоя. Минутный слой сбрасывается каждую минуту, часовой - час, суточный - день. Для часового и суточного слоев делается резервная копия каждые 10 минут и в случае сбоя данные из резерва будут восстановлены после очередного запуска сервера.

К сожалению это не всегда так. Проведенный эксперимент (комбинированная переменная):
17.59
mysql> select * from trends_data where id=13 order by timestamp desc limit 3;
+----+-------------------------+-------+---------+
| ID | Timestamp               | Value | Quality |
+----+-------------------------+-------+---------+
| 13 | 2017-03-17 17:50:33.573 |     1 |       1 |
| 13 | 2017-03-17 16:56:09.611 |     0 |       2 |
| 13 | 2017-03-17 16:54:28.553 |     1 |       1 |

18.00 Стоп и последующий старт проекта через сервер
mysql> select * from trends_data where id=13 order by timestamp desc limit 3;
+----+-------------------------+-------+---------+
| ID | Timestamp               | Value | Quality |
+----+-------------------------+-------+---------+
| 13 | 2017-03-17 17:50:33.573 |     1 |       1 |
| 13 | 2017-03-17 16:56:09.611 |     0 |       2 |
| 13 | 2017-03-17 16:54:28.553 |     1 |       1 |

quality = 3 нету.
Последние значения из trends_minute, trends_hour, trends_day точно такие же.

18.57 (прошел почти час) 
Последние значения из всех таблиц trend_data trends_minute, trends_hour, trends_day точно такие же, новых записей нет.

19.03 (прошло больше часа)
в trends_data появилось значение за 18.00
mysql> select * from trends_data where id=13 order by timestamp desc limit 3;
+----+-------------------------+-------+---------+
| ID | Timestamp               | Value | Quality |
+----+-------------------------+-------+---------+
| 13 | 2017-03-17 19:00:14.584 |     1 |       1 |
| 13 | 2017-03-17 18:00:09.885 |     1 |       2 |
| 13 | 2017-03-17 17:50:33.573 |     1 |       1 |
+----+-------------------------+-------+---------+

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Работа системы архивирования данных
« Ответ #3 : 17 Марта 2017, 15:45:30 »
Цитировать
Ну мне кажется в этом и суть "комбинированной" переменной писать и так и так, мало ли для чего это нужно инженеру.
Нет, суть комбинированного способом в том, что он работает как способ "по-времени" + как способ "по-изменению".

Цитировать
Для чего насильно изменять при этом интервал (нигде про это не упоминая) не понятно и вводит в заблуждение.
Как мы уже писали: это ничего не меняет ни при расчетах на основе архивных данных, ни при отображении тренда. Опишите для чего именно Вам нужно добавление одинаковых значений в архив? Из-за этого только вырастет нагрузка на систему архивации, скорость выполнения выборок из БД снизится, количество операций записи на жесткий диск увеличится, количество передаваемых (от сервера к клиентам) по сети данных увеличится. Кроме минусов, есть ли какие-то плюсы? Может быть Вы опасаетесь за отображение трендов? Можете вывести несколько трендов и просмотреть их, в них не будет каких-то пробелов или ещё чего-то. Когда вы поставите курсор в любую точку тренда, то получите соответствующее значение. Если нужно увидеть не диагональные линии тренда, а ступенчатые, то включите ступенчатый тип отрисовки.

Или может быть нужно из БД доставать значения и делать какие-то вычисления, например среднее, или интеграл? Тогда просто используйте формулы, которые учитывают время, например: Среднее = Сумма(Значение(N) * (Время(N) - Время(N-1))) / (Конечное время - Начальное время), и результат будет точным. Скада при выводе среднего, мин, макс, всё это учитывает.

Цитировать
К сожалению это не всегда так. Проведенный эксперимент (комбинированная переменная):
Да, сейчас такое возможно для переменной, значение которой не изменяется и можно потерять до одного часа в случае аварийного выключения сервера. В ближайших обновлениях добавим резервирование неизменных переменных на случай аварийного завершения работы.
« Изменён: 17 Марта 2017, 15:50:17 от Simple-Scada »

atg

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Работа системы архивирования данных
« Ответ #4 : 17 Марта 2017, 16:26:06 »
Цитировать
Ну мне кажется в этом и суть "комбинированной" переменной писать и так и так, мало ли для чего это нужно инженеру.
Нет, суть комбинированного способом в том, что он работает как способ "по-времени" + как способ "по-изменению".

Я это и имел ввиду. И согласно документации я ожидал от нее именно такого поведения. А получилось, что вы "улучшили" ее функционал, не написав об этом нигде. В итоге, столкнувшись с поведением переменной отличном от описанного в документации, и стали возникать вопросы. Зачем в документации писать "рекомендуется выставить интервал 1 час" и при этом втихую сделать это самим.

Люди, настраивающие скаду, все описанные вами проблемы с частой записью в БД  прекрасно понимают (и я тоже), и сами имеют голову на плечах чтобы выставить редкий интервал, если им не нужен частый.

Лично мне частая запись не нужна, мне нужно просто посчитать время во включенном состоянии (1). Но пытаясь выдергивать значения из базы я увидел, что время их записи отличается от описанного в документации, и на основании этого родились сомнения - а все ли здесь работает корректно? а может какие-то данные теряются? Было бы написано "архивируется раз в час" я бы и не стал парится..

А вообще simple scada мне нравится   :)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Работа системы архивирования данных
« Ответ #5 : 20 Марта 2017, 22:58:19 »
atg, все понятно ). В руководстве немного изменили описание, чтобы было понятно что новая точка добавляется в архив только по изменению значения.