test_register_store_context.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import asyncio
  2. import unittest
  3. from pymodbus.constants import ExcCodes
  4. from modbus_context import ReadonlyHoldingRegisterContext
  5. from point_model import ModbusPoint
  6. from register_store import RegisterStore, initialize_register_store
  7. class RegisterStoreContextTest(unittest.TestCase):
  8. def test_store_read_write_and_invalid_address(self):
  9. store = RegisterStore()
  10. points = [ModbusPoint("a", "A", "float32", 1, 0)]
  11. initialize_register_store(points, store)
  12. self.assertEqual(store.read_holding_registers(1, 0, 2), [0, 0])
  13. store.write_internal(1, 0, [0x3F80, 0x0000])
  14. self.assertEqual(store.read_holding_registers(1, 0, 2), [0x3F80, 0x0000])
  15. self.assertEqual(store.read_holding_registers(1, 1, 2), ExcCodes.ILLEGAL_ADDRESS)
  16. with self.assertRaises(KeyError):
  17. store.write_internal(1, 2, [1])
  18. def test_context_is_readonly_holding_register_only(self):
  19. store = RegisterStore()
  20. initialize_register_store([ModbusPoint("a", "A", "int16", 1, 10)], store)
  21. context = ReadonlyHoldingRegisterContext(store)
  22. async def run():
  23. read_values = await context.async_getValues(1, 3, 10, 1)
  24. input_read = await context.async_getValues(1, 4, 10, 1)
  25. write_result = await context.async_setValues(1, 6, 10, [1])
  26. return read_values, input_read, write_result
  27. read_values, input_read, write_result = asyncio.run(run())
  28. self.assertEqual(read_values, [0])
  29. self.assertEqual(input_read, ExcCodes.ILLEGAL_FUNCTION)
  30. self.assertEqual(write_result, ExcCodes.ILLEGAL_FUNCTION)
  31. if __name__ == "__main__":
  32. unittest.main()