Приложение Б.
Структура бинарного массива, передаваемого в команде 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
|
Твердое тело
|