Skip to content

Commit 89fc136

Browse files
committed
Fix #628: hex values for repl arguments
Also fixed some issues with repl client for unit handling
1 parent 34acafd commit 89fc136

File tree

4 files changed

+45
-31
lines changed

4 files changed

+45
-31
lines changed

pymodbus/bit_write_message.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# pylint: disable=missing-type-doc
66
import struct
77

8-
from pymodbus.constants import ModbusStatus
8+
from pymodbus.constants import Defaults, ModbusStatus
99
from pymodbus.pdu import ModbusExceptions as merror, ModbusRequest, ModbusResponse
1010
from pymodbus.utilities import pack_bitstring, unpack_bitstring
1111

@@ -37,13 +37,14 @@ class WriteSingleCoilRequest(ModbusRequest):
3737
function_code = 5
3838
_rtu_frame_size = 8
3939

40-
def __init__(self, address=None, value=None, **kwargs):
40+
def __init__(self, address=None, value=None, unit=Defaults.UnitId, **kwargs):
4141
"""Initialize a new instance.
4242
4343
:param address: The variable address to write
4444
:param value: The value to write at address
45+
:param unit: Modbus slave unit ID
4546
"""
46-
ModbusRequest.__init__(self, **kwargs)
47+
super().__init__(unit, **kwargs)
4748
self.address = address
4849
self.value = bool(value)
4950

@@ -107,13 +108,14 @@ class WriteSingleCoilResponse(ModbusResponse):
107108
function_code = 5
108109
_rtu_frame_size = 8
109110

110-
def __init__(self, address=None, value=None, **kwargs):
111+
def __init__(self, address=None, value=None, unit=Defaults.UnitId, **kwargs):
111112
"""Initialize a new instance.
112113
113114
:param address: The variable address written to
114115
:param value: The value written at address
116+
:param unit: Modbus slave unit ID
115117
"""
116-
ModbusResponse.__init__(self, **kwargs)
118+
super().__init__(unit, **kwargs)
117119
self.address = address
118120
self.value = value
119121

@@ -160,13 +162,14 @@ class WriteMultipleCoilsRequest(ModbusRequest):
160162
function_code = 15
161163
_rtu_byte_count_pos = 6
162164

163-
def __init__(self, address=None, values=None, **kwargs):
165+
def __init__(self, address=None, values=None, unit=Defaults.UnitId, **kwargs):
164166
"""Initialize a new instance.
165167
166168
:param address: The starting request address
167169
:param values: The values to write
170+
:param unit: Modbus slave unit ID
168171
"""
169-
ModbusRequest.__init__(self, **kwargs)
172+
super().__init__(unit, **kwargs)
170173
self.address = address
171174
if not values:
172175
values = []
@@ -241,13 +244,14 @@ class WriteMultipleCoilsResponse(ModbusResponse):
241244
function_code = 15
242245
_rtu_frame_size = 8
243246

244-
def __init__(self, address=None, count=None, **kwargs):
247+
def __init__(self, address=None, count=None, unit=Defaults.UnitId, **kwargs):
245248
"""Initialize a new instance.
246249
247250
:param address: The starting variable address written to
248251
:param count: The number of values written
252+
:param unit: Modbus slave unit ID
249253
"""
250-
ModbusResponse.__init__(self, **kwargs)
254+
super().__init__(unit, **kwargs)
251255
self.address = address
252256
self.count = count
253257

pymodbus/client/mixin.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,59 +104,64 @@ def read_coils(self, address, count=1, unit=Defaults.UnitId, **kwargs):
104104
request = ReadCoilsRequest(address, count, unit, **kwargs)
105105
return self.execute(request) # pylint: disable=no-member
106106

107-
def read_discrete_inputs(self, address, count=1, **kwargs):
107+
def read_discrete_inputs(self, address, count=1, unit=Defaults.UnitId, **kwargs):
108108
"""Read discrete inputs.
109109
110110
:param address: The starting address to read from
111111
:param count: The number of discretes to read
112+
:param unit: Modbus slave unit ID
112113
:param kwargs:
113114
:returns: A deferred response handle
114115
"""
115-
request = ReadDiscreteInputsRequest(address, count, **kwargs)
116+
request = ReadDiscreteInputsRequest(address, count, unit, **kwargs)
116117
return self.execute(request) # pylint: disable=no-member
117118

118-
def write_coil(self, address, value, **kwargs):
119+
def write_coil(self, address, value, unit=Defaults.UnitId, **kwargs):
119120
"""Write_coil.
120121
121122
:param address: The starting address to write to
122123
:param value: The value to write to the specified address
124+
:param unit: Modbus slave unit ID
123125
:param kwargs:
124126
:returns: A deferred response handle
125127
"""
126-
request = WriteSingleCoilRequest(address, value, **kwargs)
128+
request = WriteSingleCoilRequest(address, value, unit, **kwargs)
127129
return self.execute(request) # pylint: disable=no-member
128130

129-
def write_coils(self, address, values, **kwargs):
131+
def write_coils(self, address, values, unit=Defaults.UnitId, **kwargs):
130132
"""Write coils.
131133
132134
:param address: The starting address to write to
133135
:param values: The values to write to the specified address
136+
:param unit: Modbus slave unit ID
134137
:param kwargs:
135138
:returns: A deferred response handle
136139
"""
137-
request = WriteMultipleCoilsRequest(address, values, **kwargs)
140+
request = WriteMultipleCoilsRequest(address, values, unit, **kwargs)
138141
return self.execute(request) # pylint: disable=no-member
139142

