[BugWrong]
Запись в архив сообщений
Автор |
Сообщение |
Сообщение создано: 26. 08. 2013 [06:56]
|
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
|
Создаем виджет, далее проект, в обработке пишем:
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
|
Сообщение создано: 26. 08. 2013 [07:12]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"dell" wrote:
OpenScada 0.8.0.5
Обновитесь для начала, а потом смотрите настройки архиватора и запроса.
Хотя это по причине того, что для таблицы БД это один ключ, поскольку сообщение в него не входит.
Микросекундную часть ставьте ненулевую!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 28. 08. 2013 [12:29]
|
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
|
Хотя это по причине того, что для таблицы БД это один ключ, поскольку сообщение в него не входит.
Микросекундную часть ставьте ненулевую!
Но правильно ли это? Разве пользователь не волен записывать в архив то, что хочет? А если на каких-нибудь сверхбыстрых квантовых компьютерах несколько операций будет выполняться за микросекунду? В буфере вот всё записывается.
И не подскажете еще, как брать эти самые микросекунды? Пробовал и SYS.time(usec), и SYS.usec(), и SYS.time(usec()), и еще всяко разно, в лучшем случае получал "<EVAL>", или отрицательное число. А так в демоБД не нашел.
|
Сообщение создано: 28. 08. 2013 [15:03]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"dell" wrote:
Но правильно ли это? Разве пользователь не волен записывать в архив то, что хочет?
Сообщения для архива генерирует не пользователь, а раз так то там будет разница между сообщениями особенно если они в одной категории.
"dell" wrote:
А если на каких-нибудь сверхбыстрых квантовых компьютерах несколько операций будет выполняться за микросекунду? В буфере вот всё записывается.
Тогда и разрешение времени в OpenSCADA будет увеличено.
"dell" wrote:
И не подскажете еще, как брать эти самые микросекунды? Пробовал и SYS.time(usec), и SYS.usec(), и SYS.time(usec()), и еще всяко разно, в лучшем случае получал "<EVAL>", или отрицательное число. А так в демоБД не нашел.
usec = 0;
SYS.time(usec);
P.S. Текст сообщения в ключе таблицы ранее был, но убран по причине ограниченности размера ключа в ряде БД, начиная с MySQL. Думаю попробовать таблицу без ключа. При этом вроде все поля неявно участвуют в ключе.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 29. 08. 2013 [05:59]
|
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
|
Понятно, спасибо.
Но эта конструкция все равно не работает:
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
|
Сообщение создано: 29. 08. 2013 [07:44]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"dell" wrote:
Но эта конструкция все равно не работает:
А если так?
usec = 0;
sec = SYS.time(usec);
SYS.Archive.messPut(sec,usec,"cat1",0,"Text1");
Ещё можно так попробовать:
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.
|
|
|