Сообщения фиксированной длины через COM порт - C#
Формулировка задачи:
Нужно опрашивать прибор по COM порту. Протокол RS232. Я бы мог спросить в других ветках, суть одна - байты. в ветке шарпа народ кажется более УМНЕЕ. Что хотят здесь от меня? я не могу разобраться.
1) Почему пишут "Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251"
Но в мониторе видно что порядок вообще обратный, а именно надо посылать в таком порядке:
Почему в обратном порядке отправлено первые 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, но что складывать и как выводить в сообщение? Какой порядок? Какие байты складываются? опять обратный порядок в контрольй сумме или нет?
Обмен реализован сообщениями фиксированной длины.
Формат сообщения следующий:
0 3 4 5 L-3 L-2 L-1
адрес прибора Код команды Параметры или данные 9, 25 или 65 байт контр. сумма
Длина сообщения L равна 16,32 или 72 байта в зависимости от количества данных.
Адрес прибора задается в двоично-десятичном коде и соответствует серийному номеру прибора. Младший байт адреса передается первым. При работе с сетью приборов адрес должен указываться в каждой команде. Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251.
Контрольная сумма:1-й байт сумма по модулю 2
2-й байт сумма по модулю 256
Формат ответа такой же. При успешном выполнении команды в байте 4 возвращается код команды, иначе возвращается код ошибки или ответа не будет совсем. Перечень ошибок приведен в Таблице 9.
byte[] broadcastInvoke = { 0x51, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A };
Эту строку я скопипастил из монитора и сделал массив, тестировал соединение
Решение задачи: «Сообщения фиксированной длины через COM порт»
textual
Листинг программы
byte[] bytes = new byte[] { 0x35, 0x51, 0x02 }; byte crc = 0; foreach (var b in bytes) { crc ^= b; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д