Синхронизация
Этот раздел описывает последовательность вызовов различных методов DeviceDriver
ядром сервера во время синхронизации устройства с сервером.
shouldSynchronize()
. Если он возвращает false (например, если настройки для связи с устройством еще не определены), синхронизация пропускается. isUsesConnections()
возвращает true:isConnected()
возвращает false, или ядро системы запрашивает повторное соединение с оборудованием (например, потому, что предыдущая синхронизация не удалась, и включена настройка Прервать синхронизацию при ошибке ), система вызывает disconnect()
(только если isConnected()
верно) и затем connect()
.connect()
не генерирует исключительную ситуацию, устройство переключается в статус соединения в режиме Online.startSynchronization()
.isUsesGroups()
возвращает true), а группы еще не прочитаны из устройства (или же драйвер был перезапущен), вызывается метод readGroupDefinitions().
readVariableDefinitions()
, новые и измеренные определения добавляются в контекст устройства и кэшируются в БД. Если драйвер поддерживает группы, вместо него вызывается метод readVariableDefinitions(List<GroupDefinition>)
.readFunctionDefinitions()
, новые измененные определения добавляются в контекст устройства и кэшируются. Если драйвер поддерживает группы, вместо него вызывается метод readFunctionDefinitions(List<GroupDefinition>)
.readEventDefinitions()
, новые и измененные определения добавляются в контекст устройства и кэшируются. Если драйвер поддерживает группы, вместо него вызывается метод readEventDefinitions(List<GroupDefinition>)
.DisconnectionException
, в журнал регистрации событий записывается ошибка, устройство переключается в статус соединения Offline, вызвается метод драйвера disconnect()
, а синхронизация завершается. getVariableModificationTime(),
чтoбы получить отметку времени устройства для настроки. Если отметки времени модификации не поддерживаются оборудованием, этот метод возвратит нулевое значение. В этом случае сервер запишет значение настройки в устройство, если оно не было изменено в кэше сервера, или же прочитает его из устройства в противном случае.readVariableValue(),
чтобы прочесть значение настройки с устройства. writeVariableValue(),
чтобы записать значение с сервера в устройство. updateVariableModificationTime(),
чтобы сохранить новые метки времени модификации в устройстве.DisconnectionException
, это регистрируется в журнале событий, устройство переходит в режим Offline
, вызвыается метод драйвера disconnect()
, синхронизация завершается.finishSynchronization()
.