Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
106 / 16 / 4
Регистрация: 13.04.2009
Сообщений: 104
1

Неверные данные с COM порта

09.07.2013, 12:06. Показов 3236. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Пишу ПО для работы с автовесами. Данные передаются через COM порт. У меня есть код для приема данных:

C#
1
2
3
4
5
6
7
8
9
10
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            int byteRecieved = serialPort1.BytesToRead;
            byte[] mBytes = new byte[byteRecieved];
 
            serialPort1.Read(mBytes, 0, byteRecieved);
 
            string s = BitConverter.ToString(mBytes);
            Console.WriteLine(s);
        }
Байты бегут, значения их меняются при смене веса, НО!!! Приходят данные, отличные от того, что дано в документации.

Например я получаю с весов следующее:

C++
1
2
82-3A-81-A0-C5-B2-C1-B0-C1-B0-C1-8D-
82-3A-81-A0-C5-B2-C1-B0-C1-B0-C1-8D
А по документации начальный байт должен быть 0x2, а КС - 0xD. Здесь даже близко такого нет. В общем у меня приходят совершенно другие данные и вес я снять не могу. Более того, в документации размер пакета - 16, а у меня только 12.

Подскажите в чем может быть проблема?

PS. Данные текут непрерывным потоком.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2013, 12:06
Ответы с готовыми решениями:

Неверные данные
Добрый день. Решая очередную задачу наткнулся на проблему, что данные, которые записываются в файл...

Неверные данные в отчете
Добрый день, Уважаемые форумчане! Есть задание доработать базу в Access. Первое с чем я...

TCP Сокет. Иногда приходят неверные данные
При отправка данных с клиента на сервер....иногда случается так, что данные отправленные на сервер...

Датчик температуры DS18B20: на выходе неверные данные
Вечер добрый. Подскажите как решить проблему с датчиком температуры. В общем если не углубляться,...

3
Эксперт .NET
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
Эксперт .NET
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
10.07.2013, 16:48 4
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
его событие DataReceived не всегда срабатывает на полный ответ, т.е. ответ иногда разбивается на 2 ответа.
Совершенно верно. Срабатывание события зависит от свойства ReceivedBytesThreshold. Если там поставить 1, то событие будет срабатывать как только придет первый байт сообщения.
Если используется протокол с всегда фиксированной длиной сообщений, то это значение можно просто выставить на длину сообщения и в обработчике считывать сообщение целиком.

А так — да, надо считывать кусками.
1
10.07.2013, 16:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2013, 16:48
Помогаю со студенческими работами здесь

Неверные данные при изменении частоты передачи
В скетче каждые N миллисекунд отправляются данные с датчика в приложение на android. При...

EasyTable - неверные данные для поля TIME
что означает это сообщение? использовал базу данных EasyTable.

Шифрация сессий: скрипт PHP передает неверные данные в программу
Вот есть код php: function xorencode($str, $key) { while(strlen($key) < strlen($str)) {...

При вводе даты рождения и номера телефона в структуру выдает неверные данные
#pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include <conio.h>...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru