Skip to content

Commit 555e5ef

Browse files
use callback to reset register data in RTU client example
1 parent beaca13 commit 555e5ef

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

examples/rtu_client_example.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
baudrate = 9600
4545
client = ModbusRTU(
4646
addr=slave_addr, # address on bus
47-
baudrate=baudrate, # optional, default 9600
4847
pins=rtu_pins, # given as tuple (TX, RX)
48+
baudrate=baudrate, # optional, default 9600
4949
# data_bits=8, # optional, default 8
5050
# stop_bits=1, # optional, default 1
5151
# parity=None, # optional, default None
@@ -57,6 +57,17 @@
5757
# works only with fake machine UART
5858
assert client._itf._uart._is_server is True
5959

60+
61+
def reset_data_registers_cb(reg_type, address, val):
62+
# usage of global isn't great, but okay for an example
63+
global client
64+
global register_definitions
65+
66+
print('Resetting register data to default values ...')
67+
client.setup_registers(registers=register_definitions)
68+
print('Default values restored')
69+
70+
6071
# common slave register setup, to be used with the Master example above
6172
register_definitions = {
6273
"COILS": {
@@ -101,24 +112,23 @@
101112
with open('registers/example.json', 'r') as file:
102113
register_definitions = json.load(file)
103114

115+
# reset all registers back to their default value with a callback
116+
register_definitions['COILS']['RESET_REGISTER_DATA_COIL']['on_set_cb'] = \
117+
reset_data_registers_cb
118+
104119
print('Setting up registers ...')
105120
# use the defined values of each register type provided by register_definitions
106121
client.setup_registers(registers=register_definitions)
107122
# alternatively use dummy default values (True for bool regs, 999 otherwise)
108123
# client.setup_registers(registers=register_definitions, use_default_vals=True)
109124
print('Register setup done')
110125

111-
reset_data_register = \
112-
register_definitions['COILS']['RESET_REGISTER_DATA_COIL']['register']
126+
print('Serving as RTU client on address {} at {} baud'.
127+
format(slave_addr, baudrate))
113128

114129
while True:
115130
try:
116131
result = client.process()
117-
if reset_data_register in client.coils:
118-
if client.get_coil(address=reset_data_register):
119-
print('Resetting register data to default values ...')
120-
client.setup_registers(registers=register_definitions)
121-
print('Default values restored')
122132
except KeyboardInterrupt:
123133
print('KeyboardInterrupt, stopping RTU client...')
124134
break

examples/rtu_host_example.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@
4747
# the following example is for an ESP32
4848
rtu_pins = (25, 26) # (TX, RX)
4949
baudrate = 9600
50+
5051
host = ModbusRTUMaster(
51-
baudrate=baudrate, # optional, default 9600
5252
pins=rtu_pins, # given as tuple (TX, RX)
53+
baudrate=baudrate, # optional, default 9600
5354
# data_bits=8, # optional, default 8
5455
# stop_bits=1, # optional, default 1
5556
# parity=None, # optional, default None
@@ -106,7 +107,7 @@
106107
register_definitions = json.load(file)
107108
"""
108109

109-
print('Requesting and updating data on RTU client at {} with {} baud'.
110+
print('Requesting and updating data on RTU client at address {} with {} baud'.
110111
format(slave_addr, baudrate))
111112
print()
112113

@@ -117,7 +118,7 @@
117118
slave_addr=slave_addr,
118119
starting_addr=coil_address,
119120
coil_qty=coil_qty)
120-
print('Status of coil {}: {}'.format(coil_status, coil_address))
121+
print('Status of COIL {}: {}'.format(coil_address, coil_status))
121122
time.sleep(1)
122123

123124
# WRITE COILS
@@ -126,15 +127,15 @@
126127
slave_addr=slave_addr,
127128
output_address=coil_address,
128129
output_value=new_coil_val)
129-
print('Result of setting coil {} to {}'.format(coil_address, operation_status))
130+
print('Result of setting COIL {} to {}'.format(coil_address, operation_status))
130131
time.sleep(1)
131132

132133
# READ COILS again
133134
coil_status = host.read_coils(
134135
slave_addr=slave_addr,
135136
starting_addr=coil_address,
136137
coil_qty=coil_qty)
137-
print('Status of coil {}: {}'.format(coil_status, coil_address))
138+
print('Status of COIL {}: {}'.format(coil_address, coil_status))
138139
time.sleep(1)
139140

140141
print()
@@ -147,7 +148,7 @@
147148
starting_addr=hreg_address,
148149
register_qty=register_qty,
149150
signed=False)
150-
print('Status of hreg {}: {}'.format(hreg_address, register_value))
151+
print('Status of HREG {}: {}'.format(hreg_address, register_value))
151152
time.sleep(1)
152153

153154
# WRITE HREGS
@@ -157,7 +158,7 @@
157158
register_address=hreg_address,
158159
register_value=new_hreg_val,
159160
signed=False)
160-
print('Result of setting hreg {} to {}'.format(hreg_address, operation_status))
161+
print('Result of setting HREG {} to {}'.format(hreg_address, operation_status))
161162
time.sleep(1)
162163

163164
# READ HREGS again
@@ -166,7 +167,7 @@
166167
starting_addr=hreg_address,
167168
register_qty=register_qty,
168169
signed=False)
169-
print('Status of hreg {}: {}'.format(hreg_address, register_value))
170+
print('Status of HREG {}: {}'.format(hreg_address, register_value))
170171
time.sleep(1)
171172

172173
print()
@@ -178,7 +179,7 @@
178179
slave_addr=slave_addr,
179180
starting_addr=ist_address,
180181
input_qty=input_qty)
181-
print('Status of ist {}: {}'.format(ist_address, input_status))
182+
print('Status of IST {}: {}'.format(ist_address, input_status))
182183
time.sleep(1)
183184

184185
# READ IREGS
@@ -189,7 +190,7 @@
189190
starting_addr=ireg_address,
190191
register_qty=register_qty,
191192
signed=False)
192-
print('Status of ireg {}: {}'.format(ireg_address, register_value))
193+
print('Status of IREG {}: {}'.format(ireg_address, register_value))
193194
time.sleep(1)
194195

195196
print()

0 commit comments

Comments
 (0)