Перейти к содержанию

    

RS232 неправильно работает

   Хочу получить данные с прибора ерез RS232. Через Putty все работает хорошо,

посылаем 'ID' - в ответ получаем строку идентификации, посылаем 'QM' - получаем строку измерительных данных.

В своей программе после посылки 'ID' я получаю '0', повторная посылка дает строку идентификации, но при посылке 'QM' получаю строку, полученную ранее, чтобы получить нужный ответ нужно отправить QM много раз.

В чем может быть дело? Возможно нужно как-то очищать буфер? или еше что... как putty это делает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
28 минут назад, Dubov сказал:

В своей программе после посылки 'ID' я получаю '0', повторная посылка дает строку идентификации, но при посылке 'QM' получаю строку, полученную ранее, чтобы получить нужный ответ нужно отправить QM много раз.

Возможно, ваша программа посылает неправильный перевод строки. Попробуйте поиграться с разными вариантами '\r','\n'

 

P.S. "Неправильно" пишется слитно, исправил. Будьте внимательнее, особено в заголовке темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за исправление.

Я пробовал менять перевод строки - вообще ничего не работает. Так что перевод строки верный. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, Dubov сказал:

Я пробовал менять перевод строки - вообще ничего не работает. Так что перевод строки верный. 

Гуглим "снифер COM-порта".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
On 10/25/2018 at 10:10 PM, Dubov said:

   Хочу получить данные с прибора ерез RS232. Через Putty все работает хорошо,

. . . 

Проверьте, что из Вашей программы передается в прибор и с какими таймаутами.

Сниффер - хороший вариант. Эконом-решение - это подключиться аппаратно (2 провода Tx GND) на Tx Вашего порта другим PC c тем же putty (или на том же PC если есть второй сериальный порт, желательно аппаратный).

Если работаете из Win - смотрите API Win32 для COM-портов, настройки в структуре DCB. Тамже есть и команды управления буфером и потоком (CTS, RTS, DTR, DSR).

ps - смотреть что передается по Tx надо в режиме просмотра терминала "HEX"

psps - В Вашей программе скорее всего следует отключить (или наоборот, включить) управление потоком (CTS-RTS). Смотря как работает интерфейс опрашиваемого прибора. Если по 3 проводам - Tx-Rx-GND - то поток должен быть отключен (или использован нуль-модемный кабель с перемычками на CTS-RTS).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
On 10/25/2018 at 10:10 PM, Dubov said:

Через Putty все работает хорошо,

посылаем 'ID' - в ответ получаем строку идентификации, посылаем 'QM' - получаем строку измерительных данных.

А в putty ваши набираемые ID и QM видны? Т.е. прямо набираете на клавиатуре и видите на экране, что набираете? Если да (и в putty вы специально не включали локальное эхо), то ваша программа должна ждать на вход копию того, что она отправила, а за этой копией уже будет ответ. И принимать она (программа) должна постоянно - буфера не резиновые, могут переполнится (хотя для 3х символов вряд ли переполнятся)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PuTTY очень неплохой терминал. Для большинства задач хватает, лично мне. Во всяком случае, если ПК-шное приложение, общающееся с железкой, должно быть красивым, делаю свою консоль с блэкджеком и с разноцветным текстом, шрифтами и пр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 часов назад, Arlleex сказал:

PuTTY очень неплохой терминал. Для большинства задач хватает, лично мне. Во всяком случае, если ПК-шное приложение, общающееся с железкой, должно быть красивым, делаю свою консоль с блэкджеком и с разноцветным текстом, шрифтами и пр.

Поддерживаю. Putty - терминал с самой полной и корректной поддержкой ESC-последовательностей, Unicode и прочего, какой я только видел. И наименее глючный. Если-б ещё добавить: hex-режим, отправку шаблонов, Z-modem, версии под ведроид/яблокофон и ещё пару плюшек - вообще цены бы ему не было!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно к RX/TX логическим анализатором прицепиться. Заодно и таймауты увидеть. Возможно проблема с эхом (например Вы его ловите вместо ответа). Или с парсером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно смотреть исходники, может Вы вообще ID отправляете в ASCII формате (как выше сказали сниффер хороший вариант, я пользуюсь Eltima он и тайм-метки показывает можно задержки посчитать)

 

а очистить буфера можно: PurgeComm(hPort, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_TXABORT | PURGE_RXABORT); 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

В 28.10.2018 в 16:44, k155la3 сказал:

Проверьте, что из Вашей программы передается в прибор и с какими таймаутами.

Сниффер - хороший вариант. Эконом-решение - это подключиться аппаратно (2 провода Tx GND) на Tx Вашего порта другим PC c тем же putty (или на том же PC если есть второй сериальный порт, желательно аппаратный).

Согласен. Один проводок подпаять на третий контакт(TX) передатчика (в нумерации разъема DB-9), второй - на пятый контакт (земляной) подпаять. Завести на комп с приемником/сниффером (на второй(RX) и пятый (земляной) контакты соответственно). Только не на горячую! Выводить на экране приемника, конечно, в HEX-виде - дабы ни один байтик не утёк. Но работа с осциллоскопом имеет свои прелести: на глазах и частота/скорость, и битики "парити", кои таковые включены.. А может, все-таки что-то с настройками?

Если можно, посмотреть бы листинг прослушек с Putty и с проги.

ЗЫ. Сам для приема юзаю Com Port Toolkit - в HEX-формате все как родное)

PPS. Сейчас развелось море USB-to-COM адаптеров, так что дополнительный физический COM-порт не проблема

Имхо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Китайский анализатор за 300р с софтом от SaleaeLogic давно бы уже всё показал, ну чессслово...

Да и вообще пригодится, ибо не только UART'ом мир полон

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти