почему передача данных serila пропускает шаблон данных perticular в c #? - PullRequest
0 голосов
/ 16 октября 2018

Я пишу приложение последовательной связи с C # на C.
Где я пытаюсь записать следующий массив byte[] через последовательный порт.
Массив байтов
data =0x01, 0x01, 0x03, 0x00, 0x01,0x05, 0x00, 0x44, 0x33, 0x48, 0x45, 0x4c, 0x4c, 0x4f

C # SerialPort Code:

port.DiscardOutBuffer();
port.Write(data, 0, data.Length);
port.Write("\n");
port.DiscardOutBuffer();


На стороне получателя я читаю с помощью приложения переменного тока.
У меня есть вопросы ниже .

  • Почему первые два байтаданные пропускаются.Если я изменю первые 2 байта (0x01, 0x01) на некоторые другие данные, все будет работать нормально.
  • Во-вторых, если я удалю 3-ю строку port.Write ("\ n");. Данные не читаются в приложении c.

  • Существуют ли какие-либо ограничения шаблона при передаче данных через последовательный порт?

  • После записи байтового массива дополнительный символ новой строки является обязательным?

1 Ответ

0 голосов
/ 16 октября 2018

Пока вы не даете достаточно информации, чтобы действительно знать, что здесь происходит, я могу ответить на ваш общий вопрос.

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

Итак, многие персонажи обрабатываются особым образом.Я полагаю, что последний вопрос, который вы задаете о необходимости перевода строки, - да.Это может быть обработано специальным образом либо на отправляющей стороне (ничего не отправляется через порт до отправки новой строки), либо на принимающей стороне (символы буферизуются до получения новой строки, тогда байты будут доставлены принимающей программе).

Вы можете обнаружить, что символы возврата каретки (\ r) добавляются до или после новой строки.В некоторых странных случаях вы можете обнаружить, что каждый отправляемый вами символ возвращается вам («эхо»).Все это восходит к тем дням, когда консоль использовалась для взаимодействия, включая использование телетайпов.Некоторые символы действуют как «управление потоком», что также может сбивать с толку.

Возможно, вам понадобятся некоторые подробности о том, как вы открываете порты, чтобы убедиться, что он передает и получает двоичные данные прозрачно, и вы можете установитьтайм-аут получения до нуля, чтобы байты могли быть получены немедленно.Проверьте вызовы WinAPI SetCommState () и SetCommTimeouts ().

...