EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

[BugWrong] Запись в архив сообщений


Author Message
Written on: 26. 08. 2013 [06:56]
dell
Путин Краб
Topic creator
registered since: 09.04.2013
Posts: 28
Создаем виджет, далее проект, в обработке пишем:
JAVASCRIPT
SYS.Archive.messPut(SYS.time(),0,"test1",0,"сообщение1");
SYS.Archive.messPut(SYS.time(),0,"test1",0,"сообщение2");
SYS.Archive.messPut(SYS.time(),0,"test1",0,"сообщение3");

Создаем архив сообщений на БД, настройки по умолчанию, категория сообщений *. Запускаем проект и видим, что в буфере все как положено - "сообщение1", "сообщение2", "сообщение3". А в архиваторе почему-то записывается только "сообщение3". Если убрать 3-ю строчку, то записывается только "сообщение2", т.е. только последнее.
OpenScada 0.8.0.5
Written on: 26. 08. 2013 [07:12]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"dell" wrote:

OpenScada 0.8.0.5

Обновитесь для начала, а потом смотрите настройки архиватора и запроса.

Хотя это по причине того, что для таблицы БД это один ключ, поскольку сообщение в него не входит.
Микросекундную часть ставьте ненулевую!

Learn, learn and learn better than work, work and work.
Written on: 28. 08. 2013 [12:29]
dell
Путин Краб
Topic creator
registered since: 09.04.2013
Posts: 28

Хотя это по причине того, что для таблицы БД это один ключ, поскольку сообщение в него не входит.
Микросекундную часть ставьте ненулевую!

Но правильно ли это? Разве пользователь не волен записывать в архив то, что хочет? А если на каких-нибудь сверхбыстрых квантовых компьютерах несколько операций будет выполняться за микросекунду? В буфере вот всё записывается.
И не подскажете еще, как брать эти самые микросекунды? Пробовал и SYS.time(usec), и SYS.usec(), и SYS.time(usec()), и еще всяко разно, в лучшем случае получал "<EVAL>", или отрицательное число. А так в демоБД не нашел.
Written on: 28. 08. 2013 [15:03]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"dell" wrote:

Но правильно ли это? Разве пользователь не волен записывать в архив то, что хочет?

Сообщения для архива генерирует не пользователь, а раз так то там будет разница между сообщениями особенно если они в одной категории.

"dell" wrote:

А если на каких-нибудь сверхбыстрых квантовых компьютерах несколько операций будет выполняться за микросекунду? В буфере вот всё записывается.

Тогда и разрешение времени в OpenSCADA будет увеличено.

"dell" wrote:

И не подскажете еще, как брать эти самые микросекунды? Пробовал и SYS.time(usec), и SYS.usec(), и SYS.time(usec()), и еще всяко разно, в лучшем случае получал "<EVAL>", или отрицательное число. А так в демоБД не нашел.

JAVASCRIPT
usec = 0;
SYS.time(usec);


P.S. Текст сообщения в ключе таблицы ранее был, но убран по причине ограниченности размера ключа в ряде БД, начиная с MySQL. Думаю попробовать таблицу без ключа. При этом вроде все поля неявно участвуют в ключе.

Learn, learn and learn better than work, work and work.
Written on: 29. 08. 2013 [05:59]
dell
Путин Краб
Topic creator
registered since: 09.04.2013
Posts: 28
Понятно, спасибо.
Но эта конструкция все равно не работает:

JAVASCRIPT
usec = 0;
SYS.Archive.messPut(SYS.time(),SYS.time(usec),"test1",0,SYS.time(usec));
Text1_text = SYS.time(usec);


Там где должны быть микросекунды, ставятся секунды, как просто от вызова SYS.time(). Время обработки ставил разное от 100 до 1000мс, почему? OpenSCADA 0.8.0.7
Written on: 29. 08. 2013 [07:44]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"dell" wrote:

Но эта конструкция все равно не работает:

А если так?
JAVASCRIPT
usec = 0;
sec = SYS.time(usec);
SYS.Archive.messPut(sec,usec,"cat1",0,"Text1");

Ещё можно так попробовать:
JAVASCRIPT
usec = 0;
SYS.Archive.messPut(SYS.time(usec),usec,"cat1",0,"Text1");

В любом случае usec возвращается через аргумент функции SYS.time(), поскольку этот аргумент выход, что явно видно здесь: http://wiki.oscada.org/Doc/FLibSYS#h378-14



Learn, learn and learn better than work, work and work.



3443