Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > select() qnx |
Автор: infernalcucumber 26.5.2016, 18:01 |
Добрый день, имеется следующая проблема, заранее благодарен за помощь ![]() Имеется устройство, общающееся по rs485 по протоколу modbus, если ему отправить запрос, то он сразу же отвечает(проверял с помощью toolkit com port). Суть проблемы в следующем:после отправки запроса, прослушивается порт в бесконечном цикле, где не срабатывает select() на чтение, однако фактически, данные которые пришли, выводятся в консоль. (select мне нужен для того, чтобы нормально работал запрос/прием сообщений в большом количестве) P.S. Может быть я не правильно понимаю суть select()? Я так понимаю, он проверяет состояние порта, готов ли он читать или записывать данные, если я ошибаюсь, пожалуйста, поправьте меня. |
Автор: xvr 26.5.2016, 22:23 |
Вроде правильно понимаете. Покажите код. |
Автор: infernalcucumber 27.5.2016, 10:34 | ||
Данные посылаю вручную, с другого компьютера, они не читаются в данной программе. |
Автор: xvr 27.5.2016, 11:56 | ||
Эта конструкция присвоит вам в переменную com результат сравнения вызова SerialOpen(port) с -1. Я думаю, что это не то, на что вы расчитывали ![]()
Не удивительно, что select не работает ![]() |
Автор: infernalcucumber 27.5.2016, 14:15 |
Извиняюсь, невнимательно набирал сообщение, опечатку исправил, проблема осталась, постоянно вываливается сообщение в консоль о таймауте. |
Автор: xvr 28.5.2016, 12:38 | ||
Видимо проблема в том, что за 0.5 секунды данные с COM порта еще не пришли, а дальше timeout сбрасывается самим select'ом в 0, что дает немедленный выход по timeout'у. Вот цитате из описания select (из QNX):
PS. В if'е скобки не забыли поставить? |
Автор: infernalcucumber 28.5.2016, 20:53 | ||||
Ставил значение 1 и 5 секунд, ничего не менялось. Сейчас понял, что после вызова select() надо сбрасывать значение таймаута, но я не очень себе это предоставляю,объясните пожалуйста если кто понял. |
Автор: xvr 30.5.2016, 10:47 |
Перенесите строки 24-25 перед select (в строку 28 после открывающей фигурной скобки) |