diff options
Diffstat (limited to 'src/serialbus/qmodbusserver.cpp')
-rw-r--r-- | src/serialbus/qmodbusserver.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/serialbus/qmodbusserver.cpp b/src/serialbus/qmodbusserver.cpp index 5c0f8dd..929ac9a 100644 --- a/src/serialbus/qmodbusserver.cpp +++ b/src/serialbus/qmodbusserver.cpp @@ -502,10 +502,11 @@ bool QModbusServer::writeData(const QModbusDataUnit &newData) return false; bool changeRequired = false; - for (int i = newData.startAddress(); i <= rangeEndAddress; i++) { - quint16 newValue = newData.value(i - newData.startAddress()); - changeRequired |= (current.value(i) != newValue); - current.setValue(i, newValue); + for (uint i = 0; i < newData.valueCount(); i++) { + const quint16 newValue = newData.value(i); + const int translatedIndex = newData.startAddress() - current.startAddress() + i; + changeRequired |= (current.value(translatedIndex) != newValue); + current.setValue(translatedIndex, newValue); } if (changeRequired) @@ -553,7 +554,7 @@ bool QModbusServer::readData(QModbusDataUnit *newData) const if (rangeEndAddress < current.startAddress() || rangeEndAddress > internalRangeEndAddress) return false; - newData->setValues(current.values().mid(newData->startAddress(), newData->valueCount())); + newData->setValues(current.values().mid(newData->startAddress() - current.startAddress(), newData->valueCount())); return true; } |