Jump to content

    

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

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

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

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

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

Share this post


Link to post
Share on other sites
28 минут назад, Dubov сказал:

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
15 минут назад, Dubov сказал:

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

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

Share this post


Link to post
Share on other sites
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).

Share this post


Link to post
Share on other sites
On 10/25/2018 at 10:10 PM, Dubov said:

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
14 часов назад, Arlleex сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

 

В 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-порт не проблема

Имхо.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now