|
1 | 1 | ''' simulate modbus tcp server for testing ppg ''' |
| 2 | +import json |
2 | 3 | import sys |
3 | | -from modbus_tk import modbus_tcp, hooks, utils |
4 | | -from modbus_tk.defines import HOLDING_REGISTERS |
| 4 | + |
| 5 | +from modbus_tk import hooks, modbus_tcp, utils |
| 6 | +from modbus_tk.defines import HOLDING_REGISTERS, READ_INPUT_REGISTERS |
| 7 | + |
5 | 8 |
|
6 | 9 | def on_write_request(request): |
7 | 10 | print(f"Write request: {request}") |
8 | 11 |
|
9 | 12 |
|
10 | 13 | server = modbus_tcp.TcpServer(address="0.0.0.0", port=5020) |
11 | 14 | slave = server.add_slave(1) |
12 | | -slave.add_block('0', HOLDING_REGISTERS, 0, 100) # 100 registers |
13 | | -slave.set_values('0', 40, [1] * (55 - 40 + 1)) #regiters 40-55 set to 1. for emulating hdhk_16ch_ac_module |
| 15 | + |
| 16 | +#load registries |
| 17 | +input_save_path = "input_registry.json" |
| 18 | +holding_save_path = "holding_registry.json" |
| 19 | + |
| 20 | +#load previous scan if enabled and exists |
| 21 | +with open(input_save_path, "r") as file: |
| 22 | + input_registry = json.load(file) |
| 23 | + |
| 24 | +with open(holding_save_path, "r") as file: |
| 25 | + holding_registry = json.load(file) |
| 26 | + |
| 27 | +# Convert keys to integers |
| 28 | +input_registry = {int(key): value for key, value in input_registry.items()} |
| 29 | +holding_registry = {int(key): value for key, value in holding_registry.items()} |
| 30 | + |
| 31 | +slave.add_block('INPUT', READ_INPUT_REGISTERS, min(input_registry.keys()), max(input_registry.keys())) # 100 registers |
| 32 | +slave.add_block('HOLDING', HOLDING_REGISTERS, min(holding_registry.keys()), max(holding_registry.keys())) # 100 registers |
| 33 | + |
| 34 | +for address, value in input_registry.items(): |
| 35 | + slave.set_values('INPUT', address, [value]) |
| 36 | + |
| 37 | +for address, value in holding_registry.items(): |
| 38 | + slave.set_values('HOLDING', address, [value]) |
14 | 39 |
|
15 | 40 | server.start() |
16 | 41 | print("Modbus server is running on port 5020...") |
|
0 commit comments