106 / 16 / 4
Регистрация: 13.04.2009
Сообщений: 104
|
|||||||||||
1 | |||||||||||
Неверные данные с COM порта09.07.2013, 12:06. Показов 3236. Ответов 3
Метки нет (Все метки)
Добрый день. Пишу ПО для работы с автовесами. Данные передаются через COM порт. У меня есть код для приема данных:
Например я получаю с весов следующее:
Подскажите в чем может быть проблема? PS. Данные текут непрерывным потоком.
0
|
09.07.2013, 12:06 | |
Ответы с готовыми решениями:
3
Неверные данные Неверные данные в отчете TCP Сокет. Иногда приходят неверные данные Датчик температуры DS18B20: на выходе неверные данные |
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
10.07.2013, 15:39 | 2 |
Добрый день.
Перво-наперво сверьте с документацией параметры порта, которые вы выставляете в своем приложении: Baud Rate, Parity, Stop Bits, Data Bits и т.д. В 90% случаев кривые данные приходят из-за несовпадения параметров порта на девайсе и контроллере.
0
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|
10.07.2013, 16:19 | 3 |
не хочу наговаривать на класс SerialPort, но его событие DataReceived не всегда срабатывает на полный ответ, т.е. ответ иногда разбивается на 2 ответа. (хотя может у меня такие девайсы попадаются)
в общем как избавлялся от этой проблемы: читал в отдельном потоке по 1 байту с порта (беспрерывно) после прочтения определённого байта проверял не конец-ли это посылки (по протоколу девайса и проверкам контрольной суммы) если конец то обнулял буфер, вызывал событие. если наступил тайм-аут, а посылка ещё не пришла: или событие отсуствия ответа (если буфер совсем пуст), либо события ошибочного CRC (если есть хоть байт). если нужно могу код скинуть.
0
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
10.07.2013, 16:48 | 4 |
Совершенно верно. Срабатывание события зависит от свойства ReceivedBytesThreshold. Если там поставить 1, то событие будет срабатывать как только придет первый байт сообщения.
Если используется протокол с всегда фиксированной длиной сообщений, то это значение можно просто выставить на длину сообщения и в обработчике считывать сообщение целиком. А так — да, надо считывать кусками.
1
|
10.07.2013, 16:48 | |
10.07.2013, 16:48 | |
Помогаю со студенческими работами здесь
4
Неверные данные при изменении частоты передачи EasyTable - неверные данные для поля TIME Шифрация сессий: скрипт PHP передает неверные данные в программу При вводе даты рождения и номера телефона в структуру выдает неверные данные Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |