4.1.1.2.8.3. Модуль Data Buffer

 
 
Сервер ввода/вывода Astra.Server получает от источников данные об объектах. Под объектами здесь понимаются отдельные параметры или структуры, содержащие набор параметров. Для этого в Astra.Server создаётся описание соответствующих объектов: каждому параметру объекта соответствует отдельный сигнал, для которого настраивается получение значений данного параметра объекта от соответствующего источника.
 
 
Однако, если в источнике выполняется буферизация отправляемых данных, то при получении данных из буфера источника необходимо сначала определить объект, к которому относятся полученные данные, после чего положить полученные данные в сигналы объекта-получателя.
 
Для решения данной задачи предназначен модуль Data Buffer.
 
 
Модуль Data Buffer выполняет следующие функции:
определяет объект-получатель данных в Astra.Server
перекладывает полученные данные в сигналы объекта-получателя
 

Принцип работы

 
Буфер данных представляет из себя последовательность строк. Строка буфера данных – это отдельная запись в буфере данных источника о некотором событии.
 
Строка буфера данных состоит из полей:
в одном из полей хранится код события и код объекта, в котором произошло событие. Данное поле будем называть идентифицирующим;
В зависимости от реализации источника, код события может состоять из различного количества бит или отсутствовать вовсе. В зависимости от устройства идентифицирующего поля в источнике, настраиваются маски кода объекта и кода события в настройках модуля Data Buffer (см. подробнее).
в остальных полях хранятся параметры события.
 
Примером параметра события является значение, вызвавшее событие.
 
Список полей в строке буфера одинаков для всех строк буфера данных и определяется устройством источника.
 
В Astra.Server получение данных из буфера источника может выполнять любой коммуникационный модуль. Для того, чтобы получение данных из буфера источника и разбор полученных данных выполнялись независимо, в Astra.Server полученные данные записываются в специальную папку буфера:
каждое поле строки буфера записывается в подготовленный для него сигнал в папке буфера;
каждой строке буфера (их количество определяется настройками источника) в папке буфера соответствует свой
набор сигналов для хранения полей этой строки.
 
 
 
При записи строки буфера в сигналы значение идентифицирующего поля записывается последним: изменение этого сигнала означает, что все поля строки буфера записаны в соответствующие им дочерние сигналы и можно начинать разбор данных записанных в сигналы.
 
Разбор начинается при изменении значения идентифицирующего сигнала и состоит из следующих этапов:
получение кода объекта из идентифицирующего сигнала с помощью маски кода объекта;
перекладка значений сигналов из папки буфера в сигналы объекта, имеющего соответствующий код.
 

Разбор идентифицирующего сигнала

 
Ниже показано, как модуль выделяет из идентифицирующего сигнала код объекта и код события.
 
В идентифицирующем сигнале (сигнал типа uint4 в папке буфера) содержится значение (к примеру 555). Модуль Data Buffer работает с этим значением в шестнадцатеричной системе счисления.
 
 
Модуль производит разбор сигнала в соответствии с принципом наложения масок на значение сигнала по правилам логической операции "И":
Маска значения – выделяет из сигнала часть, содержащую код события;
Маска кода объекта – выделяет из сигнала часть, содержащую код объекта.
 
Маски устанавливаются пользователем в настройках модуля.
 

Выделение кода объекта

 
 
 

Выделение кода события

 
 
Результат разбора:
Код объекта – 2
Код события – 2B (в десятичной системе счисления – 43)
После разбора буфера модуль запишет код события 43 в сигнал-получатель в объекте 2.