Skip to content

Commit a0e2ef8

Browse files
committed
Limit incoming connections to one per IP
1 parent fa75989 commit a0e2ef8

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,17 @@ http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf
7070
+ added read/write/push/pullCoil/Hreg/Ireg/Ists() parameter to specify Modbus unit id
7171
+ added ability to auto connect to slave. Setting is global. Disabled by default.
7272
// 2.0.1
73-
+ Fix readCoil\Hreg\Ists\Ireg not read value from slave
73+
+ Master. Fix readCoil\Hreg\Ists\Ireg not read value from slave
7474
+ Fix crash on disconnect with Arduino Core 2.5.x
7575
// 2.1.0
76-
+ Fix slave error response on write multiple Hregs\Coils
77-
+ Fix writeCoil() for multiple coils
78-
+ dropTransactions()
79-
+ disconnect()
76+
+ Slave. Fix error response on write multiple Hregs\Coils
77+
+ Slave. Fix writeCoil() for multiple coils
78+
+ Master. dropTransactions()
79+
+ Master. disconnect()
8080
+ ~ModbusIP()
8181
+ task() cleanup
8282
+ Modify examples
83+
+ Slave. Allow only single incoming master connection per IP
8384
// 2.2.0
8485
- code cleanup
8586
- Implement Private Reg/Coil

src/ModbusIP_ESP8266.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ void ModbusIP::task() {
5757
if (!currentClient || !currentClient->connected())
5858
continue;
5959
if (cbConnect == nullptr || cbConnect(currentClient->remoteIP())) {
60+
#ifdef MODBUSIP_UNIQUE_CLIENTS
61+
n = getMaster(currentClient->remoteIP());
62+
if (n != -1) {
63+
client[n]->flush();
64+
client[n]->stop();
65+
delete client[n];
66+
client[n] = nullptr;
67+
}
68+
#endif
6069
n = getFreeClient();
6170
if (n > -1) {
6271
client[n] = currentClient;
@@ -154,7 +163,7 @@ void ModbusIP::task() {
154163
uint16_t ModbusIP::send(IPAddress ip, TAddress startreg, cbTransaction cb, uint8_t unit, void* data, bool waitResponse) {
155164
MBAP_t _MBAP;
156165
#ifdef MODBUSIP_MAX_TRANSACIONS
157-
if (this->_trans.size() >= MODBUSIP_MAX_TRANSACIONS) return false;
166+
if (_trans.size() >= MODBUSIP_MAX_TRANSACIONS) return false;
158167
#endif
159168
int8_t p = getSlave(ip);
160169
if (p == -1 || !client[p]->connected())

src/ModbusIP_ESP8266.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define MODBUSIP_MAX_TRANSACIONS 16
2020
#define MODBUSIP_MAX_CLIENTS 4
2121
#define MODBUSIP_ADD_REG 1
22+
#define MODBUSIP_UNIQUE_CLIENTS
2223

2324
// Callback function Type
2425
typedef bool (*cbModbusConnect)(IPAddress ip);

0 commit comments

Comments
 (0)