Changes if (address > HoldingRegister_size ||

(address + length) > HoldingRegister_size) {
        return STATUS_ILLEGAL_DATA_ADDRESS;
    }
modified:   src/main.cpp
This commit is contained in:
chschloetel 2024-11-02 20:03:13 +01:00
parent 14b1d7079f
commit d94ba681fb

View File

@ -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