Сообщения фиксированной длины через COM порт - C#

Узнай цену своей работы

Формулировка задачи:

Нужно опрашивать прибор по COM порту. Протокол RS232. Я бы мог спросить в других ветках, суть одна - байты. в ветке шарпа народ кажется более УМНЕЕ. Что хотят здесь от меня? я не могу разобраться.
Обмен реализован сообщениями фиксированной длины. Формат сообщения следующий: 0 3 4 5 L-3 L-2 L-1 адрес прибора Код команды Параметры или данные 9, 25 или 65 байт контр. сумма Длина сообщения L равна 16,32 или 72 байта в зависимости от количества данных. Адрес прибора задается в двоично-десятичном коде и соответствует серийному номеру прибора. Младший байт адреса передается первым. При работе с сетью приборов адрес должен указываться в каждой команде. Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251. Контрольная сумма:1-й байт сумма по модулю 2 2-й байт сумма по модулю 256 Формат ответа такой же. При успешном выполнении команды в байте 4 возвращается код команды, иначе возвращается код ошибки или ответа не будет совсем. Перечень ошибок приведен в Таблице 9.
1) Почему пишут "Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251" Но в мониторе видно что порядок вообще обратный, а именно надо посылать в таком порядке:
byte[] broadcastInvoke = { 0x51, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A };
Почему в обратном порядке отправлено первые 4 байта?
Эту строку я скопипастил из монитора и сделал массив, тестировал соединение
2)L-3, L-2,L-1 это длина в байтах? Вот есть команда 14 (запрос заголовка архива с устройства). Адрес устройства я получил, команда 14, параметры команды 01. Заполняю: 35 51 00 00 14 01 XX XX XX XX XX XX XX XX XX XX - что в этих иксах писать? Я могу конечно посмотреть монитор опять, но я не пойму суть. 2) Поясните про контрольные суммы по модулю 2 и 256 - как их генерить? Я понимаю что это XOR, но что складывать и как выводить в сообщение? Какой порядок? Какие байты складываются? опять обратный порядок в контрольй сумме или нет?

Решение задачи: «Сообщения фиксированной длины через COM порт»

textual
Листинг программы
byte[] bytes = new byte[] { 0x35, 0x51, 0x02 };
byte crc = 0;
foreach (var b in bytes)
{
  crc ^= b;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5