URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5824
[ Назад ]

Исходное сообщение
" Получение кода ошибки при работе с com портом"

Отправлено NightSpider , 16-Окт-06 17:45 
Из программы C+ (Linux) в цикле опрашиваю несколько устройств, подключенных к com порту. В определенный момент происходит какая-то ошибка и модули перестают отвечать (запрос уходит, а read всегда возвращает длину 0). Если в этот момент выполнить закрытие, а потом открытие порта, опрос можно продолжать до возникновения следующей ошибки.
Функции read и write всегда заканчиваются без ошибок. Я отслеживаю длину блока, которую возвращает read, и, если она =0, выполняю переоткрытие порта. Но это явно не лучший способ.

Полагаю, что где-то поднимается флаг ошибки и порт перестает принимать и передавать данные.
В чем может быть дело?
Как можно в C++ под Linux узнать код последней ошибки передачи данных через порт?


Содержание

Сообщения в этом обсуждении
" Получение кода ошибки при работе с com портом"
Отправлено gyn61 , 16-Окт-06 23:16 
>Из программы C+ (Linux) в цикле опрашиваю несколько устройств, подключенных к com
>порту. В определенный момент происходит какая-то ошибка и модули перестают отвечать
>(запрос уходит, а read всегда возвращает длину 0). Если в этот
>момент выполнить закрытие, а потом открытие порта, опрос можно продолжать до
>возникновения следующей ошибки.

Если вы обмениваетесь с устройствами бинарными данными то возможно послали в линию XOFF поэтому данные и не приходят. Переведите com порт в raw-режим через tcgetattr/cfmakeraw/tcsetattr.