Skip to content

Commit bd1217a

Browse files
committed
Allow Client types to set default id, bump TCP client response timeout
1 parent 5aac8bf commit bd1217a

File tree

6 files changed

+51
-22
lines changed

6 files changed

+51
-22
lines changed

src/ModbusClient.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
#include "ModbusClient.h"
2323

2424
ModbusClient::ModbusClient() :
25-
_mb(NULL)
25+
_mb(NULL),
26+
_defaultId(0x00)
2627
{
2728
}
2829

@@ -33,11 +34,12 @@ ModbusClient::~ModbusClient()
3334
}
3435
}
3536

36-
int ModbusClient::begin(modbus_t* mb)
37+
int ModbusClient::begin(modbus_t* mb, int defaultId)
3738
{
3839
end();
3940

4041
_mb = mb;
42+
_defaultId = defaultId;
4143
if (_mb == NULL) {
4244
return 0;
4345
}
@@ -49,6 +51,8 @@ int ModbusClient::begin(modbus_t* mb)
4951
return 0;
5052
}
5153

54+
modbus_set_error_recovery(_mb, MODBUS_ERROR_RECOVERY_PROTOCOL);
55+
5256
return 1;
5357
}
5458

@@ -64,7 +68,7 @@ void ModbusClient::end()
6468

6569
int ModbusClient::readCoil(int address)
6670
{
67-
return readCoil(0x00, address);
71+
return readCoil(_defaultId, address);
6872
}
6973

7074
int ModbusClient::readCoil(int id, int address)
@@ -80,7 +84,7 @@ int ModbusClient::readCoil(int id, int address)
8084

8185
int ModbusClient::readCoils(int address, uint8_t values[], int nb)
8286
{
83-
return readCoils(0x00, address, values, nb);
87+
return readCoils(_defaultId, address, values, nb);
8488
}
8589

8690
int ModbusClient::readCoils(int id, int address, uint8_t values[], int nb)
@@ -96,7 +100,7 @@ int ModbusClient::readCoils(int id, int address, uint8_t values[], int nb)
96100

97101
int ModbusClient::readDiscreteInput(int address)
98102
{
99-
return readDiscreteInput(0x00, address);
103+
return readDiscreteInput(_defaultId, address);
100104
}
101105

102106
int ModbusClient::readDiscreteInput(int id, int address)
@@ -112,7 +116,7 @@ int ModbusClient::readDiscreteInput(int id, int address)
112116

113117
int ModbusClient::readDiscreteInputs(int address, uint8_t values[], int nb)
114118
{
115-
return readDiscreteInputs(0x00, address, values, nb);
119+
return readDiscreteInputs(_defaultId, address, values, nb);
116120
}
117121

