Я использую библиотеку LibModbus для связи с устройствами ADAM. У меня была некоторая предыдущая проблема с отправкой некоторых команд на устройство, но установка большего времени ожидания ответа была исправлена, это было в предыдущей версии библиотеки.
Теперь я использую новейшую библиотеку, где set_response_timeout использует структуру timeval.
Ссылка на руководство по функциям в библиотеке:
Get_response_timeout / set_response_timeout
Я использую библиотеку следующим образом
struct timeval response_timeout;
struct timeval old_response_timeout;
modbus_get_response_timeout(mb, &old_response_timeout);
printf("\nold_tv_sec: %d, old_tv_usec: %d\n", old_response_timeout.tv_sec, old_response_timeout.tv_usec);
response_timeout.tv_sec = 60;
response_timeout.tv_usec = 0;
modbus_set_response_timeout(mb, &response_timeout);
modbus_get_response_timeout(mb, &old_response_timeout);
printf("\nnew_tv_sec: %d, new_tv_usec: %d\n", old_response_timeout.tv_sec, old_response_timeout.tv_usec);
Но если я распечатаю значение времени ожидания ответа с помощью get_response_timeout, ранее и после его установки, он возвращает те же значения:
Ответ modbus_get_response_timeout (мб, &old_response_timeout) перед настройкой
old_tv_sec: 500000, old_tv_usec: 23224832
Значения структуры timeval для отправки в modbus_set_response_timeout (мб, &response_timeout)
to_set_tv_sec: 60, to_set_tv_usec: 0
Ответ modbus_get_response_timeout (мб, &old_response_timeout) после установки новых значений.
new_tv_sec: 500000, new_tv_usec: 23224832
Задача ещё не решена.
Других решений пока нет …