|
|
  |
Не получаеться считать данные из COM порта на ПК |
|
|
|
Sep 12 2005, 09:44
|
Участник

Группа: Новичок
Сообщений: 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.
|
|
|
|
|
Sep 12 2005, 09:58
|

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

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

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

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

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

|
Цитата(ASV @ Sep 12 2005, 17:15) С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему. Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично. И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.? Тогда по всей видимости придется Вам разбираться с byte-форматом посылаемый из Comspy. Возможно что идет передача какого-то информационного контекста вместе с Вашими данными о котором Вы не имеете никакого представления. Так что необходимо разобраться что 'выплевывает' Comspy.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Sep 13 2005, 09:42
|
Участник

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

|
Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит.
|
|
|
|
|
Sep 13 2005, 09:59
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(lolikandr @ Sep 13 2005, 12:42) Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит. Тут бы добавить, как передаются байты через заглушку - сам на себя. Формат порта при этом точно совпадает, остаются проблемы с обработкой. Я передавал с компа на комп и если символы выдавались быстрее, чем через 5 -10 мс, то они пропадали. Удачи.
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Sep 14 2005, 13:17
|
Участник

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

|
спасибо всем кто отвечал. тут была моя оплошность был лишний сто бит.
|
|
|
|
|
Sep 17 2005, 12:46
|
Частый гость
 
Группа: Свой
Сообщений: 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), даже пришлось считывать температуру с термодатчика и в соответствии с этим подстраивать делитель.
|
|
|
|
|
Sep 26 2005, 20:10
|
Участник

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

|
Хотя действительно я работаю от внутреннего генератора, но дело тут не в этом. Это даже проявляеться когда я шлю данные с одного COM-порта на другой. Скорее всего я пропустил один из параметров при настройке ком порта. Но на данный момент, при использовании другого компонента, это не проявляеться.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|