Двоичная команда в SerialPort

191
11 октября 2017, 05:27

Добрый день. Подскажите как скормить двоичную команду функции SerialPort.Write();

Например по протоколу у меня команда 29h;

Answer 1

Для начала понять, какого размера команда. Она не бывает двоичной, но у неё есть длина в байтах. Затем создать соответствующий массив байтов и послать его.

byte cmd = new byte[] { 0x29 };         // 1 байт
byte cmd = new byte[] { 0x29, 0x00 };   // Little indian, 2 байта
byte cmd = new byte[] { 0x00, 0x29 };   // Big indian, 2 байта
byte cmd = BitConverter.GetBytes(0x29); // Зависит от текущей архитектуры, 4 байта
sp.Write(cmd, 0, cmd.Length)

Меня смутило одно , в расшифровке прокола написано: Формат сообщения: Байт 0: признак начала сообщения STX; Байт 1: длина сообщения (N) – ДВОИЧНОЕ число. В длину сообщения не включаются байты 0, LRC и этот байт; Байт 2: код команды или ответа – ДВОИЧНОЕ число; Байты 3...(N+1): параметры, зависящие от команды (могут отсутствовать); Байт N+2 – контрольная сумма сообщения – байт LRC – вычисляется поразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).

const byte STX = 0; // Или чему там?
byte cmd = new byte[] { STX, default(byte), 0x29, default(byte) };
cmd[1] = cmd.Length - 3;
for (int q=1, last=cmd.Length-1; q<last; ++q) cmd[last] ^= cmd[q];
sp.Write(cmd, 0, cmd.Length)
READ ALSO
Выполнение запроса из c#

Выполнение запроса из c#

ЗдравствуйтеЕсть программа на asp

147
Удалить строки из .txt [требует правки]

Удалить строки из .txt [требует правки]

Удалить строки изtxt это distinct, а если взять только те строки, которые начинаются с = знака, то как будет ?

144
Проблемы со стартом

Проблемы со стартом

Установил Unity на Linux Mint, вроде стало, но при работе однаруживаются проблемы

244
C# MVC WebGrid вывести список

C# MVC WebGrid вывести список

Добрый! Помогите, сломал уже головуесть список List<List<Karta>> Сам класс Karta состоит из свойств KardId, Name и т

251