1313
1414from pymodbus import FramerType
1515from pymodbus .client import AsyncModbusTcpClient
16- from pymodbus .datastore import ModbusSimulatorContext
16+ from pymodbus .datastore import CellType , ModbusSimulatorContext
1717from pymodbus .server import ModbusSimulatorServer , get_simulator_commandline
1818
1919
2020_logger = logging .getLogger (__file__ )
2121
2222
2323async def read_registers (
24- client , addr , count , is_int , curval = None , minval = None , maxval = None
24+ client , addr , count , celltype : CellType , curval = None , minval = None , maxval = None
2525):
2626 """Run modbus call."""
2727 rr = await client .read_holding_registers (addr , count = count , device_id = 1 )
2828 assert not rr .isError ()
2929 if count == 1 :
3030 value = rr .registers [0 ]
3131 else :
32- value = ModbusSimulatorContext .build_value_from_registers (rr .registers , is_int )
33- if not is_int :
34- value = round (value , 1 )
32+ value = ModbusSimulatorContext .build_value_from_registers (
33+ rr .registers , celltype
34+ )
35+ if not CellType .is_int (celltype ):
36+ value = round (value , 2 )
3537 if curval :
3638 assert value == curval , f"{ value } == { curval } "
3739 else :
@@ -43,19 +45,30 @@ async def run_calls(client, count):
4345 _logger .info ("### Read fixed/increment/random value of different types." )
4446 _logger .info ("--> UINT16" )
4547 for count in range (1 , 5 ):
46- await read_registers (client , 1148 , 1 , True , curval = 32117 )
47- await read_registers (client , 2305 , 1 , True , curval = 50 + count )
48- await read_registers (client , 2306 , 1 , True , minval = 45 , maxval = 55 )
48+ await read_registers (client , 1148 , 1 , CellType . UINT16 , curval = 32117 )
49+ await read_registers (client , 2305 , 1 , CellType . UINT16 , curval = 50 + count )
50+ await read_registers (client , 2306 , 1 , CellType . UINT16 , minval = 45 , maxval = 55 )
4951
5052 _logger .info ("--> UINT32" )
51- await read_registers (client , 3188 , 2 , True , curval = 32514 )
52- await read_registers (client , 3876 , 2 , True , curval = 50000 + count )
53- await read_registers (client , 3878 , 2 , True , minval = 45000 , maxval = 55000 )
53+ await read_registers (client , 3188 , 2 , CellType .UINT32 , curval = 32514 )
54+ await read_registers (client , 3876 , 2 , CellType .UINT32 , curval = 50000 + count )
55+ await read_registers (
56+ client , 3878 , 2 , CellType .UINT32 , minval = 45000 , maxval = 55000
57+ )
5458
5559 _logger .info ("--> FLOAT32" )
56- await read_registers (client , 4188 , 2 , False , curval = 32514.2 )
57- await read_registers (client , 4876 , 2 , False , curval = 50000.0 + count )
58- await read_registers (client , 4878 , 2 , False , minval = 45000.0 , maxval = 55000.0 )
60+ await read_registers (client , 4188 , 2 , CellType .FLOAT32 , curval = 32514.2 )
61+ await read_registers (client , 4876 , 2 , CellType .FLOAT32 , curval = 50000.0 + count )
62+ await read_registers (
63+ client , 4878 , 2 , CellType .FLOAT32 , minval = 45000.0 , maxval = 55000.0
64+ )
65+
66+ _logger .info ("--> FLOAT64" )
67+ await read_registers (client , 5092 , 4 , CellType .FLOAT64 , curval = - 32514.2 )
68+ await read_registers (client , 5164 , 4 , CellType .FLOAT64 , curval = - 42.15 + count )
69+ await read_registers (
70+ client , 5244 , 4 , CellType .FLOAT64 , minval = - 4242 , maxval = 314.92
71+ )
5972
6073
6174async def run_simulator ():
0 commit comments