Skip to content

Commit 6fb7783

Browse files
committed
Fix #673
1 parent 8134711 commit 6fb7783

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-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: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,12 @@ 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
103103
:param count: The number of coils to read
104+
:param unit: Modbus slave unit ID
104105
:param kwargs:
105106
:returns: List of register values
106107
"""
@@ -109,107 +110,114 @@ def read_coils(self, address, count=1, **kwargs):
109110
return {"function_code": resp.function_code, "bits": resp.bits}
110111
return ExtendedRequestSupport._process_exception(resp)
111112

112-
def read_discrete_inputs(self, address, count=1, **kwargs):
113+
def read_discrete_inputs(self, address, count=1, unit=0, **kwargs):
113114
"""Read `count` number of discrete inputs starting at offset `address`.
114115
115116
:param address: The starting address to read from
116117
:param count: The number of coils to read
118+
:param unit: Modbus slave unit ID
117119
:param kwargs:
118120
:return: List of bits
119121
"""
120122
resp = super().read_discrete_inputs( # pylint: disable=no-member
121-
address, count, **kwargs
123+
address, count, unit, **kwargs
122124
)
123125
if not resp.isError():
124126
return {"function_code": resp.function_code, "bits": resp.bits}
125127
return ExtendedRequestSupport._process_exception(resp)
126128

127129
@handle_brodcast
128-
def write_coil(self, address, value, **kwargs):
130+
def write_coil(self, address, value, unit=0, **kwargs):
129131
"""Write `value` to coil at `address`.
130132
131133
:param address: coil offset to write to
132134
:param value: bit value to write
135+
:param unit: Modbus slave unit ID
133136
:param kwargs:
134137
:return:
135138
"""
136-
resp = super().write_coil(address, value, **kwargs) # pylint: disable=no-member
139+
resp = super().write_coil(address, value, unit, **kwargs) # pylint: disable=no-member
137140
return resp
138141

139142
@handle_brodcast
140-
def write_coils(self, address, values, **kwargs):
143+
def write_coils(self, address, values, unit=0, **kwargs):
141144
"""Write `value` to coil at `address`.
142145
143146
:param address: coil offset to write to
144147
:param values: list of bit values to write (comma separated)
148+
:param unit: Modbus slave unit ID
145149
:param kwargs:
146150
:return:
147151
"""
148152
resp = super().write_coils( # pylint: disable=no-member
149-
address, values, **kwargs
153+
address, values, unit, **kwargs
150154
)
151155
return resp
152156

153157
@handle_brodcast
154-
def write_register(self, address, value, **kwargs):
158+
def write_register(self, address, value, unit=0, **kwargs):
155159
"""Write `value` to register at `address`.
156160
157161
:param address: register offset to write to
158162
:param value: register value to write
163+
:param unit: Modbus slave unit ID
159164
:param kwargs:
160165
:return:
161166
"""
162167
resp = super().write_register( # pylint: disable=no-member
163-
address, value, **kwargs
168+
address, value, unit, **kwargs
164169
)
165170
return resp
166171

167172
@handle_brodcast
168-
def write_registers(self, address, values, **kwargs):
173+
def write_registers(self, address, values, unit=0, **kwargs):
169174
"""Write list of `values` to registers starting at `address`.
170175
171176
:param address: register offset to write to
172177
:param values: list of register value to write (comma separated)
178+
:param unit: Modbus slave unit ID
173179
:param kwargs:
174180
:return:
175181
"""
176182
resp = super().write_registers( # pylint: disable=no-member
177-
address, values, **kwargs
183+
address, values, unit, **kwargs
178184
)
179185
return resp
180186

181-
def read_holding_registers(self, address, count=1, **kwargs):
187+
def read_holding_registers(self, address, count=1, unit=0, **kwargs):
182188
"""Read `count` number of holding registers starting at `address`.
183189
184190
:param address: starting register offset to read from
185191
:param count: Number of registers to read
192+
:param unit: Modbus slave unit ID
186193
:param kwargs:
187194
:return:
188195
"""
189196
resp = super().read_holding_registers( # pylint: disable=no-member
190-
address, count, **kwargs
197+
address, count, unit, **kwargs
191198
)
192199
if not resp.isError():
193200
return {"function_code": resp.function_code, "registers": resp.registers}
194201
return ExtendedRequestSupport._process_exception(resp)
195202

196-
def read_input_registers(self, address, count=1, **kwargs):
203+
def read_input_registers(self, address, count=1, unit=0, **kwargs):
197204
"""Read `count` number of input registers starting at `address`.
198205
199206
:param address: starting register offset to read from to
200207
:param count: Number of registers to read
208+
:param unit: Modbus slave unit ID
201209
:param kwargs:
202210
:return:
203211
"""
204212
resp = super().read_input_registers( # pylint: disable=no-member
205-
address, count, **kwargs
213+
address, count, unit, **kwargs
206214
)
207215
if not resp.isError():
208216
return {"function_code": resp.function_code, "registers": resp.registers}
209217
return ExtendedRequestSupport._process_exception(resp)
210218

211219
def readwrite_registers(
212-
self, read_address, read_count, write_address, write_registers, **kwargs
220+
self, read_address, read_count, write_address, write_registers, unit=0, **kwargs
213221
):
214222
"""Read `read_count` number of holding registers.
215223
@@ -220,6 +228,7 @@ def readwrite_registers(
220228
:param read_count: Number of registers to read
221229
:param write_address: register offset to write to
222230
:param write_registers: List of register values to write (comma separated)
231+
:param unit: Modbus slave unit ID
223232
:param kwargs:
224233
:return:
225234
"""
@@ -228,25 +237,27 @@ def readwrite_registers(
228237
read_count=read_count,
229238
write_address=write_address,
230239
write_registers=write_registers,
240+
unit=unit,
231241
**kwargs,
232242
)
233243
if not resp.isError():
234244
return {"function_code": resp.function_code, "registers": resp.registers}
235245
return ExtendedRequestSupport._process_exception(resp)
236246

237247
def mask_write_register(
238-
self, address=0x0000, and_mask=0xFFFF, or_mask=0x0000, **kwargs
248+
self, address=0x0000, and_mask=0xFFFF, or_mask=0x0000, unit=0, **kwargs
239249
):
240250
"""Mask content of holding register at `address` with `and_mask` and `or_mask`.
241251
242252
:param address: Reference address of register
243253
:param and_mask: And Mask
244254
:param or_mask: OR Mask
255+
:param unit: Modbus slave unit ID
245256
:param kwargs:
246257
:return:
247258
"""
248259
resp = super().mask_write_register( # pylint: disable=no-member
249-
address=address, and_mask=and_mask, or_mask=or_mask, **kwargs
260+
address=address, and_mask=and_mask, or_mask=or_mask, unit=unit, **kwargs
250261
)
251262
if not resp.isError():
252263
return {
@@ -279,13 +290,14 @@ def read_device_information(self, read_code=None, object_id=0x00, **kwargs):
279290
}
280291
return ExtendedRequestSupport._process_exception(resp)
281292

282-
def report_slave_id(self, **kwargs):
293+
def report_slave_id(self, unit=0, **kwargs):
283294
"""Report information about remote slave ID.
284295
296+
:param unit: Modbus slave unit ID
285297
:param kwargs:
286298
:return:
287299
"""
288-
request = ReportSlaveIdRequest(**kwargs)
300+
request = ReportSlaveIdRequest(unit, **kwargs)
289301
resp = self.execute(request) # pylint: disable=no-member
290302
if not resp.isError():
291303
return {

0 commit comments

Comments
 (0)