Changes if (address > HoldingRegister_size ||
(address + length) > HoldingRegister_size) {
return STATUS_ILLEGAL_DATA_ADDRESS;
}
modified: src/main.cpp
This commit is contained in:
parent
14b1d7079f
commit
d94ba681fb
22
src/main.cpp
22
src/main.cpp
@ -17,7 +17,7 @@
|
||||
uint8_t ReadCoilRegister[] = {0, 1, 2};
|
||||
uint8_t output_pins[] = {0,1,2,3};
|
||||
uint8_t ReadInputRegister[] = {0,1,2,3,4,5,6,7};
|
||||
uint8_t HoldingRegister[] = {0};
|
||||
uint8_t HoldingRegister[] = {0,1,2};
|
||||
|
||||
uint8_t ReadCoilRegister_size = sizeof(ReadCoilRegister) / sizeof(ReadCoilRegister[0]);
|
||||
uint8_t output_pins_size = sizeof(output_pins) / sizeof(output_pins[0]);
|
||||
@ -48,13 +48,17 @@ uint8_t writeDigitalOut(uint8_t fc, uint16_t address, uint16_t length) {
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
digitalWrite(OutPutPin, slave.readCoilFromBuffer(i) == 1 ? HIGH : LOW);
|
||||
digitalWrite(OutPutPin, slave.readCoilFromBuffer(i) == 0 ? HIGH : LOW);
|
||||
break;
|
||||
case 1:
|
||||
|
||||
if (slave.readCoilFromBuffer(i) == 1){
|
||||
modbusConfig.ResetModbusID();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
|
||||
if (slave.readCoilFromBuffer(i) == 1) {
|
||||
modbusConfig.ResetBaudRate();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
digitalWrite(OutPutPin, slave.readCoilFromBuffer(i) == 1 ? HIGH : LOW);
|
||||
@ -135,9 +139,12 @@ uint8_t fReadInputRegister(uint8_t fc, uint16_t address, uint16_t length) {
|
||||
|
||||
// Write function for holding registers
|
||||
uint8_t fWriteHoldingRegister(uint8_t fc, uint16_t address, uint16_t length) {
|
||||
if (address >= sizeof(HoldingRegister) / sizeof(HoldingRegister[0]) || (address + length) > sizeof(HoldingRegister) / sizeof(HoldingRegister[0])) {
|
||||
if (address > HoldingRegister_size || (address + length) > HoldingRegister_size) {
|
||||
return STATUS_ILLEGAL_DATA_ADDRESS;
|
||||
}
|
||||
/*if (address >= sizeof(HoldingRegister) / sizeof(HoldingRegister[0]) || (address + length) > sizeof(HoldingRegister) / sizeof(HoldingRegister[0])) {
|
||||
return STATUS_ILLEGAL_DATA_ADDRESS;
|
||||
}*/
|
||||
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
int value = slave.readRegisterFromBuffer(i);
|
||||
@ -165,9 +172,12 @@ uint8_t fWriteHoldingRegister(uint8_t fc, uint16_t address, uint16_t length) {
|
||||
|
||||
// Optional: Read function for holding registers
|
||||
uint8_t fReadHoldingRegister(uint8_t fc, uint16_t address, uint16_t length) {
|
||||
if (address >= sizeof(HoldingRegister) / sizeof(HoldingRegister[0]) || (address + length) > sizeof(HoldingRegister) / sizeof(HoldingRegister[0])) {
|
||||
if (address > HoldingRegister_size || (address + length) > HoldingRegister_size) {
|
||||
return STATUS_ILLEGAL_DATA_ADDRESS;
|
||||
}
|
||||
/*if (address >= sizeof(HoldingRegister) / sizeof(HoldingRegister[0]) || (address + length) > sizeof(HoldingRegister) / sizeof(HoldingRegister[0])) {
|
||||
return STATUS_ILLEGAL_DATA_ADDRESS;
|
||||
}*/
|
||||
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
// Add specific data to holding registers
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user