|
Модераторы: xvr |
|
infernalcucumber |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.5.2016 Репутация: нет Всего: нет |
Добрый день, имеется следующая проблема, заранее благодарен за помощь
Имеется устройство, общающееся по rs485 по протоколу modbus, если ему отправить запрос, то он сразу же отвечает(проверял с помощью toolkit com port). Суть проблемы в следующем:после отправки запроса, прослушивается порт в бесконечном цикле, где не срабатывает select() на чтение, однако фактически, данные которые пришли, выводятся в консоль. (select мне нужен для того, чтобы нормально работал запрос/прием сообщений в большом количестве) P.S. Может быть я не правильно понимаю суть select()? Я так понимаю, он проверяет состояние порта, готов ли он читать или записывать данные, если я ошибаюсь, пожалуйста, поправьте меня. |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Вроде правильно понимаете. Покажите код.
|
|||
|
||||
infernalcucumber |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.5.2016 Репутация: нет Всего: нет |
Данные посылаю вручную, с другого компьютера, они не читаются в данной программе. Это сообщение отредактировал(а) infernalcucumber - 28.5.2016, 20:44 |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Эта конструкция присвоит вам в переменную com результат сравнения вызова SerialOpen(port) с -1. Я думаю, что это не то, на что вы расчитывали
Не удивительно, что select не работает Это сообщение отредактировал(а) xvr - 27.5.2016, 11:57 |
|||
|
||||
infernalcucumber |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.5.2016 Репутация: нет Всего: нет |
Извиняюсь, невнимательно набирал сообщение, опечатку исправил, проблема осталась, постоянно вываливается сообщение в консоль о таймауте.
|
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Видимо проблема в том, что за 0.5 секунды данные с COM порта еще не пришли, а дальше timeout сбрасывается самим select'ом в 0, что дает немедленный выход по timeout'у.
Вот цитате из описания select (из QNX):
PS. В if'е скобки не забыли поставить? |
|||
|
||||
infernalcucumber |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.5.2016 Репутация: нет Всего: нет |
Ставил значение 1 и 5 секунд, ничего не менялось. Сейчас понял, что после вызова select() надо сбрасывать значение таймаута, но я не очень себе это предоставляю,объясните пожалуйста если кто понял. |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Перенесите строки 24-25 перед select (в строку 28 после открывающей фигурной скобки)
|
|||
|
||||
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |