Skip to content

Commit 1043512

Browse files
committed
Remove setID API, add optional ID parameter to specify (slave) id
1 parent 1d2c831 commit 1043512

File tree

5 files changed

+126
-25
lines changed

5 files changed

+126
-25
lines changed

examples/RTU/ModbusRTUClientToggle/ModbusRTUClientToggle.ino

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,20 @@ void setup() {
3232
Serial.println("Failed to start Modbus RTU Client!");
3333
while (1);
3434
}
35-
36-
// send requests to (slave) ID 1
37-
ModbusRTUClient.setId(1);
3835
}
3936

4037
void loop() {
41-
// set value of coil at address 0x00 to 0x01
42-
if (!ModbusRTUClient.writeCoil(0x00, 0x01)) {
38+
// for (slave) id 1: write the value of 0x01, to the coil at address 0x00
39+
if (!ModbusRTUClient.writeCoil(1, 0x00, 0x01)) {
4340
Serial.print("Failed to write coil! ");
4441
Serial.println(ModbusRTUClient.lastError());
4542
}
4643

4744
// wait for 1 second
4845
delay(1000);
4946

50-
// set value of coil at address 0x00 to 0x00
51-
if (!ModbusRTUClient.writeCoil(0x00, 0x00)) {
47+
// for (slave) id 1: write the value of 0x00, to the coil at address 0x00
48+
if (!ModbusRTUClient.writeCoil(1, 0x00, 0x00)) {
5249
Serial.print("Failed to write coil! ");
5350
Serial.println(ModbusRTUClient.lastError());
5451
}

examples/TCP/WiFiModbusClientToggle/WiFiModbusClientToggle.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void setup() {
6262
}
6363

6464
void loop() {
65-
// set value of coil at address 0x00 to 0x01
65+
// write the value of 0x01, to the coil at address 0x00
6666
if (!modbusTCPClient.writeCoil(0x00, 0x01)) {
6767
Serial.print("Failed to write coil! ");
6868
Serial.println(modbusTCPClient.lastError());
@@ -71,7 +71,7 @@ void loop() {
7171
// wait for 1 second
7272
delay(1000);
7373

74-
// set value of coil at address 0x00 to 0x00
74+
// write the value of 0x00, to the coil at address 0x00
7575
if (!modbusTCPClient.writeCoil(0x00, 0x00)) {
7676
Serial.print("Failed to write coil! ");
7777
Serial.println(modbusTCPClient.lastError());

keywords.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ begin KEYWORD2
2020
poll KEYWORD2
2121
end KEYWORD2
2222

23-
setId KEYWORD2
2423
readCoil KEYWORD2
2524
readCoils KEYWORD2
2625
readDiscreteInput KEYWORD2

src/ModbusClient.cpp

Lines changed: 92 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,16 @@ void ModbusClient::end()
6262
}
6363
}
6464

65-
void ModbusClient::setId(int id)
65+
int ModbusClient::readCoil(int address)
6666
{
67-
modbus_set_slave(_mb, id);
67+
return readCoil(0x00, address);
6868
}
6969

70-
int ModbusClient::readCoil(int address)
70+
int ModbusClient::readCoil(int id, int address)
7171
{
7272
uint8_t value;
7373

74-
if (readCoils(address, &value, 1) < 0) {
74+
if (readCoils(id, address, &value, 1) < 0) {
7575
return -1;
7676
}
7777

@@ -80,6 +80,13 @@ int ModbusClient::readCoil(int address)
8080

8181
int ModbusClient::readCoils(int address, uint8_t values[], int nb)
8282
{
83+
return readCoils(0x00, address, values, nb);
84+
}
85+
86+
int ModbusClient::readCoils(int id, int address, uint8_t values[], int nb)
87+
{
88+
modbus_set_slave(_mb, id);
89+
8390
if (modbus_read_bits(_mb, address, nb, values) < 0) {
8491
return 0;
8592
}
@@ -88,10 +95,15 @@ int ModbusClient::readCoils(int address, uint8_t values[], int nb)
8895
}
8996

9097
int ModbusClient::readDiscreteInput(int address)
98+
{
99+
return readDiscreteInput(0x00, address);
100+
}
101+
102+
int ModbusClient::readDiscreteInput(int id, int address)
91103
{
92104
uint8_t value;
93105

94-
if (!readDiscreteInputs(address, &value, 1)) {
106+
if (!readDiscreteInputs(id, address, &value, 1)) {
95107
return -1;
96108
}
97109

@@ -100,6 +112,13 @@ int ModbusClient::readDiscreteInput(int address)
100112

101113
int ModbusClient::readDiscreteInputs(int address, uint8_t values[], int nb)
102114
{
115+
return readDiscreteInputs(0x00, address, values, nb);
116+
}
117+
118+
int ModbusClient::readDiscreteInputs(int id, int address, uint8_t values[], int nb)
119+
{
120+
modbus_set_slave(_mb, id);
121+
103122
if (modbus_read_input_bits(_mb, address, nb, values) < 0) {
104123
return 0;
105124
}
@@ -108,10 +127,15 @@ int ModbusClient::readDiscreteInputs(int address, uint8_t values[], int nb)
108127
}
109128

110129
long ModbusClient::readHoldingRegister(int address)
130+
{
131+
return readHoldingRegister(0x00, address);
132+
}
133+
134+
long ModbusClient::readHoldingRegister(int id, int address)
111135
{
112136
uint16_t value;
113137

114-
if (!readHoldingRegisters(address, &value, 1)) {
138+
if (!readHoldingRegisters(id, address, &value, 1)) {
115139
return -1;
116140
}
117141

@@ -120,6 +144,13 @@ long ModbusClient::readHoldingRegister(int address)
120144

121145
int ModbusClient::readHoldingRegisters(int address, uint16_t values[], int nb)
122146
{
147+
return readHoldingRegisters(0x00, address, values, nb);
148+
}
149+
150+
int ModbusClient::readHoldingRegisters(int id, int address, uint16_t values[], int nb)
151+
{
152+
modbus_set_slave(_mb, id);
153+
123154
if (modbus_read_registers(_mb, address, nb, values) < 0) {
124155
return 0;
125156
}
@@ -128,10 +159,15 @@ int ModbusClient::readHoldingRegisters(int address, uint16_t values[], int nb)
128159
}
129160

130161
long ModbusClient::readInputRegister(int address)
162+
{
163+
return readInputRegister(0x00, address);
164+
}
165+
166+
long ModbusClient::readInputRegister(int id, int address)
131167
{
132168
uint16_t value;
133169

134-
if (!readInputRegisters(address, &value, 1)) {
170+
if (!readInputRegisters(id, address, &value, 1)) {
135171
return -1;
136172
}
137173

@@ -140,6 +176,13 @@ long ModbusClient::readInputRegister(int address)
140176

141177
int ModbusClient::readInputRegisters(int address, uint16_t values[], int nb)
142178
{
179+
return readInputRegisters(0x00, address, values, nb);
180+
}
181+
182+
int ModbusClient::readInputRegisters(int id, int address, uint16_t values[], int nb)
183+
{
184+
modbus_set_slave(_mb, id);
185+
143186
if (modbus_read_input_registers(_mb, address, nb, values) < 0) {
144187
return 0;
145188
}
@@ -149,6 +192,13 @@ int ModbusClient::readInputRegisters(int address, uint16_t values[], int nb)
149192

150193
int ModbusClient::writeCoil(int address, uint8_t value)
151194
{
195+
return writeCoil(0x00, address, value);
196+
}
197+
198+
int ModbusClient::writeCoil(int id, int address, uint8_t value)
199+
{
200+
modbus_set_slave(_mb, id);
201+
152202
if (modbus_write_bit(_mb, address, value) < 0) {
153203
return 0;
154204
}
@@ -158,6 +208,13 @@ int ModbusClient::writeCoil(int address, uint8_t value)
158208

159209
int ModbusClient::writeCoils(int address, const uint8_t values[], int nb)
160210
{
211+
return writeCoils(0x00, address, values, nb);
212+
}
213+
214+
int ModbusClient::writeCoils(int id, int address, const uint8_t values[], int nb)
215+
{
216+
modbus_set_slave(_mb, id);
217+
161218
if (modbus_write_bits(_mb, address, nb, values) < 0) {
162219
return 0;
163220
}
@@ -167,6 +224,13 @@ int ModbusClient::writeCoils(int address, const uint8_t values[], int nb)
167224

168225
int ModbusClient::writeHoldingRegister(int address, uint16_t value)
169226
{
227+
return writeHoldingRegister(0x00, address, value);
228+
}
229+
230+
int ModbusClient::writeHoldingRegister(int id, int address, uint16_t value)
231+
{
232+
modbus_set_slave(_mb, id);
233+
170234
if (modbus_write_register(_mb, address, value) < 0) {
171235
return 0;
172236
}
@@ -176,6 +240,13 @@ int ModbusClient::writeHoldingRegister(int address, uint16_t value)
176240

177241
int ModbusClient::writeHoldingRegisters(int address, const uint16_t values[], int nb)
178242
{
243+
return writeHoldingRegisters(0x00, address, values, nb);
244+
}
245+
246+
int ModbusClient::writeHoldingRegisters(int id, int address, const uint16_t values[], int nb)
247+
{
248+
modbus_set_slave(_mb, id);
249+
179250
if (modbus_write_registers(_mb, address, nb, values) < 0) {
180251
return 0;
181252
}
@@ -185,6 +256,13 @@ int ModbusClient::writeHoldingRegisters(int address, const uint16_t values[], in
185256

186257
int ModbusClient::maskWriteRegister(int address, uint16_t andMask, uint16_t orMask)
187258
{
259+
return maskWriteRegister(0x00, address, andMask, orMask);
260+
}
261+
262+
int ModbusClient::maskWriteRegister(int id, int address, uint16_t andMask, uint16_t orMask)
263+
{
264+
modbus_set_slave(_mb, id);
265+
188266
if (modbus_mask_write_register(_mb, address, andMask, orMask) < 0) {
189267
return 0;
190268
}
@@ -194,6 +272,13 @@ int ModbusClient::maskWriteRegister(int address, uint16_t andMask, uint16_t orMa
194272

195273
int ModbusClient::writeAndReadRegisters(int writeAddress, const uint16_t writeValues[], int writeNb, int readAddress, uint16_t readValues[], int readNb)
196274
{
275+
return writeAndReadRegisters(0x00, writeAddress, writeValues, writeNb, readAddress, readValues, readNb);
276+
}
277+
278+
int ModbusClient::writeAndReadRegisters(int id, int writeAddress, const uint16_t writeValues[], int writeNb, int readAddress, uint16_t readValues[], int readNb)
279+
{
280+
modbus_set_slave(_mb, id);
281+
197282
if (modbus_write_and_read_registers(_mb, writeAddress, writeNb, writeValues, readAddress, readNb, readValues) < 0) {
198283
return 0;
199284
}

0 commit comments

Comments
 (0)