Skip to content

Commit 5bf098b

Browse files
committed
Add setTimeout API for ModbusClient's
1 parent 88753d3 commit 5bf098b

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ModbusTCPServer KEYWORD1
1919
begin KEYWORD2
2020
poll KEYWORD2
2121
end KEYWORD2
22+
setTimeout KEYWORD2
2223

2324
beginTransmission KEYWORD2
2425
write KEYWORD2

src/ModbusClient.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121

2222
#include "ModbusClient.h"
2323

24-
ModbusClient::ModbusClient() :
24+
ModbusClient::ModbusClient(unsigned long defaultTimeout) :
2525
_mb(NULL),
26+
_timeout(defaultTimeout),
2627
_defaultId(0x00),
2728
_transmissionBegun(false),
2829
_values(NULL),
@@ -68,6 +69,8 @@ int ModbusClient::begin(modbus_t* mb, int defaultId)
6869
_written = 0;
6970

7071
modbus_set_error_recovery(_mb, MODBUS_ERROR_RECOVERY_PROTOCOL);
72+
73+
setTimeout(_timeout);
7174

7275
return 1;
7376
}
@@ -410,3 +413,12 @@ const char* ModbusClient::lastError()
410413

411414
return modbus_strerror(errno);
412415
}
416+
417+
void ModbusClient::setTimeout(unsigned long ms)
418+
{
419+
_timeout = ms;
420+
421+
if (_mb) {
422+
modbus_set_response_timeout(_mb, _timeout / 1000, (_timeout % 1000) * 1000);
423+
}
424+
}

src/ModbusClient.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,20 @@ class ModbusClient {
198198
*/
199199
void end();
200200

201+
/**
202+
* Set response timeout (in milliseconds)
203+
*/
204+
void setTimeout(unsigned long ms);
205+
201206
protected:
202-
ModbusClient();
207+
ModbusClient(unsigned long defaultTimeout);
203208
virtual ~ModbusClient();
204209

205210
int begin(modbus_t* _mb, int defaultId);
206211

207212
private:
208213
modbus_t* _mb;
214+
unsigned long _timeout;
209215
int _defaultId;
210216

211217
bool _transmissionBegun;

src/ModbusRTUClient.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ extern "C" {
2626

2727
#include "ModbusRTUClient.h"
2828

29-
ModbusRTUClientClass::ModbusRTUClientClass()
29+
ModbusRTUClientClass::ModbusRTUClientClass() :
30+
ModbusClient(1000)
3031
{
3132
}
3233

@@ -42,8 +43,6 @@ int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config)
4243
return 0;
4344
}
4445

45-
modbus_set_response_timeout(mb, 1, 0);
46-
4746
return 1;
4847
}
4948

src/ModbusTCPClient.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extern "C" {
2727
#include "ModbusTCPClient.h"
2828

2929
ModbusTCPClient::ModbusTCPClient(Client& client) :
30+
ModbusClient(30 * 1000),
3031
_client(&client)
3132
{
3233
}
@@ -39,8 +40,6 @@ int ModbusTCPClient::begin(IPAddress ip, uint16_t port)
3940
{
4041
modbus_t* mb = modbus_new_tcp(_client, ip, port);
4142

42-
modbus_set_response_timeout(mb, 30, 0);
43-
4443
return ModbusClient::begin(mb, MODBUS_TCP_SLAVE);
4544
}
4645

0 commit comments

Comments
 (0)