Отправка строки и шестнадцатеричного числа в интерфейс

#string #serial-port #hex

#строка #последовательный порт #шестнадцатеричный

Вопрос:

Я пытаюсь отправить строку «QZ1» в интерфейс; однако руководство принимающего устройства требует, чтобы «Каждая командная строка, отправляемая получателю, должна начинаться с {*} (шестнадцатеричное значение 2A) и заканчиваться возвратом каретки {cr} (шестнадцатеричное значение 0D)». Я прошел через несколько разных итераций без успеха.

Не мог бы кто-нибудь любезно указать мне направление записи относительно того, как лучше всего отправить строку в comport, предваряя строку символом {*} (hex 2A) и заканчивая возвратом каретки {cr} (hex 0D)?

Комментарии:

1. Что такое поведение ?

2. На выходе comport (официально: COM-порт) принимает один 8-битный символ из программы и отправляет его по одному единственному выходному каналу в виде строки битов, сначала младший бит. При вводе он считывает входящую строку битов из удаленного источника, собирает эти биты в один 8-битный символ и передает его программе в таком виде. Таким образом, его задача на выходе — сериализовать и отправить один 8-разрядный символ; а на входе — получить и распараллелить один 8-разрядный символ. COM-порт обычно содержит полнодуплексный UART (универсальный асинхронный приемник-передатчик). Intel 8251 был одним из первых UARTs.

3. Спасибо тебе за помощь, Пит. К сожалению, приемник зависает, когда я записываю строку ( _XMR3Comport. Запишите(«*SVr») ) в интерфейс. В руководстве говорится, что «Завершающий {cr} должен завершать каждую команду, даже если несколько команд отправляются последовательно». Хотя я не могу быть уверен, мне интересно, ищет ли получатель возврат каретки в шестнадцатеричном формате и не распознает ли строковое значение возврата каретки » r». Может ли существовать какой-либо другой формат для записи строки в comport? Еще раз большое спасибо, Пит.

4. Пит — Ты был прав. Оказалось, что я неправильно настроил квитирование comport, и как только я изменил его на соответствующую настройку, все заработало отлично. Спасибо за вашу помощь. Счет

Ответ №1:

Да, это может сбивать с толку, что связано с переключением с символов на их шестнадцатеричные представления и обратно. Вот что нужно сделать. Не беспокойтесь, что в документе написано «шестнадцатеричное это и шестнадцатеричное то». Просто

  1. отправьте символ ‘*’
  2. отправьте символ ‘Q’
  3. отправьте символ ‘V’
  4. отправьте символ ‘r’ для возврата каретки

Итак, вы бы сохранили в C-строке: «*QV r» и отправили оттуда.

HTH. Если нет, задайте еще несколько вопросов.

Ответ №2:

насколько я могу понять, вам нужно добавить только 2 байта к строке, которую вы отправляете для exmaple, hello изменится на *hellor обратите внимание, что 2A — это шестнадцатеричное значение для символа ascii * и 0D-представление r в charmap