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

Архиватор


Автор Сообщение
Сообщение создано: 12. 02. 2010 [14:03]
andrelek
Андрей Полевой
Создатель темы
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Я так понимаю что дыры должны образовываться влюбом случае, т.к какойто период машина не работала и данных там просто быть не может, А почему у меня после разрыва(перезагрузки) сначала был ноль а потом нормальное значение я так и не понял.
Когда образовуется вещественное из двух слов, то в случае если значения этих слов равны EVAL_REAL то вещественное равно гдето такому числу 2*10^-5, такая ситуация наблюдается у меня когда float=Special.FLibSYS.floatMergeWord(слово1,слово2), но скрипт шаблона у меня с таким условием что если хоть одно слово EVAL_REAL то float тоже EVAL_REAL.
Сообщение создано: 12. 02. 2010 [16:01]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
В том то и проблемы, что Вы на вопросы не корректно отвечаете.
Раз это вещественное значит это уже не ModBus!
И вы гдето вычислили его, и вычислили не правильно.

Регистры ModBus это не Real, а значит и ни разу не EVAL_REAL.

Learn, learn and learn better than work, work and work.
Сообщение создано: 12. 02. 2010 [19:15]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Для того, чтобы недостоверные данные не доходили до архивируемой переменной необходимо обрабатывать атрибут ошибки приёма-передачи, доступный пользователю наряду с измеренными значениями на вкладке "Атрибуты".
Эта задача ложится целиком на программу пользователя.

И ещё: при перезапуске OpenSCADA инициализацию архивируемой переменной надо бы производить последним достоверным значением. Для этого можно мгновенные значения измерений сохранять куда-нибудь в отдельную БД.

Алгоритм получается такой: если данные достоверные (атрибут "Ошибка") пишем его из модуля ModBus в архивируемую переменную и в отдельную БД, иначе - из БД в архивируемую переменную.

Вопрос такой созрел: сразу после запуска OpenSCADA сперва выдерживается период архивации, а потом запись в архив или наоборот?

[Сообщение редактировалось 4 раз(а), в последний раз 12.02.2010 в 20:26.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 12. 02. 2010 [21:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
Ничего подобного делать не нужно.
andrelek почти всё сделал правильно.
Ошибка была только в том, что сравнивать регистры ModBus нужно с EVAL_INT, и если хотя бы один равен то результат возвращать как EVAL_REAL. В остальных случаях вызывать функцию объединения Special.FLibSYS.floatMergeWord(слово1,слово2),. А вот полученное вещественное и архивировать.

Learn, learn and learn better than work, work and work.
Сообщение создано: 16. 02. 2010 [11:27]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
Теперь подобное делать вообще не нужно.
Я добавил в DAQ.ModBus возможность указания типов данных int16, int32, float и bitX для прямого выделения их из регистров.

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



1772