Я создаю приложение человеко-машинного интерфейса в C#, где необходимо установить связь через последовательный порт между приложением и контроллером робота на основе STM32. Но так как этот контроллер основан на C ++, мне нужно преобразовать коммуникационные объекты в байтовые массивы и затем отправить их. Я пробовал сериализацию классов, но не работает, потому что она генерирует массив данных большего размера (445 байт), а позиции переменных не совпадают, поэтому код на С ++ не может его правильно проанализировать.
Вот мой класс, который нужно отправить роботу:
[Serializable]
public class RobotData
{
public RobotData(Byte _axisCount)
{
axisCount = _axisCount;
axData = new AxisData[axisCount];
for (int i = 0; i < axisCount; i++)
{
axData[i] = new AxisData((Byte)i);
}
}
public Int16 messageType;
public Byte axisCount;
public Int32 statusDWord;
public AxisData[] axData;
}
А вот определение внутреннего класса:
public class AxisData
{
public AxisData(Byte _axisId)
{
axisId = _axisId;
}
public Byte axisId;
public Int32 position;
public float velocity ;
public float acceleration;
public float torque;
}
Итак, я пытаюсь создать байтовый массив, где он будет go вот так:
- позиция / переменная
- 0 / messageType
- 2 / axisCount
- 3 / statusDWord
- 7 / axData [0] .axisId
- 8 / axData [0] .position
- ...
- 54 / axData [2]. момент
(общий размер 58 байт)
Существует ли какой-либо универсальный способ (работающий с любым классом), который создает этот массив чистых необработанных данных? И как могут быть входящие байты данных построены в подобный класс? Спасибо.