Skip to content

Commit 068f31b

Browse files
committed
Return flag from poll() to allow conditional events to trigger
1 parent 4cd74c2 commit 068f31b

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

examples/RTU/ModbusRTUServerLED/ModbusRTUServerLED.ino

Lines changed: 13 additions & 11 deletions
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
}

src/ModbusRTUServer.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,17 @@ int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config)
4747
return 1;
4848
}
4949

50-
void ModbusRTUServerClass::poll()
50+
int ModbusRTUServerClass::poll()
5151
{
5252
uint8_t request[MODBUS_RTU_MAX_ADU_LENGTH];
5353

5454
int requestLength = modbus_receive(_mb, request);
5555

5656
if (requestLength > 0) {
5757
modbus_reply(_mb, request, requestLength, &_mbMapping);
58+
return 1;
5859
}
60+
return 0;
5961
}
6062

6163
ModbusRTUServerClass ModbusRTUServer;

src/ModbusRTUServer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ModbusRTUServerClass : public ModbusServer {
4141
/**
4242
* Poll interface for requests
4343
*/
44-
virtual void poll();
44+
virtual int poll();
4545
};
4646

4747
extern ModbusRTUServerClass ModbusRTUServer;

src/ModbusServer.h

Lines changed: 3 additions & 1 deletion
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

src/ModbusTCPServer.cpp

Lines changed: 3 additions & 1 deletion
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
}

src/ModbusTCPServer.h

Lines changed: 1 addition & 1 deletion
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)