Flexible драйвер
Flexible драйверы устройств выступают в роли "комплекта создания драйверов". Это позволяет подключать устройства, работающие по проприетарным протоколам, при помощи глубокой настройки системы, не прибегая к разработке определенного драйвера устройства на языке программирования Java.
Применимость flexible драйвера
Flexible драйвер подходит для подключения нового устройства или источника данных, которые отвечают следующим критериям:
Коммуникация осуществляется через TCP, UDP или последовательный порт локальной машины
Устройство либо принимает соединения от SberMobile Server, либо устанавливает соединения с сервером самостоятельно
SberMobile Server выступает как клиент в коммуникациях (т.е. отправляет команды и получает ответы и/или получает асинхронные сообщения с устройства), а устройство выступает в роли сервера
Протокол устройства не использует "транзакции", т.е. цепочки отдельных сообщений, действующих как отдельный консолидированный блок данных протокола (хотя в отдельных случаях поддержка транзакций все же реализуется)
Протокол устройства не предполагает парсинг потока входных данных в отдельные блоки данных протокола в зависимости от времени задержки (как иногда происходит в протоколах последовательной передачи данных)
Flexible драйвер работает в следующих случаях:
Протокол устройства - ASCII (текстовый) или бинарный
В основе протокола:
синхронные сообщения от устройства
команды сервера с последующими ответами устройства
одновременно синхронные команды/ответы и асинхронные сообщения от устройства (комбинированный режим)
Ответы устройства могут быть соотнесены с командами сервера двумя способами:
устройство может отвечать на команды в той же последовательности, в которой их посылает сервер
команды сервера и ответы устройства могут иметь ID (уникальные для каждой сессии и соотнесенные друг с другом). В этом случае устройство может отвечать на команды сервера в произвольном порядке
Flexible драйвер устройств - расширенный инструмент, который требует хорошего понимания единой модели данных платформы, понятий таблицы данных, переменные, функции, события, язык выражений, устройства, а также общей архитектуры драйверов устройств. |
Информация о драйвере
ID плагина драйвера: | com.tibbo.linkserver.plugin.device.flexible |
Общие настройки
Общие настройки драйвера включают Таблицу настроек, которая регулирует взаимодействие с устройствами, устанавливающими входящие соединения с SberMobile Server:
Свойство | Описание | |
Description | Описание поставщика/модели/типа/версии устройства, обрабатываемого данной записью. | |
Protocol | Протокол устройства: TCP или UDP. | |
Port | TCP/UDP порт для приема входящих подключений. | |
Input Splitter Mode | Если выбрана опция Попытка разделить на каждом байте, драйвер "подает" буфер входных данных для выполнения Выражения разделителя входного потока на каждом байте полученных от устройства данных. Если выбрана опция Попытка разделить в конце блока, Выражение разделителя входного потока вычисляется только однажды, после получения блока байтов от устройства с использованием единственной операции чтения сокета Java/OС. Опция Попытка разделить в конце блока может повысить производительность, т.к. количество попыток анализа буфера входящих данных значительно сокращается. | |
Важно понимать, что входящие блоки данных, полученные из входного сокета, не связаны напрямую с блоками данных протокола (PDU). Сетевая и операционная системы (как на стороне устройства, таки и на стороне SberMobile Server) могут случайным образом разбивать или объединять блоки данных, отправленных самим устройством. Нельзя гарантировать, что каждый PDU, отправленный устройством в одной операции, будет получен драйвером в одном блоке данных. | ||
Input Stream Splitter Expression | Используется для извлечения команд из буфера входящих данных. Возвращает количество первых байтов в буфере, которые образуют полностью определенный блок протокола, либо null, если буфер не содержит полных блоков протокола. | |
Encode Expression | Осуществляет кодировку исходящей команды перед отправкой на сокет или последовательный порт. Возвращает строку с закодированной командой. Может использоваться для добавления префиксов, CRC или любого другого способа кодирования команд. Должно ссылаться на оригинальную команду через переменную среды | |
Decode Expression | Декодирует входящие команды после извлечения из потока входящих данных с помощью Выражения разделитель входного потока. Может удалять префиксы и суффиксы команд, проверять CRC или проверять целостность команды любым другим способом. Должно возвращать преобразованную команду в виде строки, либо NULL, если команда неверная и должна быть отброшена. | |
Device ID Detection Method Expression | Это выражение должно возвращать числовое значение, идентифицирующее метод, который будет использоваться для определения ID устройства:
| |
Read Device ID Expression | Это выражение должно возвращать команду для отправки на устройство, чтобы получить ID этого устройства. | |
Device ID Processing Expression | Выражение используется, чтобы анализировать ответ устройства на Выражение чтения ID устройства и возвращать ID устройства. Ответ доступен в виде строки, содержащейся в переменной окружения | |
Encoding | Кодировка строк, используемая драйвером. |
Настройки уровня пользователя
Не определены.
Свойства аккаунта устройства
Свойства соединения
Свойства соединения определяют, как SberMobile Server общается с устройством. Доступ в этим свойствам можно получить через действие Редактировать свойства аккаунта устройства контекста Device. Доступны следующие свойства соединения:
Свойство | Описание |
Connection | Тип соединения: Исходящее (драйвер сам устанавливает соединение) или Входящее (одно из входящих соединений устройства будет относиться к аккаунту этого устройства). |
Device ID | ID аккаунта данного устройства, используемый для соотнесения с входящим соединением устройства. |
Mode | Способ связи устройств: через TCP, UDP или последовательный порт. Используется только для исходящих соединений устройства. |
IP address or Host Name | Адрес устройства (для связи через TCP и UDP). Используется только для исходящих соединений устройства. |
Port | Порт устройства для связи через TCP и UDP. Используется только для исходящих соединений устройства. |
Baud Rate | Скорость передачи данных (для связи через последовательный порт). |
Incoming Flow Control | Тип управления входящим потоком: нет, CTS/RTS или XON/XOFF (для связи через последовательный порт). |
Outgoing Flow Control | Тип управления исходящим потоком: нет, CTS/RTS или XON/XOFF (для связи через последовательный порт). |
Data Bits | Биты данных (для связи через последовательный порт). |
Stop Bits | Стоповые биты (для связи через последовательный порт). |
Parity | Четность (для связи через последовательный порт). |
Timeout | Таймаут команды (по умолчанию 30 секунд). Если за это время не получен ответ, соответствующий отправленной сервером команде, команда считается "неотвеченной", и ее выполнение завершается ошибкой. |
Обмен командами
Эта таблица настраивает базовые параметры обмена блоками протокольных данных с устройством.
Приведенные ниже настройки обмена командами будут применяться только для Исходящих соединений устройства. В случае Входящего соединения, будут использоваться настройки обмена командами, указанные в той записи общих настроек драйвера, которая использовалась для принятия Входящего соединения. |
Свойство | Описание | |
Input Stream Splitter Expression | Используется для извлечения команд из буфера входящих данных. Возвращает количество первых байтов в буфере, которые образуют полностью определенный блок протокола, либо null, если буфер не содержит полных блоков протокола. | |
Input Splitter Mode | Если выбрана опция Попытка разделить на каждом байте, драйвер "подает" буфер входных данных для выполнения Выражения разделителя входного потока на каждом байте полученных от устройства данных. Если выбрана опция Попытка разделить в конце блока, Выражение разделителя входного потока вычисляется только однажды, после получения блока байтов от устройства с использованием единственной операции чтения сокета Java/OС. Опция Попытка разделить в конце блока может повысить производительность, т.к. количество попыток анализа буфера входящих данных значительно сокращается. | |
Важно понимать, что входящие блоки данных, полученные из входного сокета, не связаны напрямую с блоками данных протокола (PDU). Сетевая и операционная системы (как на стороне устройства, таки и на стороне SberMobile Server) могут случайным образом разбивать или объединять блоки данных, отправленных самим устройством. Нельзя гарантировать, что каждый PDU, отправленный устройством в одной операции, будет получен драйвером в одном блоке данных. | ||
Encode Expression | Осуществляет кодировку исходящей команды перед отправкой на сокет или последовательный порт. Возвращает строку с закодированной командой. Может использоваться для добавления префиксов, CRC или любого другого способа кодирования команд. Должно ссылаться на оригинальную команду через переменную среды | |
Decode Expression | Декодирует входящие команды после извлечения из потока входящих данных с помощью Выражения разделитель входного потока. Может удалять префиксы и суффиксы команд, проверять CRC или проверять целостность команды любым другим способом. Должно возвращать преобразованную команду в виде строки, либо NULL, если команда неверная и должна быть отброшена. | |
Encoding | Кодировка строк, используемая драйвером. |
Операции
Таблица содержит различные выражения, которые определяют базовые операции для Flexible драйвера.
Свойство | Описание | |
Asynchronous Command Detector Expression | Проверяет содержимое декодированной команды и возвращает TRUE, если это асинхронное сообщение от устройства (событие, обновление значения и пр.), либо FALSE, если это синхронный ответ на предварительно отправленную сервером команду. | |
Event/Variable Update Qualifier Expression | Проверяет содержимое асинхронного сообщения от устройства и возвращает 0, если это событие, и 1, если это инициированное устройством обновление значения переменной. | |
Command ID Expression | Используется, чтобы узнать уникальный ID команды в рамках текущей сессии. Это можно сделать либо путем генерирования ID (произвольно, последовательно и пр.), либо проверкой данных Команды, доступных через переменную среды | |
Если в коммуникационном протоколе не используются ID команды/ответа, настройте данное выражение и Выражение ID ответа на возврат какого-либо статического значения, например, | ||
Reply ID Expression | Анализирует содержимое синхронного ответа устройства и возвращает его ID как строку. Этот ID будет сопоставлен с ID отправленной ранее сервером команды, который был сгенерирован и получен в результате Выражения ID команды. | |
Если в коммуникационном протоколе не используются ID команды/ответа, настройте данное выражение и Выражение ID команды на возврат какого-либо статического значения, например, | ||
Variable Name Expression | Используется для извлечения имени измененной переменной SberMobile Server из команды, которая была классифицирована как обновление значения переменной устройством. | |
Variable Timestamp Expression | Используется для извлечения даты/времени изменения переменной устройства из команды, которая была классифицирована как обновление значения переменной устройством. | |
Variable Quality Expression | Используется для извлечения свойства нового значения из команды, которая была классифицирована как обновление значения переменной устройством. | |
Variable Value Expression | Используется для извлечения значения новой переменной из команды, которая была классифицирована как обновление значения переменной устройством. Должно возвращать таблицу данных. | |
Event Name Expression | Используется для извлечения имени (типа) события SberMobile Server из команды, которая была классифицирована как асинхронное оповещение от устройства. | |
Event Timestamp Expression | Используется для извлечения даты/времени события устройства из команды, которая была классифицирована как асинхронное оповещение от устройства. | |
Event Level Expression | Используется для извлечения уровня события SberMobile Server из команды, которая была классифицирована как асинхронное оповещение от устройства. Должно возвращать целочисленное значение. | |
Event Data Expression | Используется для извлечения данных, относящихся к событию, из команды, которая была классифицирована как асинхронное оповещение от устройства. Должно возвращать таблицу данных. | |
Variable Definitions Expression | Выражение должно получать список доступных переменных от устройства и возвращать его как таблицу данных. Обычно ссылается на какой-либо набор правил скрипта или модели, который, в свою очередь, вызывает функцию Отправлять команду для получения частей метаданных устройства через специфичные для устройства команды. Каждый ряд в результирующей таблице данного выражения будет затем преобразован в определение отдельной переменной, как описано в разделе Работа с динамическими метаданными. | |
Function Definitions Expression | Выражение должно получать список доступных функций от устройства и возвращать его как таблицу данных. Обычно ссылается на какой-либо набор правил скрипта или модели, который, в свою очередь, вызывает функцию Отправлять команду для получения частей метаданных устройства через специфичные для устройства команды. Каждый ряд в результирующей таблице данного выражения будет затем преобразован в определение отдельной функции, как описано в разделе Работа с динамическими метаданными. | |
Event Definitions Expression | Выражение должно получать список доступных типов событий от устройства и возвращать его как таблицу данных. Обычно ссылается на какой-либо набор правил скрипта или модели, который, в свою очередь, вызывает функцию Отправлять команду для получения частей метаданных устройства через специфичные для устройства команды. Каждый ряд в результирующей таблице данного выражения будет затем преобразован в определение отдельного события, как описано в разделе Работа с динамическими метаданными. | |
Start Synchronization Expression | Выражение вычисляется в начале каждого цикла синхронизации устройств. Может выполнять часть инициализации контекста драйвера и/или устройства. Результат выражения игнорируется. | |
Finish Synchronization Expression | Выражение вычисляется в конце каждого цикла синхронизации устройств. Может выполнять часть очистки контекста драйвера и/или устройства. Результат выражения игнорируется. | |
Connect Expression | Выражение вычисляется после удачного подключения устройства. Обычно используется для реализации входа устройства в систему и других действий по аутентификации/авторизации через вызов функции Отправлять команду для обмена данными с устройством. Результат выражения игнорируется.. | |
Disconnect Expression | Выражение вычисляется после удачного отключения устройства. Результат выражения игнорируется. |
Статические переменные
Таблица определяет, какие переменные устройств будут доступны всегда, в дополнение в полученным от устройства во время чтения динамических метаданных.
Каждая переменная определяется следующими параметрами:
Параметр | Описание |
Name | Имя переменной. |
Description | Удобочитаемого для человека описание переменной |
Format | Формат переменной. Более подробно см. Формат. |
Readable | Флаг, показывающий, что переменная читается. |
Writable | Флаг, показывающий, что переменная записывается. |
Help | Подробное описание переменной. |
Group | Группа переменной либо NULL, если переменная не входит ни в одну группу. |
Read Request Expression | Выражение должно возвращать данные, которые буду отправлены на устройство для запроса текущего значения переменной. Должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Read Result Processing Expression | Выражение преобразует данные, вернувшиеся от устройства (полученные через сокет или последовательный порт) в таблицу данных, представляющую значение переменной устройства. Полученные от устройства данные доступны как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. Таблица данных, представляющая значение переменной, обычно создается при помощи функции языка выражений |
Write Request Expression | Выражение должно возвращать данные, которые будут отправлены на устройство для добавления нового значения переменной, измененной на стороне сервера. Фактически, эти данные содержат значение обновленной переменной, кодированные в соответствии с протоколом устройства. Обновленное значение переменной доступно как таблица данным по умолчанию во время вычисления выражения. Выражение должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Write Result Processing Expression | Выражение анализирует данные, вернувшиеся с устройства на запрос записи переменных (полученные через сокет или последовательный порт). Цель выражения - понять успешность операции записи. Выражение должно возвращать текст об ошибке записи в строковом формате, либо NULL, если операция завершилась успешно. Полученный от устройства ответ доступен как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. |
Статические функции
Таблица определяет, какие функции устройств будут доступны всегда, в дополнение в полученным от устройства во время чтения динамических метаданных.
Каждая функция определяется следующими параметрами:
Параметр | Описание |
Name | Имя функции. |
Description | Удобочитаемого для человека описание функции. |
Input Format | Входной формат функции. Подробнее см. Формат. |
Output Format | Выходной формат функции. Подробнее см. Формат. |
Help | Подробное описание функции. |
Group | Группа функции либо NULL, если функция не входит ни в одну группу. |
Execution Request Expression | Выражение должно возвращать данные, которые будут отправлены на устройство, чтобы выполнить операцию устройства. Фактически, эти данные содержат входные параметры операции (функции), кодированные в соответствии с протоколом устройства. Входные параметры операции (функции) доступны как таблица данных по умолчанию во время вычисления выражения. Выражение должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Execution Result Processing Expression | Выражение преобразует выходные данные операции устройства (полученные через сокет или последовательный порт) в таблицу данных, представляющую выходные данные функции устройства на стороне сервера. Полученные от устройства данные доступны как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. Таблица данных, представляющая выходные данные функции, обычно создается при помощи функции языка выражений |
Статические события
Таблица определяет, какие события устройства будут доступны всегда, в дополнение в полученным от устройства во время чтения динамических метаданных.
Каждое событие определяется следующими параметрами:
Параметр | Описание |
Name | Имя события |
Description | Удобочитаемого для человека описание события. |
Format | Формат события. Подробнее см. Формат. |
Help | Подробное описание события. |
Level | Уровень события по умолчанию. |
Group | Группа события, либо NULL, если событие не входит ни в одну группу. |
Динамические переменные
Таблица определяет выражения, которые будут использоваться для извлечения параметров определения переменной из рядов результирующей таблицы Выражения определения переменных. Таким образом, она используется для преобразования каждого ряда этой таблицы в отдельное определение переменной.
Параметр | Описание |
Name Expression | Выражение возвращает имя переменной. |
Description Expression | Выражение возвращает удобочитаемое для человека описание переменной. |
Format Expression | Выражение возвращает строковое представление формата переменной, либо null, если ее формат динамический. Более подробно см. раздел Кодирование формата таблицы. Строка формата может использовать видимые или невидимые разделители. |
Readable Expression | Выражение возвращает флаг, указывающий, что переменная читается. |
Writable Expression | Выражение возвращает флаг, указывающий, что переменная пишется. |
Help Expression | Выражение возвращает подробное описание переменной. |
Group Expression | Выражение возвращает группу переменной либо NULL, если переменная не входит ни в одну группу. |
Read Request Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение, должно возвращать данные, которые будут отправлены на устройство для запроса текущего значения переменной. Выражение должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Read Result Processing Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение преобразует вернувшиеся от устройства данные (полученные через сокет или последовательный порт) в таблицу данных, представляющую значение переменной устройства. Полученные от устройства данные доступны как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. Таблица данных, представляющая значение переменной, обычно создается при помощи функции языка выражений |
Write Request Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение должно возвращать данные, которые будут отправлены на устройство для добавления нового значения переменной, измененной на стороне сервера. Фактически, эти данные содержат значение обновленной переменной, кодированное в соответствии с протоколом устройства. Обновленное значение переменной доступно как таблица данных по умолчанию во время вычисления выражения. Выражение должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Write Result Processing Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение анализирует вернувшиеся с устройства данные на запрос записи переменной (полученные через сокет или последовательный порт). Цель выражения - понять успешность операции записи. Выражение должно возвращать текст об ошибке записи в строковом формате, либо NULL, если операция завершилась успешно. Полученный от устройства ответ доступен как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. |
Динамические функции
Таблица определяет выражения, которые будут использоваться для извлечения параметров определения функции из рядов таблицы, полученной в результате Выражение определения функций. Таким образом, она используется для преобразования каждого ряда этой таблицы в отдельное определение функции.
Параметр | Описание |
Name Expression | Выражение возвращает имя функции. |
Description Expression | Выражение возвращает удобочитаемое для человека описание функции. |
Input Format Expression | Выражение возвращает строковое представление входного формата функции, либо null, если ее входной формат динамический. Более подробно см. раздел Кодирование формата таблицы. Строка формата может использовать видимые или невидимые разделители. |
Output Format Expression | Выражение возвращает строковое представление выходного формата функции, либо null, если ее выходной формат динамический. Более подробно см. раздел Кодирование формата таблицы. Строка формата может использовать видимые или невидимые разделители. |
Help Expression | Выражение возвращает подробное описание функции. |
Group Expression | Выражение возвращает группу функции, либо NULL, если переменная не входит ни в одну группу |
Execution Request Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение, должно возвращать данные, которые будут отправлены на устройство для выполнения операции устройства. фактически, эти данные содержат входные параметры операции (функции), кодированные в соответствии с протоколом устройства. Входные параметры операции (функции) доступны как таблица данных по умолчанию во время вычисления выражения. Выражение должно возвращать строку. К этой строке сначала применяют Выражение кодирования, а результат затем переводится в массив байтов и отправляется на устройство. Преобразование из строки в массив байтов использует кодировку UTF-8. |
Execution Result Processing Expression Constructor | Это выражение должно возвращать текст другого выражения. Это другое, результирующее выражение преобразует выходные данные операции устройства (полученные через сокет или последовательный порт) в таблицу данных, представляющую результат функции устройства на стороне сервера. Полученный от устройства ответ доступен как строка в переменной среды Эта строка получается в результате Выражения раскодирования, которое преобразует необработанные данные, полученные от устройства. Таблица данных, представляющая выходные данные функции, обычно создается при помощи функции языка выражений |
Динамические события
Таблица определяет выражения, которые будут использоваться для извлечения параметров определений событий из рядов таблицы, полученной в результате Выражение определения событий. Таким образом, она используется для преобразования каждого ряда этой таблицы в отдельное определение события.
Параметр | Описание |
Name Expression | Выражение возвращает имя события. |
Description Expression | Выражение возвращает удобочитаемое для человека описание события. |
Format Expression | Выражение возвращает строковое представление формата события, либо null, если его формат динамический. Более подробно см. раздел Кодирование формата таблицы. Строка формата может использовать видимые или невидимые разделители. |
Help Expression | Выражение возвращает подробное описание события. |
Level Expression | Выражение возвращает уровень события по умолчанию. |
Group Expression | Выражение возвращает группу события, либо NULL, если событие не входит ни в одну группу |
Активы device
Драйвер не поддерживает активы.
Настройки device
Аккаунт Flexible устройства предлагает комбинацию из двух наборов переменных устройств:
Переменные, определяемые вручную в таблице Статические переменные
Переменные, чьи определения динамически получаются с устройства в соответствии с правилами, описанными в разделе Работа с динамическими метаданными
Операции device
Аккаунт Flexible устройства предлагает комбинацию из двух наборов функций устройств:
Функции, определяемые вручную в таблице Статические функции
Функции, чьи определения динамически получаются с устройства в соответствии с правилами, описанными в разделе Работа с динамическими метаданными
События device
Аккаунт Flexible устройства предлагает комбинацию из двух наборов событий устройств:
События, определяемые вручную в таблице Статические события
События, чьи определения динамически получаются с устройства в соответствии с правилами, описанными в разделе Работа с динамическими метаданными
Подключение
Драйвер переводит устройство в режим онлайн, если:
TCP соединение с устройством успешно установлено (для режима TCP)
Последовательный порт успешно открыт (для последовательного режима)
Синхронизация
Подробно о синхронизации можно прочитать в описании flexible драйвера устройств.