fix input register edge reset

master
Eggert Jung 3 years ago
parent bf14cbd8df
commit 38975d27bd

@ -44,12 +44,21 @@ void modbusGet(void) {
case fcReadInputRegisters: case fcReadInputRegisters:
if(modbusRequestedAddress() < 100) if(modbusRequestedAddress() < 100)
modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16); modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16);
else if(modbusRequestedAddress() < 200) else if(modbusRequestedAddress() < 200){
modbusExchangeRegisters((void *)inStatesBothEdges,100,nrOfInputs/16); modbusExchangeRegisters((void *)&inputEdgesBoth,100,nrOfInputs/16);
else if(modbusRequestedAddress() < 300) for(uint16_t i = modbusDataLocation - 100; i < modbusDataLocation-100+(modbusDataAmount*16); i++)
modbusExchangeRegisters((void *)inStatesFallingEdge,200,nrOfInputs/16); inputEdgesBoth &= ~(1 << i);
else if(modbusRequestedAddress() < 400) }
modbusExchangeRegisters((void *)inStatesRisingEdge,300,nrOfInputs/16); 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; break;
case fcReadInputStatus: case fcReadInputStatus: