plastictown писал(а): ↑23 апр 2018, 13:56
С учетом вышесказанного: пробовал таймауты и больше, но все равно первые один-два запроса остаются неудачными, но потом все становится нормально и очень быстро.
Это существенная информация. Проблема может быть в том, что девайсы отвечают очень медленно (как я написал в предыдущем посте), а может быть и в чем-то другом. ИМХО, надо выяснить, почему первые запросы фейлят. Рекомендую следующий эксперимент:
1. Ваш мастер выдает единственный модбас-запрос и ждет ответа до бесконечности.
2. Когда ответ приходит, вы фиксируете время, которое понадобилось слейву для ответа, и всю информацию об ошибке от библиотеки libmodbus.
3. Одновременно с этим надо смотреть, что происходит в линии связи с помощью модбас сниффера или обычного сниффера последовательного порта. Какие байты ушли от вашего мастера, какие байты пришли от слейва, почему получаем ошибку...
По результатам можно будет ввести коррективы в код. Ну и будет информация на случай, если имеются косяки на стороне слейва (с ней можно обратиться к производителю за советом или патчем). Также, узнав точное время ответа вашего слейва, вы сможете определить, сколько времени нужно на опрос всех ваших устройств.
plastictown писал(а): ↑23 апр 2018, 13:56
Тем не менее, картина остается ужасной: если на линии. скажем 120 девайсов, опрос займет не менее двух минут, а это никуда не годится.
Ни разу не видел на практике, чтобы 120 устройств опрашивались по одной шине RS-485. Обычно стараются ограничить количество устройств на одной шине парой десятков. Если нужно больше слейвов, следует закладывать больше последовательных портов и вести опрос параллельно.