Skip to content

Commit 9c2aa14

Browse files
committed
simulate modbus from registry dumps
1 parent 4db8362 commit 9c2aa14

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

tools/modbus_server_sim.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,41 @@
11
''' simulate modbus tcp server for testing ppg '''
2+
import json
23
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+
58

69
def on_write_request(request):
710
print(f"Write request: {request}")
811

912

1013
server = modbus_tcp.TcpServer(address="0.0.0.0", port=5020)
1114
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])
1439

1540
server.start()
1641
print("Modbus server is running on port 5020...")

0 commit comments

Comments
 (0)