УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Архивирование массива данных и vArh


Автор Сообщение
Сообщение создано: 10. 04. 2014 [12:55]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Добрый день!
Есть задача — занесение в архив полученного большого массива с данными, опрос прибора реализован через контроллер JavalikeCalc. Появилась пара вопросов:

1. Как лучше в таком случае организовать архивацию данных?
2. Правильно ли будет воспользоваться объектом vArh и методом Set в таком случае (при этом использовать пассивный тип архива, если я все правильно понял)?
3. Если настраивать архивацию параметров контроллера, то после привязки параметра к конкретному архиватору, для него создается таблица значении и запись в информационной таблице. Как сделать то же самое для созданного вручную архива (или это происходит автоматически при записи первых значений архива)?
4. Если есть архив c ID=test например, правильно будет так записывать в него данные
rez=vArh(strPath2Sep(/sub_Archive/test)).set(val[i],time[i],0) ?

[Сообщение редактировалось 1 раз(а), в последний раз 10.04.2014 в 12:56.]
Сообщение создано: 10. 04. 2014 [22:47]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Waterdisp" wrote:

2. Правильно ли будет воспользоваться объектом vArh и методом Set в таком случае (при этом использовать пассивный тип архива, если я все правильно понял)?

Правильно, другого просто нет.

"Waterdisp" wrote:

3. Если настраивать архивацию параметров контроллера, то после привязки параметра к конкретному архиватору, для него создается таблица значении и запись в информационной таблице. Как сделать то же самое для созданного вручную архива (или это происходит автоматически при записи первых значений архива)?

К архиватору по сути привязывается архив, а не параметр. А Архив может быть и "Пассивным".

"Waterdisp" wrote:

4. Если есть архив c ID=test например, правильно будет так записывать в него данные
rez=vArh(strPath2Sep(/sub_Archive/test)).set(val[i],time[i],0) ?

Да, только лучше результат vArh() сохранить в автоматической переменой, а затем set() многократно вызывать к ней.


Learn, learn and learn better than work, work and work.
Сообщение создано: 14. 04. 2014 [12:44]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Хотел вот еще вопрос задать, хоть уже и не совсем по теме...
Можно ли данные, полученные из сторонних источников заносить в базу архивов таким образом, чтобы потом можно было строить визуализацию стредствами Openscada? Есть сторонняя программа, разработчик которой канул в лету, как работает его программа никто не знает, контроллеры тоже работают по каким то одним им известным протоколам. Однако же удалось данные из его локальных БД на Paradox импортировать в Postgresql.
Вот если строго соблюсти формат таблицы архива на Openscada при импорте, можно ли будет потом средствами Openscada эти данные визуализировать, как обычные архивы?
Сообщение создано: 14. 04. 2014 [13:40]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Waterdisp" wrote:

Можно ли данные, полученные из сторонних источников заносить в базу архивов таким образом, чтобы потом можно было строить визуализацию стредствами Openscada?

Вы если любые данные через vArh положите в архив то затем стандартным образом их увидите. Следовательно если с БД перечитаете их и запишите, в vArh то всё и получите.


Learn, learn and learn better than work, work and work.
Сообщение создано: 21. 04. 2014 [08:30]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
В общем попробовал вчера запись значений в архив через vArh. После опроса прибора получил почасовые архивы за сутки. Период значений архиватора - 1 час, периодичность архивирования - 60 сек, период буфера - 1 сек, размер - 100 ед, жесткая сетка времени буфера включена, высокое разрешение времени - выкл. У меня записываются в архив данные только за последний час почему-то.. То есть, если я получил данные с 00:00 по 23:00 , а сейчас системное время 23:00, то единственные данные которые у меня записываются - данные за 23:00. В чем может быть проблема, может неправильно настроен архиватор?

P.S. Архив был создан руками (через "Архивы" -> "Создать"), затем привязан к архиватору.

P.P.S. Увидел вот такую надпись в логах : 0|/WorkStation/sub_DAQ/mod_JavaLikeCalc/lib_techApp/fnc_bdreqtest/ | Режим привязки к сетке не поддерживает вставку старых значений.
Пробовал менять "Жесткую сетку буфера" - не помогло, хотя тип ошибки поменялся на : 0|/WorkStation/sub_DAQ/mod_JavaLikeCalc/lib_techApp/fnc_bdreqtest/ | Режим привязки к сетке не поддерживает вставку очень старых значений 1398034800000000 (1398038400000000-1398038400000000).

