Первый полученный массив байтов от устройства всегда неправильныйC#

Место общения программистов C#
Ответить
Anonymous
 Первый полученный массив байтов от устройства всегда неправильный

Сообщение Anonymous »


Я пишу программу, которая будет записывать через последовательный порт массив, содержащий 6 байт, а затем отвечающее устройство будет отвечать массивом, содержащим 6 байт. Прочитанные данные затем будут обработаны и отображены в приложении формы Windows. Первый байт — это команда, второй байт — идентификатор, третий и четвертый байт — аргумент, последние два байта — это CRC. Моя проблема в том, что когда я отправляю массив, первый ответивший массив всегда принимается либо неправильно, либо «0 0 0 0 0 0», а иногда байты в массиве сдвигаются местами. Но после одного или двух массивов следующие массивы верны.

Пример неправильно полученного массива:

Отправленный массив: 16 5 0 0 65 15
Получен массив: 165 0 0 0 0 0

Пример сдвинутого массива:

Отправленный массив: 16 5 0 0 65 15
Получен массив: 0 165 0 0 0 0

Пример нулевого массива:

Отправленный массив: 16 5 0 0 65 15
Получен массив: 0 0 0 0 0 0

Вот мой текущий метод чтения данных:

private void SerialRead() { пока (SerialEnable) { буфер байт[] = новый байт[1]; int bytesRead = Sp.Read(буфер, 0, 1); если (bytesRead > 0) { номер байта = буфер [0]; переключатель (SerialByteCounter) { случай 0: ReceivedBytes [SerialByteCounter] = число; ++SerialByteCounter; перерыв; Дело 1: если (число == идентификатор) { ReceivedBytes [SerialByteCounter] = число; ++SerialByteCounter; } перерыв; случай 5: ReceivedBytes [SerialByteCounter] = число; ++ReceiveCounter; РазборСообщения(); СериалБайтСчетчик = 0; перерыв; по умолчанию: ReceivedBytes [SerialByteCounter] = число; ++SerialByteCounter; перерыв; } } } } Вот мой метод проверки отправленного и полученного массива:

Console.WriteLine("BytesToSend:"); foreach (байт b в BytesToSend) { Console.Write(b + " "); } Консоль.WriteLine(); Console.WriteLine("ReceivedBytes:"); foreach (байт b в ReceivedBytes) { Console.Write(b + " "); } Консоль.WriteLine(); Я также попробовал Sp.ReadByte(); метод. Эта проблема также возникает в QT Creator. Может ли это быть проблемой с моей стороны, или операционная система неправильно обрабатывает полученные данные? Заранее спасибо за любые ответы.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»