LINUX.ORG.RU

Проблема с программированием COM порта


0

0

Я уже писал об этом ниже. Итак. Есть устройство, подключеное к СОМпорту. Проблема следующая. Когда я пишу что-то в порт /dev/ttyS0, то устройство посылает мне ответ(вразумительный). Но затем что-то происходит, и устройство продолжает мне отсылать ответы мол "команда неверная". такое ощущение, что в устройство продолжается отсылка каких-то данных. Причем что важно: вот эта отсылка начинается только после того, как само устройство что-то мне отправит. То есть пока я пишу в порт и устройство мне не должно отвечать, всё нормально, оно молчит. Но как только я пошлю запрос, который требует от него ответ, этот ответ приходит, а вслед за ним ответы мол команда неверна. Такое ощущение, что передача данных не остановилась(по какой то причине). Спам продолжается даже если я закрою программу, которая пишет в порт и оставлю только прогу, которая считывает. В чём дело? Нужна помощь. Может дело в том, что стоп бит не срабатывает? Или передача синхронная и линуха "заполняет" простой отправкой нулевых символов или что-то в этом духе?

anonymous

Сделай отвод от передатчика и заведи его на приемник другого сом-порта. Там смотри миникомом или чем угодно.

Если будешь заводить на сом-порт другого компа, то хорошо заземли все устройства, и еще для надежности в дополнение соедини корпуса компов проводом.

ansky ★★★★★
()

Судя по тому, что вы написали в этой теме и в предыдущей: http://www.linux.org.ru/view-message.jsp?msgid=2256766 возможно глючит устройство. Советую вместо самодельных программ на Си попробовать поработать с COM-портом через minicom. Протокол у вас, вроде, простой и не надо открывать COM-порт из двух программ.

Для контроля, что линукс ничего лишнего не пишет, можите, как уже посоветовали, подсоеденить Tx вашего COM-порта к Rx другого COM-порта, или к осцилографу. А может даже мультиметра хватит. Если передача идет непрерывно, то мультиметр должен показывать напряжение, отличное от 12 В.

P.S. Если у вас в программе порт окрывается с флагом O_NDELAY, то исходный пример должен работать в безостановочном цикле... Или там проверка read() != -1 ?

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.