Skip to content

Commit 9b9c005

Browse files
committed
Fix #673
1 parent 8134711 commit 9b9c005

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

pymodbus/client/mixin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,12 @@ def write_registers(self, address, values, **kwargs):
157157
request = WriteMultipleRegistersRequest(address, values, **kwargs)
158158
return self.execute(request) # pylint: disable=no-member
159159

160-
def read_holding_registers(self, address, count=1, **kwargs):
160+
def read_holding_registers(self, address, count=1, unit=0, **kwargs):
161161
"""Read holding registers.
162162
163163
:param address: The starting address to read from
164164
:param count: The number of registers to read
165+
:param unit: Modbus slave unit ID
165166
:param kwargs:
166167
:returns: A deferred response handle
167168
"""

pymodbus/pdu.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class ModbusPDU:
3030
This is a constant set at 0 to indicate Modbus. It is
3131
put here for ease of expansion.
3232
33-
.. attribute:: unit_id
33+
.. attribute:: unit
3434
3535
This is used to route the request to the correct child. In
3636
the TCP modbus, it is used for routing (or not used at all. However,
@@ -51,11 +51,11 @@ class ModbusPDU:
5151
of encoding it again.
5252
"""
5353

54-
def __init__(self, **kwargs):
54+
def __init__(self, unit=Defaults.UnitId, **kwargs):
5555
"""Initialize the base data for a modbus request."""
5656
self.transaction_id = kwargs.get("transaction", Defaults.TransactionId)
5757
self.protocol_id = kwargs.get("protocol", Defaults.ProtocolId)
58-
self.unit_id = kwargs.get("unit", Defaults.UnitId)
58+
self.unit_id = unit
5959
self.skip_encode = kwargs.get("skip_encode", False)
6060
self.check = 0x0000
6161

pymodbus/repl/client/mclient.py

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def _process_exception(resp, **kwargs):
9696
}
9797
return err
9898

99-
def read_coils(self, address, count=1, **kwargs):
99+
def read_coils(self, address, count=1, unit=0, **kwargs):
100100
"""Read `count` coils from a given slave starting at `address`.
101101
102102
:param address: The starting address to read from
@@ -109,107 +109,114 @@ def read_coils(self, address, count=1, **kwargs):
109109
return {"function_code": resp.function_code, "bits": resp.bits}
110110
return ExtendedRequestSupport._process_exception(resp)
111111

112-
def read_discrete_inputs(self, address, count=1, **kwargs):
112+
def read_discrete_inputs(self, address, count=1, unit=0, **kwargs):
113113
"""Read `count` number of discrete inputs starting at offset `address`.
114114
115115
:param address: The starting address to read from
116116
:param count: The number of coils to read
117+
:param unit: Modbus slave unit ID
117118
:param kwargs:
118119
:return: List of bits
119120
"""
120121
resp = super().read_discrete_inputs( # pylint: disable=no-member
121-
address, count, **kwargs
122+
address, count, unit, **kwargs
122123
)
123124
if not resp.isError():
124125
return {"function_code": resp.function_code, "bits": resp.bits}
125126
return ExtendedRequestSupport._process_exception(resp)
126127

127128
@handle_brodcast
128-
def write_coil(self, address, value, **kwargs):
129+
def write_coil(self, address, value, unit=0, **kwargs):
129130
"""Write `value` to coil at `address`.
130131
131132
:param address: coil offset to write to
132133
:param value: bit value to write
134+
:param unit: Modbus slave unit ID
133135
:param kwargs:
134136
:return:
135137
"""
136-
resp = super().write_coil(address, value, **kwargs) # pylint: disable=no-member
138+
resp = super().write_coil(address, value, unit, **kwargs) # pylint: disable=no-member
137139
return resp
138140

139141
@handle_brodcast
140-
def write_coils(self, address, values, **kwargs):
142+
def write_coils(self, address, values, unit=0, **kwargs):
141143
"""Write `value` to coil at `address`.
142144
143145
:param address: coil offset to write to
144146
:param values: list of bit values to write (comma separated)
147+
:param unit: Modbus slave unit ID
145148
:param kwargs:
146149
:return:
147150
"""
148151
resp = super().write_coils( # pylint: disable=no-member
149-
address, values, **kwargs
152+
address, values, unit, **kwargs
150153
)
151154
return resp
152155

153156
@handle_brodcast
154-
def write_register(self, address, value, **kwargs):
157+
def write_register(self, address, value, unit=0, **kwargs):
155158
"""Write `value` to register at `address`.
156159
157160
:param address: register offset to write to
158161
:param value: register value to write
162+
:param unit: Modbus slave unit ID
159163
:param kwargs:
160164
:return:
161165
"""
162166
resp = super().write_register( # pylint: disable=no-member
163-
address, value, **kwargs
167+
address, value, unit, **kwargs
164168
)
165169
return resp
166170

167171
@handle_brodcast
168-
def write_registers(self, address, values, **kwargs):
172+
def write_registers(self, address, values, unit=0, **kwargs):
169173
"""Write list of `values` to registers starting at `address`.
170174
171175
:param address: register offset to write to
172176
:param values: list of register value to write (comma separated)
177+
:param unit: Modbus slave unit ID
173178
:param kwargs:
174179
:return:
175180
"""
176181
resp = super().write_registers( # pylint: disable=no-member
177-
address, values, **kwargs
182+
address, values, unit, **kwargs
178183
)
179184
return resp
180185

181-
def read_holding_registers(self, address, count=1, **kwargs):
186+
def read_holding_registers(self, address, count=1, unit=0, **kwargs):
182187
"""Read `count` number of holding registers starting at `address`.
183188
184189
:param address: starting register offset to read from
185190
:param count: Number of registers to read
191+
:param unit: Modbus slave unit ID
186192
:param kwargs:
187193
:return:
188194
"""
189195
resp = super().read_holding_registers( # pylint: disable=no-member
190-
address, count, **kwargs
196+
address, count, unit, **kwargs
191197
)
192198
if not resp.isError():
193199
return {"function_code": resp.function_code, "registers": resp.registers}
194200
return ExtendedRequestSupport._process_exception(resp)
195201

196-
def read_input_registers(self, address, count=1, **kwargs):
202+
def read_input_registers(self, address, count=1, unit=0, **kwargs):
197203
"""Read `count` number of input registers starting at `address`.
198204
199205
:param address: starting register offset to read from to
200206
:param count: Number of registers to read
207+
:param unit: Modbus slave unit ID
201208
:param kwargs:
202209
:return:
203210
"""
204211
resp = super().read_input_registers( # pylint: disable=no-member
205-
address, count, **kwargs
212+
address, count, unit, **kwargs
206213
)
207214
if not resp.isError():
208215
return {"function_code": resp.function_code, "registers": resp.registers}
209216
return ExtendedRequestSupport._process_exception(resp)
210217

211218
def readwrite_registers(
212-
self, read_address, read_count, write_address, write_registers, **kwargs
219+
self, read_address, read_count, write_address, write_registers, unit=0, **kwargs
213220
):
214221
"""Read `read_count` number of holding registers.
215222
@@ -220,6 +227,7 @@ def readwrite_registers(
220227
:param read_count: Number of registers to read
221228
:param write_address: register offset to write to
222229
:param write_registers: List of register values to write (comma separated)
230+
:param unit: Modbus slave unit ID
223231
:param kwargs:
224232
:return:
225233
"""
@@ -228,25 +236,27 @@ def readwrite_registers(
228236
read_count=read_count,
229237
write_address=write_address,
230238
write_registers=write_registers,
239+
unit=unit,
231240
**kwargs,
232241
)
233242
if not resp.isError():
234243
return {"function_code": resp.function_code, "registers": resp.registers}
235244
return ExtendedRequestSupport._process_exception(resp)
236245

237246
def mask_write_register(
238-
self, address=0x0000, and_mask=0xFFFF, or_mask=0x0000, **kwargs
247+
self, address=0x0000, and_mask=0xFFFF, or_mask=0x0000, unit=0, **kwargs
239248
):
240249
"""Mask content of holding register at `address` with `and_mask` and `or_mask`.
241250
242251
:param address: Reference address of register
243252
:param and_mask: And Mask
244253
:param or_mask: OR Mask
254+
:param unit: Modbus slave unit ID
245255
:param kwargs:
246256
:return:
247257
"""
248258
resp = super().mask_write_register( # pylint: disable=no-member
249-
address=address, and_mask=and_mask, or_mask=or_mask, **kwargs
259+
address=address, and_mask=and_mask, or_mask=or_mask, unit=unit, **kwargs
250260
)
251261
if not resp.isError():
252262
return {
@@ -279,13 +289,14 @@ def read_device_information(self, read_code=None, object_id=0x00, **kwargs):
279289
}
280290
return ExtendedRequestSupport._process_exception(resp)
281291

282-
def report_slave_id(self, **kwargs):
292+
def report_slave_id(self, unit=0, **kwargs):
283293
"""Report information about remote slave ID.
284294
295+
:param unit: Modbus slave unit ID
285296
:param kwargs:
286297
:return:
287298
"""
288-
request = ReportSlaveIdRequest(**kwargs)
299+
request = ReportSlaveIdRequest(unit, **kwargs)
289300
resp = self.execute(request) # pylint: disable=no-member
290301
if not resp.isError():
291302
return {

0 commit comments

Comments
 (0)