[Сообщение редактировалось 3 раз(а), в последний раз 21.04.2014 в 09:35.]
Сообщение создано: 21. 04. 2014 [13:02]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Waterdisp" wrote:

В чем может быть проблема, может неправильно настроен архиватор?

Неправильно выполняете, как правильно смотрите в сервисной функции "Пересчёт архивов". Т.е. нужно создать буфер нужной глубины и разрешения, записать туда участок, а затем скопировать его прямо в архив.

"Waterdisp" wrote:

P.P.S. Увидел вот такую надпись в логах : 0|/WorkStation/sub_DAQ/mod_JavaLikeCalc/lib_techApp/fnc_bdreqtest/ | Режим привязки к сетке не поддерживает вставку старых значений.

Писать данные в буфер нужно от старшего к свежему, т.е. в естественном порядке, иначе он не заполняется.

Learn, learn and learn better than work, work and work.
Сообщение создано: 23. 04. 2014 [15:28]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Все получилось, осталось 2 неуясненных для меня моментов.

1.Как правильно выставить размер буфера архива? Он по умолчанию выставляется в 100, однако для записи хотябы 2х значений с плавающей точкой понадобился уже размер 10000... В общем для массива из 24 элементов мне хватило размера 100000. А в чем измеряется этот размер? Охота сделать универсальную функцию записи, которая из размера входящего массива и типа его элементов сама формирует размер буфера.

2. Разрядность буфера я поставил такую же, как и в объекте созданного мной архива (1сек или 1000000 мс). Это правильно? На что она влияет, где прочитать об этом?

[Сообщение редактировалось 1 раз(а), в последний раз 23.04.2014 в 15:31.]
Сообщение создано: 23. 04. 2014 [17:31]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Waterdisp" wrote:

1.Как правильно выставить размер буфера архива? Он по умолчанию выставляется в 100, однако для записи хотябы 2х значений с плавающей точкой понадобился уже размер 10000...

Да ну, не путайте значение какие Вы хотите со значениями сетки буфера. Согласно сетке 100 и запишете.
Т.е. периодичность буфера нужно ставить к периодичности данных, которые у Вас есть.
А размер в размерность блоков которыми вы эти данные из внешнего источника берёте или записываете.
Т.е. в буфер записали блок указанного размера, скопировали в архив, опять записали в буфер, скопировали и т.д.

Learn, learn and learn better than work, work and work.
Сообщение создано: 25. 04. 2014 [16:43]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

"Waterdisp" wrote:

1.Как правильно выставить размер буфера архива? Он по умолчанию выставляется в 100, однако для записи хотябы 2х значений с плавающей точкой понадобился уже размер 10000...

Да ну, не путайте значение какие Вы хотите со значениями сетки буфера. Согласно сетке 100 и запишете.

Собственно с прямой записью был ряд проблем:
- Зацикливание на периодах более часа.
- Непрохождение записи в архив по завязке на обработку буфера.
- Непрохождение одиночных записей в виду отсутствия выравнивание на периодичность данных.
Сейчас всё это исправлено и у меня пишется в часовой архив!

Learn, learn and learn better than work, work and work.
Сообщение создано: 20. 06. 2014 [16:11]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Недавно снова попробовал писать через буфер и vArh, заметил что при записи теряются 1-2 последних элемента из буфера архива, при записи суточных данных например теряются 2 последних значения. Не смог пока что отследить, от чего это зависит.

Еще постоянно получаю ошибку записи, которая подвешивает всю базу архивов :

Jun 19 09:05:19 Scadaserver openscada: 4|/WorkStation/sub_BD/mod_PostgreSQL/db_Main_arch/ | Ошибка запроса к БД: PGRES_FATAL_ERROR. ОШИБКА: текущая транзакция прервана, команды до конца блока транзакции игнорируются

если в данных, заносимых в архив, есть пробел по времени в несколько раз больше, чем период. Это как то можно победить?



5493