Skip to content

Commit a3e7ede

Browse files
committed
Fixed the modbus client RTU write and _write functions for Py3
1 parent 2d02382 commit a3e7ede

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

sunspec/core/modbus/client.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,18 @@ def _write(self, slave_id, addr, data, trace_func=None):
232232
except_code = None
233233
func = FUNC_WRITE_MULTIPLE
234234
len_data = len(data)
235-
count = len_data/2
235+
count = int(len_data/2)
236236

237237
req = struct.pack('>BBHHB', int(slave_id), func, int(addr), count, len_data)
238+
if sys.version_info > (3,):
239+
data = bytes(data, "latin-1")
238240
req += data
239241
req += struct.pack('>H', computeCRC(req))
242+
if sys.version_info > (3,):
243+
temp = ""
244+
for i in req:
245+
temp += chr(i)
246+
req = temp
240247

241248
if trace_func:
242249
s = '%s:%s[addr=%s] ->' % (self.name, str(slave_id), addr)
@@ -246,12 +253,19 @@ def _write(self, slave_id, addr, data, trace_func=None):
246253

247254
self.serial.flushInput()
248255
try:
256+
if sys.version_info > (3,):
257+
req = bytes(req, "latin-1")
249258
self.serial.write(req)
250259
except Exception as e:
251260
raise ModbusClientError('Serial write error: %s' % str(e))
252261

253262
while len_remaining > 0:
254263
c = self.serial.read(len_remaining)
264+
if type(c) == bytes and sys.version_info > (3,):
265+
temp = ""
266+
for i in c:
267+
temp += chr(i)
268+
c = temp
255269
len_read = len(c);
256270
if len_read > 0:
257271
resp += c
@@ -279,6 +293,8 @@ def _write(self, slave_id, addr, data, trace_func=None):
279293
if except_code:
280294
raise ModbusClientException('Modbus exception: %d' % (except_code))
281295
else:
296+
if sys.version_info > (3,):
297+
resp = bytes(resp, 'latin-1')
282298
resp_slave_id, resp_func, resp_addr, resp_count, resp_crc = struct.unpack('>BBHHH', resp)
283299
if resp_slave_id != slave_id or resp_func != func or resp_addr != addr or resp_count != count:
284300
raise ModbusClientError('Mobus response format error')

0 commit comments

Comments
 (0)