diff --git a/pymodbus/simulator/simruntime.py b/pymodbus/simulator/simruntime.py index 5d0e5a8a1..817df356d 100644 --- a/pymodbus/simulator/simruntime.py +++ b/pymodbus/simulator/simruntime.py @@ -72,7 +72,7 @@ async def get_reg_block(self, block_id: str, func_code: int, address: int, count """Handle holding registers and input registers.""" start_address, register_count, registers, _ = self.block[block_id] offset = address - start_address - if register_count <= offset < 0 or offset + count > register_count: + if offset < 0 or offset + count > register_count: return ExcCodes.ILLEGAL_ADDRESS if (result := await self.__check_block(func_code, block_id, address, count, offset, values)): return result diff --git a/test/simulator/test_simruntime.py b/test/simulator/test_simruntime.py index 29b9b905f..4fbcc41a8 100644 --- a/test/simulator/test_simruntime.py +++ b/test/simulator/test_simruntime.py @@ -135,6 +135,14 @@ async def test_simruntime_getValues(self): rt = SimRuntime(sd) result = await rt.async_getValues(0x03, 10, 1) assert result == [15] + result = await rt.async_getValues(0x03, 8, 1) + assert isinstance(result, ExcCodes) + result = await rt.async_getValues(0x03, 9, 1) + assert isinstance(result, ExcCodes) + result = await rt.async_getValues(0x03, 11, 1) + assert isinstance(result, ExcCodes) + result = await rt.async_getValues(0x03, 12, 1) + assert isinstance(result, ExcCodes) result = await rt.async_getValues(0x03, 15, 1) assert isinstance(result, ExcCodes)