@@ -232,11 +232,18 @@ def _write(self, slave_id, addr, data, trace_func=None):
232
232
except_code = None
233
233
func = FUNC_WRITE_MULTIPLE
234
234
len_data = len (data )
235
- count = len_data / 2
235
+ count = int ( len_data / 2 )
236
236
237
237
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" )
238
240
req += data
239
241
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
240
247
241
248
if trace_func :
242
249
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):
246
253
247
254
self .serial .flushInput ()
248
255
try :
256
+ if sys .version_info > (3 ,):
257
+ req = bytes (req , "latin-1" )
249
258
self .serial .write (req )
250
259
except Exception as e :
251
260
raise ModbusClientError ('Serial write error: %s' % str (e ))
252
261
253
262
while len_remaining > 0 :
254
263
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
255
269
len_read = len (c );
256
270
if len_read > 0 :
257
271
resp += c
@@ -279,6 +293,8 @@ def _write(self, slave_id, addr, data, trace_func=None):
279
293
if except_code :
280
294
raise ModbusClientException ('Modbus exception: %d' % (except_code ))
281
295
else :
296
+ if sys .version_info > (3 ,):
297
+ resp = bytes (resp , 'latin-1' )
282
298
resp_slave_id , resp_func , resp_addr , resp_count , resp_crc = struct .unpack ('>BBHHH' , resp )
283
299
if resp_slave_id != slave_id or resp_func != func or resp_addr != addr or resp_count != count :
284
300
raise ModbusClientError ('Mobus response format error' )
0 commit comments