ライブラリ 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(mb, &old_response_timeout) の応答 old_tv_sec: 500000, old_tv_usec: 23224832
modbus_set_response_timeout(mb, &response_timeout) に送信する timeval 構造体の値 to_set_tv_sec: 60, to_set_tv_usec: 0
新しい値を設定した後の modbus_get_response_timeout(mb, &old_response_timeout) の応答。
new_tv_sec: 500000、new_tv_usec: 23224832