×

Приложение Б.
Структура бинарного массива, передаваемого в команде MBC_VALUES

Бинарный массив, передаваемый в команде MBC_VALUES, содержит разнородные данные, состав которых может меняться в зависимости от решаемой задачи и других обстоятельств. Поэтому для данного массива предлагается гибкий формат, в котором каждая структурная единица данных, соответствующая физической переменной, представлена блоком определенного типа. Количество блоков в одном массиве произвольно, но в общем случае однотипные блоки повторяться не должны.
Каждый блок имеет заголовок, определяющий его тип. Кроме того, заголовок имеет и сам бинарный массив. Непосредственно данные блоков представляют собой определенно количество чисел типа double (стандартное вещественное число двойной точности, 8 байт). В заголовке блока и массива могут использоваться и иные типы данных. Однако для обеспечения совместимости с имеющейся в данный момент реализацией обмена в ПК FlowVision, предлагается размер заголовков сделать кратным длине типа double, то есть 8 байтам. Неиспользуемые байты заголовков считать резервом на будущее. Значения неиспользуемых байт предлагается устанавливать в 0.
При передаче числовых данных используется представление Little Endian.
 
Общая структура бинарного массива
Общая структура бинарного массива выглядит следующим образом:
 
Заголовок массива
Заголовок блока 1
Данные блока 1
Заголовок блока 2
Данные блока 2
…
 
Заголовок массива
Заголовок массива имеет размер 8 байт (для выравнивания по границе типа double).
 
1 байт
Номер версии структуры бинарного массива
(в настоящее время – 1)
2-5 байты
Количество блоков в массиве
(целое число размером 4 байта, Little Endian)
6 байт
Резерв
7 байт
Резерв
8 байт
Резерв
 
Заголовок блока
Заголовок блока служит для идентификации блока и определения состава передаваемой в нём информации. Он имеет размер 8 байт (для выравнивания по границе типа double).
 
1-2 байт
Код типа блока
3-6 байты
Количество чисел типа double в блоке
(целое число размером 4 байта, Little Endian)
7 байт
Резерв
8 байт
Резерв
 
Количество чисел типа double в блоке передается для контроля на принимающей стороне для исключения ошибок.
 
Поддерживаемые типы блоков
 
Код типа
Название
Описание
Размер
(в числах типа double)
1
BodyType
Тип тела
1
2
Position
Вектор перемещения
3
3
Orientation
Матрица поворота
9
4
Force
Вектор силы
3
5
Moment
Вектор момента
3
 
Внутренняя структура блоков
 
struct BodyType
{
   uint8_t type;
   std::byte reserved[7];
};
 
struct Position
{
   double x, y, z;
};
 
struct Orientation
{
   double xx, xy, xz;
   double yx, yy, yz;
   double zx, zy, zz;
};
 
struct Force
{
   double x, y, z;
};
 
struct Moment
{
   double x, y, z;
};
 
Поддерживаемые типы тел
Тип тела передается в качестве первого поля блока BodyType.
 
Код типа тела
Описание
1
Твердое тело