118122
int ModbusClient::readDiscreteInputs(int id, int address, uint8_t values[], int nb)
@@ -128,7 +132,7 @@ int ModbusClient::readDiscreteInputs(int id, int address, uint8_t values[], int
128132

129133
long ModbusClient::readHoldingRegister(int address)
130134
{
131-
return readHoldingRegister(0x00, address);
135+
return readHoldingRegister(_defaultId, address);
132136
}
133137

134138
long ModbusClient::readHoldingRegister(int id, int address)
@@ -144,7 +148,7 @@ long ModbusClient::readHoldingRegister(int id, int address)
144148

145149
int ModbusClient::readHoldingRegisters(int address, uint16_t values[], int nb)
146150
{
147-
return readHoldingRegisters(0x00, address, values, nb);
151+
return readHoldingRegisters(_defaultId, address, values, nb);
148152
}
149153

150154
int ModbusClient::readHoldingRegisters(int id, int address, uint16_t values[], int nb)
@@ -160,7 +164,7 @@ int ModbusClient::readHoldingRegisters(int id, int address, uint16_t values[], i
160164

161165
long ModbusClient::readInputRegister(int address)
162166
{
163-
return readInputRegister(0x00, address);
167+
return readInputRegister(_defaultId, address);
164168
}
165169

166170
long ModbusClient::readInputRegister(int id, int address)
@@ -176,7 +180,7 @@ long ModbusClient::readInputRegister(int id, int address)
176180

177181
int ModbusClient::readInputRegisters(int address, uint16_t values[], int nb)
178182
{
179-
return readInputRegisters(0x00, address, values, nb);
183+
return readInputRegisters(_defaultId, address, values, nb);
180184
}
181185

182186
int ModbusClient::readInputRegisters(int id, int address, uint16_t values[], int nb)
@@ -192,7 +196,7 @@ int ModbusClient::readInputRegisters(int id, int address, uint16_t values[], int
192196

193197
int ModbusClient::writeCoil(int address, uint8_t value)
194198
{
195-
return writeCoil(0x00, address, value);
199+
return writeCoil(_defaultId, address, value);
196200
}
197201

198202
int ModbusClient::writeCoil(int id, int address, uint8_t value)
@@ -208,7 +212,7 @@ int ModbusClient::writeCoil(int id, int address, uint8_t value)
208212

209213
int ModbusClient::writeCoils(int address, const uint8_t values[], int nb)
210214
{
211-
return writeCoils(0x00, address, values, nb);
215+
return writeCoils(_defaultId, address, values, nb);
212216
}
213217

214218
int ModbusClient::writeCoils(int id, int address, const uint8_t values[], int nb)
@@ -224,7 +228,7 @@ int ModbusClient::writeCoils(int id, int address, const uint8_t values[], int nb
224228

225229
int ModbusClient::writeHoldingRegister(int address, uint16_t value)
226230
{
227-
return writeHoldingRegister(0x00, address, value);
231+
return writeHoldingRegister(_defaultId, address, value);
228232
}
229233

230234
int ModbusClient::writeHoldingRegister(int id, int address, uint16_t value)
@@ -240,7 +244,7 @@ int ModbusClient::writeHoldingRegister(int id, int address, uint16_t value)
240244

241245
int ModbusClient::writeHoldingRegisters(int address, const uint16_t values[], int nb)
242246
{
243-
return writeHoldingRegisters(0x00, address, values, nb);
247+
return writeHoldingRegisters(_defaultId, address, values, nb);
244248
}
245249

246250
int ModbusClient::writeHoldingRegisters(int id, int address, const uint16_t values[], int nb)
@@ -256,7 +260,7 @@ int ModbusClient::writeHoldingRegisters(int id, int address, const uint16_t valu
256260

257261
int ModbusClient::maskWriteRegister(int address, uint16_t andMask, uint16_t orMask)
258262
{
259-
return maskWriteRegister(0x00, address, andMask, orMask);
263+
return maskWriteRegister(_defaultId, address, andMask, orMask);
260264
}
261265

262266
int ModbusClient::maskWriteRegister(int id, int address, uint16_t andMask, uint16_t orMask)
@@ -272,7 +276,7 @@ int ModbusClient::maskWriteRegister(int id, int address, uint16_t andMask, uint1
272276

273277
int ModbusClient::writeAndReadRegisters(int writeAddress, const uint16_t writeValues[], int writeNb, int readAddress, uint16_t readValues[], int readNb)
274278
{
275-
return writeAndReadRegisters(0x00, writeAddress, writeValues, writeNb, readAddress, readValues, readNb);
279+
return writeAndReadRegisters(_defaultId, writeAddress, writeValues, writeNb, readAddress, readValues, readNb);
276280
}
277281

278282
int ModbusClient::writeAndReadRegisters(int id, int writeAddress, const uint16_t writeValues[], int writeNb, int readAddress, uint16_t readValues[], int readNb)

src/ModbusClient.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,11 @@ class ModbusClient {
233233
ModbusClient();
234234
virtual ~ModbusClient();
235235

236-
int begin(modbus_t* _mb);
236+
int begin(modbus_t* _mb, int defaultId);
237237

238238
private:
239239
modbus_t* _mb;
240+
int _defaultId;
240241
};
241242

242243
#endif

src/ModbusRTUClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config)
3838
{
3939
modbus_t* mb = modbus_new_rtu(baudrate, config);
4040

41-
return ModbusClient::begin(mb);
41+
return ModbusClient::begin(mb, 0x00);
4242
}
4343

4444
ModbusRTUClientClass ModbusRTUClient;

src/ModbusTCPClient.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,17 @@ int ModbusTCPClient::begin(IPAddress ip, uint16_t port)
3939
{
4040
modbus_t* mb = modbus_new_tcp(_client, ip, port);
4141

42-
return ModbusClient::begin(mb);
42+
modbus_set_response_timeout(mb, 30, 0);
43+
44+
return ModbusClient::begin(mb, MODBUS_TCP_SLAVE);
45+
}
46+
47+
int ModbusTCPClient::connected()
48+
{
49+
return _client->connected();
50+
}
51+
52+
void ModbusTCPClient::stop()
53+
{
54+
end();
4355
}

src/ModbusTCPClient.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,22 @@ class ModbusTCPClient : public ModbusClient {
4141
* @param ip IP Address of the Modbus server
4242
* @param port TCP port number of Modbus server, defaults to 502
4343
*
44-
* Return 1 on success, 0 on failure
44+
* @return 1 on success, 0 on failure
4545
*/
4646
int begin(IPAddress ip, uint16_t port = 502);
4747

48+
/**
49+
* Query connection status.
50+
*
51+
* @return 1 if connected, 0 if not connected
52+
*/
53+
int connected();
54+
55+
/**
56+
* Disconnect the client.
57+
*/
58+
void stop();
59+
4860
private:
4961
Client* _client;
5062
};

src/ModbusTCPServer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ class ModbusTCPServer : public ModbusServer {
3232
/**
3333
* Start the Modbus TCP server with the specified parameters
3434
*
35-
* @param id (slave) id of the server, defaults to 0x00 (broadcast)
35+
* @param id (slave) id of the server, defaults to 0xff (TCP)
3636
*
3737
* Return 1 on success, 0 on failure
3838
*/
39-
int begin(int id = 0x00);
39+
int begin(int id = 0xff);
4040

4141
/**
4242
* Accept client connection

0 commit comments

Comments
 (0)