From 38975d27bd3aa6816e5598b2a4f9083ac0ff2f7c Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Fri, 21 Oct 2022 10:33:38 +0200 Subject: [PATCH] fix input register edge reset --- main.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/main.c b/main.c index d0ae00b..1a0482c 100644 --- a/main.c +++ b/main.c @@ -44,12 +44,21 @@ void modbusGet(void) { case fcReadInputRegisters: if(modbusRequestedAddress() < 100) modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16); - else if(modbusRequestedAddress() < 200) - modbusExchangeRegisters((void *)inStatesBothEdges,100,nrOfInputs/16); - else if(modbusRequestedAddress() < 300) - modbusExchangeRegisters((void *)inStatesFallingEdge,200,nrOfInputs/16); - else if(modbusRequestedAddress() < 400) - modbusExchangeRegisters((void *)inStatesRisingEdge,300,nrOfInputs/16); + else if(modbusRequestedAddress() < 200){ + modbusExchangeRegisters((void *)&inputEdgesBoth,100,nrOfInputs/16); + for(uint16_t i = modbusDataLocation - 100; i < modbusDataLocation-100+(modbusDataAmount*16); i++) + inputEdgesBoth &= ~(1 << i); + } + else if(modbusRequestedAddress() < 300){ + modbusExchangeRegisters((void *)&inputEdgesFalling,200,nrOfInputs/16); + for(uint16_t i = modbusDataLocation - 200; i < modbusDataLocation-200+(modbusDataAmount*16); i++) + inputEdgesFalling &= ~(1 << i); + } + else if(modbusRequestedAddress() < 400){ + modbusExchangeRegisters((void *)&inputEdgesRising,300,nrOfInputs/16); + for(uint16_t i = modbusDataLocation - 300; i < modbusDataLocation-300+(modbusDataAmount*16); i++) + inputEdgesRising &= ~(1 << i); + } break; case fcReadInputStatus: