реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не получаеться считать данные из COM порта на ПК
ASV
сообщение Sep 12 2005, 09:44
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 28-01-05
Пользователь №: 2 279



Вот такая проблемка. Делаю я устройство, одной из функций которого являеться связь с ПК по RS-232. Для чтения COM порта на ПК я написал програмку на Delphi и получилась вот такая неприятная ситуация:
(два ком порта соеденены Rx-Tx)
При чтении данных из буфера к некоторым байтам прибавляеться 128 и при чем тут нет никакой закономерности. Вот пример отправленных и полученных байт:

отправил получил
49 | 177
50 | 178
51 | 51
52 | 180
53 | 53
54 | 54
55 | 183
56 | 184
57 | 57

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

Использовал компоненты ComPort от Winsoft, и ComDrv32.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Sep 12 2005, 09:50
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Не првлено настроены параметры портов (скорость,стоп биты, четность и т.д. )
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 12 2005, 09:58
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Для начала попробуйте передавать и принимать не блоками, а байтом (т.е. блок состоящий из одного элемента). Если все будет нормально увеличте на один и т.д. Когда обнаружиться ошибка вот тогда и надо будет разбираться.
За одно проверьте правильность настройки Ваших портов - они должны быть полностью одинаковы настроены (только один на прием а другой на передачу).
А для написания программы для портов лучше разберитесь с функциями WinAPI. Это будет гораздо полезней. Будете все это писать сами без использования каких либо сторонних библиотек.
Вот Вам пара прекрасных статей:
Прикрепленные файлы
Прикрепленный файл  COM.rar ( 104.77 килобайт ) Кол-во скачиваний: 285
 


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
ASV
сообщение Sep 12 2005, 13:15
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 28-01-05
Пользователь №: 2 279



С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему.
Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично.
И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.?
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 12 2005, 14:12
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(ASV @ Sep 12 2005, 17:15)
С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему.
Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично.
  И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.?
*


Тогда по всей видимости придется Вам разбираться с byte-форматом посылаемый из Comspy. Возможно что идет передача какого-то информационного контекста вместе с Вашими данными о котором Вы не имеете никакого представления. Так что необходимо разобраться что 'выплевывает' Comspy.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
lolikandr
сообщение Sep 13 2005, 09:42
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 25-06-05
Пользователь №: 6 300



Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 13 2005, 09:59
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(lolikandr @ Sep 13 2005, 12:42)
Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит.
*


Тут бы добавить, как передаются байты через заглушку - сам на себя. Формат порта при этом точно совпадает, остаются проблемы с обработкой. Я передавал с компа на комп и если символы выдавались быстрее, чем через 5 -10 мс, то они пропадали.
Удачи.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ASV
сообщение Sep 14 2005, 13:17
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 28-01-05
Пользователь №: 2 279



спасибо всем кто отвечал. тут была моя оплошность был лишний сто бит.
Go to the top of the page
 
+Quote Post
Trashy
сообщение Sep 17 2005, 12:46
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049



Цитата(ASV @ Sep 12 2005, 12:44)
  49      |    177
  50      |    178
  51      |      51
  52      |    180
  53      |      53
  54      |      54
  55      |    183
  56      |    184
  57      |      57
 



Шумит старший разряд.
Не совпадение скорости передачи. Видимо, вы пользуете миароконтроллер от внутреннего генератора, а не от внешнего кварцевого резонатора. В случаях использования внутренних генераторов, нужно индивидуально, для каждого контроллера подбирать делитель. То есть, генерить на пин прямоугольники и смотреть частоту. После этого высчитывать делитель. Если так не делать, то можно очень встрять, например при прогреве или переохлаждениии устройства. Как раз начинает шуметь старший бит.
В одном проекте(от -65градусов, до +65), даже пришлось считывать температуру с термодатчика и в соответствии с этим подстраивать делитель.
Go to the top of the page
 
+Quote Post
ASV
сообщение Sep 26 2005, 20:10
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 28-01-05
Пользователь №: 2 279



Хотя действительно я работаю от внутреннего генератора, но дело тут не в этом. Это даже проявляеться когда я шлю данные с одного COM-порта на другой. Скорее всего я пропустил один из параметров при настройке ком порта. Но на данный момент, при использовании другого компонента, это не проявляеться.
Go to the top of the page
 
+Quote Post
Mik174
сообщение Oct 29 2007, 20:48
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 6-01-07
Пользователь №: 24 139



Для облегчения отладки программ обмена с устройствами через СОМ порт есть замечательная программа portmon.
Она "садится верхом" на выбранный порт и отслеживает весь обмен по нему.
Т.е. программа пользователя, написанная, например, на Delphi, даже не "чувствует" ее присутствия.
При этом показывается время событий, что именно произошло - например, имел место запрос на 15 байт (функция Windows), реально получено 7 и произошел таймаут, или получены все 15 успешно и т.д.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 00:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01447 секунд с 7
ELECTRONIX ©2004-2016