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

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

  1. Если устройство приостановлено, синхронизация пропускается.

  2. Если выражение зависимости устройства оценивается как ложное, синхронизация пропускается, а соединение с устройством переключается в режим Offline.

  3. Должен быть вызван метод драйвера shouldSynchronize(). Если он возвращает false (например, если настройки для связи с устройством еще не определены), синхронизация пропускается.

  4. Если активирован расширенный статус, статус синхронизации переключается на Соединение.

  5. Если метод драйвера isUsesConnections() возвращает true:

  • Если isConnected() возвращает false, или ядро системы запрашивает повторное соединение с оборудованием (например, потому, что предыдущая синхронизация не удалась, и включена настройка Прервать синхронизацию при ошибке ), система вызывает disconnect() (только если isConnected() верно) и затем connect().

  • Если connect() не генерирует исключительную ситуацию, устройство переключается в статус соединения в режиме Online.

  1. Определенные задачи синхронизации, именуемые "connect-only" могут завершится на этом этапе.

  2. Если активизирован расширенный статус, статус синхронизации устройства певодится в Чтение Метаданных.

  3. Вызвается startSynchronization().

  4. Если параметны синхронизации требуют чтения метаданных (т.е. выполняется "полная" синхронизация):

  • Если драйвер поддерживает группы (т.е. isUsesGroups() возвращает true), а группы еще не прочитаны из устройства (или же драйвер был перезапущен), вызывается метод readGroupDefinitions().

  • Вызывается readVariableDefinitions(), новые и измеренные определения добавляются в контекст устройства и кэшируются в БД. Если драйвер поддерживает группы, вместо него вызывается метод readVariableDefinitions(List<GroupDefinition>).

  • Если у настроек синхронизации некоторых только что добавленных определений переменных есть период общей синхронизации, назначаются задачи синхронизации для каждой из настроек.

  • Вызвается readFunctionDefinitions(), новые измененные определения добавляются в контекст устройства и кэшируются. Если драйвер поддерживает группы, вместо него вызывается метод readFunctionDefinitions(List<GroupDefinition>).

  • Соответствующее действие Вызвать функцию добавляется в контекст устройства для каждого нового определения функции.

  • Вызывается readEventDefinitions(), новые и измененные определения добавляются в контекст устройства и кэшируются. Если драйвер поддерживает группы, вместо него вызывается метод readEventDefinitions(List<GroupDefinition>).

  • Если любой из выше упомянутых методов генерирует DisconnectionException, в журнал регистрации событий записывается ошибка, устройство переключается в статус соединения Offline, вызвается метод драйвера disconnect(), а синхронизация завершается.

Was this page helpful?