Синхронизация

Этот раздел описывает последовательность вызовов различных методов DeviceDriver ядром сервера во время синхронизации устройства с сервером.

  • Если устройство приостановлено, синхронизация пропускается.
  • Если выражение зависимости устройства оценивается как ложное, синхронизация пропускается, а соединение с устройством переключается в режим Offline.
  • Должен быть вызван метод драйвера shouldSynchronize(). Если он возвращает false (например, если настройки для связи с устройством еще не определены), синхронизация пропускается.
  • Если активирован расширенный статус, статус синхронизации переключается на Соединение.
  • Если метод драйвера isUsesConnections() возвращает true:
  • Если isConnected() возвращает false, или ядро системы запрашивает повторное соединение с оборудованием (например, потому, что предыдущая синхронизация не удалась, и включена настройка Прервать синхронизацию при ошибке ), система вызывает disconnect() (только если isConnected() верно) и затем connect().
  • Если connect() не генерирует исключительную ситуацию, устройство переключается в статус соединения в режиме Online.
  • Определенные задачи синхронизации, именуемые "connect-only" могут завершится на этом этапе.
  • Если активизирован расширенный статус, статус синхронизации устройства певодится в Чтение Метаданных.
  • Вызвается 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(), синхронизация завершается.
  • Если любой из выше перечисленных методов генерирует исключительную ситуацию, это регистрируется в журнале событий, статус синхронизации настроек устанавливается в Error, а синхронизация завершается, если активирована настройка Прервать синхронизацию при ошибке.
  • Вызвается метод finishSynchronization().
  • Вычисляются статусы синхронизации и режима устройства в сети.