Skip to content

Commit 284cb68

Browse files
authored
Merge pull request #62 from nsted/master
Return flag from poll() to allow conditional events to trigger
2 parents 67ba032 + 5fc2e03 commit 284cb68

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

Diff for: examples/RTU/ModbusRTUServerLED/ModbusRTUServerLED.ino

+13-11
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,18 @@ void setup() {
4444

4545
void loop() {
4646
// poll for Modbus RTU requests
47-
ModbusRTUServer.poll();
48-
49-
// read the current value of the coil
50-
int coilValue = ModbusRTUServer.coilRead(0x00);
51-
52-
if (coilValue) {
53-
// coil value set, turn LED on
54-
digitalWrite(ledPin, HIGH);
55-
} else {
56-
// coil value clear, turn LED off
57-
digitalWrite(ledPin, LOW);
47+
int packetReceived = ModbusRTUServer.poll();
48+
49+
if(packetReceived) {
50+
// read the current value of the coil
51+
int coilValue = ModbusRTUServer.coilRead(0x00);
52+
53+
if (coilValue) {
54+
// coil value set, turn LED on
55+
digitalWrite(ledPin, HIGH);
56+
} else {
57+
// coil value clear, turn LED off
58+
digitalWrite(ledPin, LOW);
59+
}
5860
}
5961
}

Diff for: src/ModbusRTUServer.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,17 @@ int ModbusRTUServerClass::begin(RS485Class& rs485, int id, unsigned long baudrat
5757
return begin(id, baudrate, config);
5858
}
5959

60-
void ModbusRTUServerClass::poll()
60+
int ModbusRTUServerClass::poll()
6161
{
6262
uint8_t request[MODBUS_RTU_MAX_ADU_LENGTH];
6363

6464
int requestLength = modbus_receive(_mb, request);
6565

6666
if (requestLength > 0) {
6767
modbus_reply(_mb, request, requestLength, &_mbMapping);
68+
return 1;
6869
}
70+
return 0;
6971
}
7072

7173
ModbusRTUServerClass ModbusRTUServer;

Diff for: src/ModbusRTUServer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ModbusRTUServerClass : public ModbusServer {
4444
/**
4545
* Poll interface for requests
4646
*/
47-
virtual void poll();
47+
virtual int poll();
4848

4949
private:
5050
RS485Class* _rs485 = &RS485;

Diff for: src/ModbusServer.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@ class ModbusServer {
126126

127127
/**
128128
* Poll for requests
129+
*
130+
* @return 1 on request, 0 on no request.
129131
*/
130-
virtual void poll() = 0;
132+
virtual int poll() = 0;
131133

132134
/**
133135
* Stop the server

Diff for: src/ModbusTCPServer.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ void ModbusTCPServer::accept(Client& client)
5757
}
5858
}
5959

60-
void ModbusTCPServer::poll()
60+
int ModbusTCPServer::poll()
6161
{
6262
if (_client != NULL) {
6363
uint8_t request[MODBUS_TCP_MAX_ADU_LENGTH];
@@ -66,6 +66,8 @@ void ModbusTCPServer::poll()
6666

6767
if (requestLength > 0) {
6868
modbus_reply(_mb, request, requestLength, &_mbMapping);
69+
return 1;
6970
}
7071
}
72+
return 0;
7173
}

Diff for: src/ModbusTCPServer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ModbusTCPServer : public ModbusServer {
4848
/**
4949
* Poll accepted client for requests
5050
*/
51-
virtual void poll();
51+
virtual int poll();
5252

5353
private:
5454
Client* _client;

0 commit comments

Comments
 (0)