Синхронизация
Этот раздел описывает последовательность вызовов различных методов 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(), а синхронизация завершается.
Was this page helpful?