140-
def write_register(self, address, value, **kwargs):
143+
def write_register(self, address, value, unit=Defaults.UnitId, **kwargs):
141144
"""Write register.
142145
143146
:param address: The starting address to write to
144147
:param value: The value to write to the specified address
148+
:param unit: Modbus slave unit ID
145149
:param kwargs:
146150
:returns: A deferred response handle
147151
"""
148-
request = WriteSingleRegisterRequest(address, value, **kwargs)
152+
request = WriteSingleRegisterRequest(address, value, unit, **kwargs)
149153
return self.execute(request) # pylint: disable=no-member
150154

151-
def write_registers(self, address, values, **kwargs):
155+
def write_registers(self, address, values, unit=Defaults.UnitId, **kwargs):
152156
"""Write registers.
153157
154158
:param address: The starting address to write to
155159
:param values: The values to write to the specified address
160+
:param unit: Modbus slave unit ID
156161
:param kwargs:
157162
:returns: A deferred response handle
158163
"""
159-
request = WriteMultipleRegistersRequest(address, values, **kwargs)
164+
request = WriteMultipleRegistersRequest(address, values, unit, **kwargs)
160165
return self.execute(request) # pylint: disable=no-member
161166

162167
def read_holding_registers(self, address, count=1, unit=Defaults.UnitId, **kwargs):

pymodbus/register_write_message.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# pylint: disable=missing-type-doc
33
import struct
44

5+
from pymodbus.constants import Defaults
56
from pymodbus.pdu import ModbusExceptions as merror, ModbusRequest, ModbusResponse
67

78

@@ -16,13 +17,14 @@ class WriteSingleRegisterRequest(ModbusRequest):
1617
function_code = 6
1718
_rtu_frame_size = 8
1819

19-
def __init__(self, address=None, value=None, **kwargs):
20+
def __init__(self, address=None, value=None, unit=Defaults.UnitId, **kwargs):
2021
"""Initialize a new instance.
2122
2223
:param address: The address to start writing add
2324
:param value: The values to write
25+
:param unit: Modbus slave unit ID
2426
"""
25-
super().__init__(**kwargs)
27+
super().__init__(unit, **kwargs)
2628
self.address = address
2729
self.value = value
2830

@@ -85,13 +87,14 @@ class WriteSingleRegisterResponse(ModbusResponse):
8587
function_code = 6
8688
_rtu_frame_size = 8
8789

88-
def __init__(self, address=None, value=None, **kwargs):
90+
def __init__(self, address=None, value=None, unit=Defaults.UnitId, **kwargs):
8991
"""Initialize a new instance.
9092
9193
:param address: The address to start writing add
9294
:param value: The values to write
95+
:param unit: Modbus slave unit ID
9396
"""
94-
super().__init__(**kwargs)
97+
super().__init__(unit, **kwargs)
9598
self.address = address
9699
self.value = value
97100

@@ -145,13 +148,14 @@ class WriteMultipleRegistersRequest(ModbusRequest):
145148
_rtu_byte_count_pos = 6
146149
_pdu_length = 5 # func + adress1 + adress2 + outputQuant1 + outputQuant2
147150

148-
def __init__(self, address=None, values=None, **kwargs):
151+
def __init__(self, address=None, values=None, unit=Defaults.UnitId, **kwargs):
149152
"""Initialize a new instance.
150153
151154
:param address: The address to start writing to
152155
:param values: The values to write
156+
:param unit: Modbus slave unit ID
153157
"""
154-
super().__init__(**kwargs)
158+
super().__init__(unit, **kwargs)
155159
self.address = address
156160
if values is None:
157161
values = []
@@ -230,13 +234,14 @@ class WriteMultipleRegistersResponse(ModbusResponse):
230234
function_code = 16
231235
_rtu_frame_size = 8
232236

233-
def __init__(self, address=None, count=None, **kwargs):
237+
def __init__(self, address=None, count=None, unit=Defaults.UnitId, **kwargs):
234238
"""Initialize a new instance.
235239
236240
:param address: The address to start writing to
237241
:param count: The number of registers to write to
242+
:param unit: Modbus slave unit ID
238243
"""
239-
super().__init__(**kwargs)
244+
super().__init__(unit, **kwargs)
240245
self.address = address
241246
self.count = count
242247

pymodbus/repl/client/main.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,19 @@ def _process_args(args, string=True):
146146
if not string:
147147
if "," in val:
148148
val = val.split(",")
149-
val = [int(v) for v in val]
149+
val = [int(v, 0) for v in val]
150150
else:
151-
val = int(val)
151+
val = int(val, 0)
152152
kwargs[arg_name] = val
153153
else:
154154
arg_name, val = arg, args[i + 1]
155155
try:
156156
if not string:
157157
if "," in val:
158158
val = val.split(",")
159-
val = [int(v) for v in val]
159+
val = [int(v, 0) for v in val]
160160
else:
161-
val = int(val)
161+
val = int(val, 0)
162162
kwargs[arg_name] = val
163163
skip_index = i + 1
164164
except TypeError:

0 commit comments

Comments
 (0)