Skip to content

Commit c23e6a4

Browse files
committed
Callback added
1 parent e4bc600 commit c23e6a4

File tree

4 files changed

+59
-27
lines changed

4 files changed

+59
-27
lines changed

src/Modbus.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
*/
55
#include "Modbus.h"
66

7+
word cbDefault(TRegister* reg, word val) {
8+
return val;
9+
}
10+
711
Modbus::Modbus() {
812
_regs_head = 0;
913
_regs_last = 0;
@@ -28,6 +32,8 @@ void Modbus::addReg(word address, word value) {
2832
newreg = (TRegister *) malloc(sizeof(TRegister));
2933
newreg->address = address;
3034
newreg->value = value;
35+
newreg->get = cbDefault;
36+
newreg->set = cbDefault;
3137
newreg->next = 0;
3238

3339
if(_regs_head == 0) {
@@ -47,7 +53,7 @@ bool Modbus::Reg(word address, word value) {
4753
reg = this->searchRegister(address);
4854
//if found then assign the register value to the new value.
4955
if (reg) {
50-
reg->value = value;
56+
reg->value = reg->set(reg, value);
5157
return true;
5258
} else
5359
return false;
@@ -57,62 +63,62 @@ word Modbus::Reg(word address) {
5763
TRegister *reg;
5864
reg = this->searchRegister(address);
5965
if(reg)
60-
return(reg->value);
66+
return(reg->get(reg, reg->value));
6167
else
6268
return(0);
6369
}
6470

6571
void Modbus::addHreg(word offset, word value) {
66-
this->addReg(offset + 40001, value);
72+
this->addReg(offset + HREG_BASE, value);
6773
}
6874

6975
bool Modbus::Hreg(word offset, word value) {
70-
return Reg(offset + 40001, value);
76+
return Reg(offset + HREG_BASE, value);
7177
}
7278

7379
word Modbus::Hreg(word offset) {
74-
return Reg(offset + 40001);
80+
return Reg(offset + HREG_BASE);
7581
}
7682

7783
#ifndef USE_HOLDING_REGISTERS_ONLY
7884
void Modbus::addCoil(word offset, bool value) {
79-
this->addReg(offset + 1, value?0xFF00:0x0000);
85+
this->addReg(offset + COIL_BASE, value?0xFF00:0x0000);
8086
}
8187

8288
void Modbus::addIsts(word offset, bool value) {
83-
this->addReg(offset + 10001, value?0xFF00:0x0000);
89+
this->addReg(offset + ISTS_BASE, value?0xFF00:0x0000);
8490
}
8591

8692
void Modbus::addIreg(word offset, word value) {
87-
this->addReg(offset + 30001, value);
93+
this->addReg(offset + IREG_BASE, value);
8894
}
8995

9096
bool Modbus::Coil(word offset, bool value) {
91-
return Reg(offset + 1, value?0xFF00:0x0000);
97+
return Reg(offset + COIL_BASE, value?0xFF00:0x0000);
9298
}
9399

94100
bool Modbus::Ists(word offset, bool value) {
95-
return Reg(offset + 10001, value?0xFF00:0x0000);
101+
return Reg(offset + ISTS_BASE, value?0xFF00:0x0000);
96102
}
97103

98104
bool Modbus::Ireg(word offset, word value) {
99-
return Reg(offset + 30001, value);
105+
return Reg(offset + IREG_BASE, value);
100106
}
101107

102108
bool Modbus::Coil(word offset) {
103-
if (Reg(offset + 1) == 0xFF00) {
109+
if (Reg(offset + COIL_BASE) == 0xFF00) {
104110
return true;
105111
} else return false;
106112
}
107113

108114
bool Modbus::Ists(word offset) {
109-
if (Reg(offset + 10001) == 0xFF00) {
115+
if (Reg(offset + ISTS_BASE) == 0xFF00) {
110116
return true;
111117
} else return false;
112118
}
113119

114120
word Modbus::Ireg(word offset) {
115-
return Reg(offset + 30001);
121+
return Reg(offset + IREG_BASE);
116122
}
117123
#endif
118124

src/Modbus.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77
#ifndef MODBUS_H
88
#define MODBUS_H
99

10-
#define MAX_REGS 32
10+
#define MAX_REGS 32
1111
#define MAX_FRAME 128
12+
#define COIL_BASE 1
13+
#define ISTS_BASE 10001
14+
#define IREG_BASE 30001
15+
#define HREG_BASE 40001
16+
1217
//#define USE_HOLDING_REGISTERS_ONLY
1318

1419
typedef unsigned int u_int;
@@ -40,10 +45,17 @@ enum {
4045
MB_REPLY_NORMAL = 0x03,
4146
};
4247

48+
typedef struct TRegister;
49+
50+
typedef uint32_t (*cbModbus)(TRegister* reg, word val);
51+
4352
typedef struct TRegister {
4453
word address;
4554
word value;
55+
word index;
4656
struct TRegister* next;
57+
cbModbus get;
58+
cbModbus set;
4759
} TRegister;
4860

4961
class Modbus {

src/ModbusIP_ESP8266.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,37 @@
44
*/
55
#include "ModbusIP_ESP8266.h"
66

7-
WiFiServer server(MODBUSIP_PORT);
7+
//WiFiServer server(MODBUSIP_PORT);
88

99
//ModbusIP::ModbusIP() {
1010
//
1111
//}
1212

13-
void ModbusIP::config(const char* ssid, const char* password) {
14-
WiFi.begin(ssid, password);
15-
server.begin();
16-
}
13+
//void ModbusIP::config(const char* ssid, const char* password) {
14+
// WiFi.begin(ssid, password);
15+
// server.begin();
16+
//}
1717

1818
void ModbusIP::config() {
19-
server.begin();
19+
//server.begin();
20+
begin();
2021
}
21-
#ifdef TCP_KEEP_ALIVE
22-
WiFiClient client;
23-
#endif
22+
23+
void ModbusIP::begin() {
24+
//server.begin();
25+
WiFiServer::begin();
26+
}
27+
28+
//#ifdef TCP_KEEP_ALIVE
29+
//WiFiClient client;
30+
//#endif
2431
void ModbusIP::task() {
2532
#ifdef TCP_KEEP_ALIVE
2633
if (!client || !client.connected()) {
2734
// if (client)
2835
// delete client;
29-
client = server.available();
36+
//
37+
client = available();
3038
}
3139
#else
3240
WiFiClient client;

src/ModbusIP_ESP8266.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@
1414

1515
#define TCP_KEEP_ALIVE
1616

17-
class ModbusIP : public Modbus {
17+
class ModbusIP : public Modbus, public WiFiServer {
1818
private:
1919
byte _MBAP[7];
20+
#ifdef TCP_KEEP_ALIVE
21+
WiFiClient client;
22+
#endif
2023
public:
2124
// ModbusIP();
22-
void config(const char* ssid, const char* password);
25+
// void config(const char* ssid, const char* password);
26+
ModbusIP() : WiFiServer(MODBUSIP_PORT) {
27+
}
2328
void config();
29+
void begin();
2430
void task();
2531
};
2632

0 commit comments

Comments
 (0)