diff --git a/src/main.cpp b/src/main.cpp index 8b8a0fc..bec0bca 100644 --- a/src/main.cpp +++ b/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