From 14a2171cd77dab55d1d4004ebd67be0678bd1e65 Mon Sep 17 00:00:00 2001 From: Python3pkg Date: Wed, 17 May 2017 23:50:56 -0700 Subject: [PATCH 1/4] Convert to python3 --- bin/chamberconnectlibrary-test.py | 16 +- bin/example.py | 24 +-- chamberconnectlibrary/controllerinterface.py | 209 +++++++++---------- chamberconnectlibrary/espec.py | 10 +- chamberconnectlibrary/modbus.py | 2 +- chamberconnectlibrary/p300.py | 4 +- chamberconnectlibrary/scp220.py | 2 +- chamberconnectlibrary/watlowf4.py | 4 +- chamberconnectlibrary/watlowf4t.py | 12 +- 9 files changed, 141 insertions(+), 142 deletions(-) diff --git a/bin/chamberconnectlibrary-test.py b/bin/chamberconnectlibrary-test.py index 98aaa3f..8e636bb 100644 --- a/bin/chamberconnectlibrary-test.py +++ b/bin/chamberconnectlibrary-test.py @@ -39,11 +39,11 @@ def main(**kwargs): except Exception: traceback.print_exc() - print '\nThe test could not be run try:' - print '\nchamberconnectlibrary_test controller interface ipORserialport [baudrate]' - print '\tcontroller: "Espec"/"EspecP300", "EspecSCP220", "WatlowF4", or "WatlowF4T"(default)' - print '\tinterface: "Serial": Serial connection when "controller" is "Espec".' - print '\t "RTU":Serial connection when "controller" is "WatlowF4T"' - print '\t "TCP":TCP connection' - print '\t"hostORserialport": hostname for TCP, or serial port for RTU/Serial' - print '\t"baudrate": The baudrate for RTU/Serial, optional(default=9600)' + print('\nThe test could not be run try:') + print('\nchamberconnectlibrary_test controller interface ipORserialport [baudrate]') + print('\tcontroller: "Espec"/"EspecP300", "EspecSCP220", "WatlowF4", or "WatlowF4T"(default)') + print('\tinterface: "Serial": Serial connection when "controller" is "Espec".') + print('\t "RTU":Serial connection when "controller" is "WatlowF4T"') + print('\t "TCP":TCP connection') + print('\t"hostORserialport": hostname for TCP, or serial port for RTU/Serial') + print('\t"baudrate": The baudrate for RTU/Serial, optional(default=9600)') diff --git a/bin/example.py b/bin/example.py index 4fe5464..7236fd4 100644 --- a/bin/example.py +++ b/bin/example.py @@ -11,27 +11,27 @@ baudrate=19200, loop_names=LOOP_NAMES ) -print CONTROLLER.process_controller() +print(CONTROLLER.process_controller()) -print '\ncascade loops:' +print('\ncascade loops:') for i in range(CONTROLLER.cascades): - print CONTROLLER.get_loop(i+1, 'cascade', ['processvalue', 'setpoint']) + print(CONTROLLER.get_loop(i+1, 'cascade', ['processvalue', 'setpoint'])) -print '\nloops:' +print('\nloops:') for i in range(CONTROLLER.loops): - print CONTROLLER.get_loop(i+1, 'loop', 'processvalue', 'setpoint') + print(CONTROLLER.get_loop(i+1, 'loop', 'processvalue', 'setpoint')) -print '\nnamed loops:' +print('\nnamed loops:') for name in LOOP_NAMES: - print CONTROLLER.get_loop(name, ['processvalue', 'setpoint']) + print(CONTROLLER.get_loop(name, ['processvalue', 'setpoint'])) for name in LOOP_NAMES: - print CONTROLLER.set_loop(name, setpoint=60.0) + print(CONTROLLER.set_loop(name, setpoint=60.0)) -print '\noperations:' -print CONTROLLER.get_operation() +print('\noperations:') +print(CONTROLLER.get_operation()) CONTROLLER.set_operation('standby') -print '\nEvents:' +print('\nEvents:') for i in range(8): - print CONTROLLER.get_event(i+1) + print(CONTROLLER.get_event(i+1)) diff --git a/chamberconnectlibrary/controllerinterface.py b/chamberconnectlibrary/controllerinterface.py index 1cb0055..ffa6cb8 100644 --- a/chamberconnectlibrary/controllerinterface.py +++ b/chamberconnectlibrary/controllerinterface.py @@ -40,9 +40,8 @@ def wrapper(self, *args, **kwargs): return func(self, *args, **kwargs) return wrapper -class ControllerInterface: +class ControllerInterface(metaclass=ABCMeta): '''Abstract class for a controller implimentation of the chamberconnectlibrary''' - __metaclass__ = ABCMeta loop_map = [] named_loop_map = {} @@ -180,7 +179,7 @@ def get_loop(self, identifier, *args): } } - if isinstance(identifier, basestring): + if isinstance(identifier, str): my_loop_map = self.loop_map[self.named_loop_map[identifier]] loop_number = my_loop_map['num'] loop_type = my_loop_map['type'] @@ -197,7 +196,7 @@ def get_loop(self, identifier, *args): ) if param_list is None: - param_list = loop_functions[loop_type].keys() + param_list = list(loop_functions[loop_type].keys()) excludes = ['setPoint', 'setValue', 'processValue'] param_list = [x for x in param_list if x not in excludes] elif len(param_list) >= 1 and \ @@ -260,11 +259,11 @@ def set_loop(self, identifier, loop_type='loop', param_list=None, **kwargs): } if param_list is None: param_list = kwargs - if isinstance(identifier, basestring): + if isinstance(identifier, str): my_loop_map = self.loop_map[self.named_loop_map[identifier]] loop_number = my_loop_map['num'] loop_type = my_loop_map['type'] - elif isinstance(identifier, (int, long)): + elif isinstance(identifier, int): loop_number = identifier else: raise ValueError( @@ -280,7 +279,7 @@ def set_loop(self, identifier, loop_type='loop', param_list=None, **kwargs): N=loop_number, value=param_list.pop('mode') ) - for key, val in param_list.items(): + for key, val in list(param_list.items()): try: loop_functions[loop_type][key]( exclusive=False, @@ -1096,311 +1095,311 @@ def print_exception(trce): ''' Format an Exception for printing ''' - print '\n'.join(['\t' + l for l in trce.split('\n')]) + print('\n'.join(['\t' + l for l in trce.split('\n')])) - print 'process_controller():' + print('process_controller():') try: - print '\t%r' % self.process_controller() + print('\t%r' % self.process_controller()) except Exception: print_exception(traceback.format_exc()) - print 'get_datetime:' + print('get_datetime:') try: - print '\t%r' % self.get_datetime() + print('\t%r' % self.get_datetime()) except Exception: print_exception(traceback.format_exc()) - print 'set_datetime:' + print('set_datetime:') try: self.set_datetime(self.get_datetime()) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_operation:' + print('get_operation:') try: - print '\t%r' % self.get_operation() + print('\t%r' % self.get_operation()) except Exception: print_exception(traceback.format_exc()) for lpi in range(loops): i = lpi + 1 - print 'get_loop_sp(%d):' % i + print('get_loop_sp(%d):' % i) try: - print '\t%r' % self.get_loop_sp(i) + print('\t%r' % self.get_loop_sp(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_loop_sp(%d):' %i + print('set_loop_sp(%d):' %i) try: self.set_loop_sp(i, self.get_loop_sp(i)['constant']) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_loop_pv(%d):' % i + print('get_loop_pv(%d):' % i) try: - print '\t%r' % self.get_loop_pv(i) + print('\t%r' % self.get_loop_pv(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_loop_range(%d):' % i + print('get_loop_range(%d):' % i) try: - print '\t%r' % self.get_loop_range(i) + print('\t%r' % self.get_loop_range(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_loop_range(%d):' %i + print('set_loop_range(%d):' %i) try: self.set_loop_range(i, self.get_loop_range(i)) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_loop_en(%d):' % i + print('get_loop_en(%d):' % i) try: - print '\t%r' % self.get_loop_en(i) + print('\t%r' % self.get_loop_en(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_loop_en(%d):' %i + print('set_loop_en(%d):' %i) try: self.set_loop_en(i, self.get_loop_en(i)['constant']) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_loop_units(%d):' % i + print('get_loop_units(%d):' % i) try: - print '\t%r' % self.get_loop_units(i) + print('\t%r' % self.get_loop_units(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_loop_mode(%d):' % i + print('get_loop_mode(%d):' % i) try: - print '\t%r' % self.get_loop_mode(i) + print('\t%r' % self.get_loop_mode(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_loop_power(%d):' % i + print('get_loop_power(%d):' % i) try: - print '\t%r' % self.get_loop_power(i) + print('\t%r' % self.get_loop_power(i)) except Exception: print_exception(traceback.format_exc()) for csi in range(cascades): i = csi + 1 - print 'get_cascade_sp[%d]:' % i + print('get_cascade_sp[%d]:' % i) try: - print '\t%r' % self.get_cascade_sp(i) + print('\t%r' % self.get_cascade_sp(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_cascade_sp(%d):' %i + print('set_cascade_sp(%d):' %i) try: self.set_cascade_sp(i, self.get_cascade_sp(i)['constant']) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_pv(%d):' % i + print('get_cascade_pv(%d):' % i) try: - print '\t%r' % self.get_cascade_pv(i) + print('\t%r' % self.get_cascade_pv(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_range(%d):' % i + print('get_cascade_range(%d):' % i) try: - print '\t%r' % self.get_cascade_range(i) + print('\t%r' % self.get_cascade_range(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_cascade_range[%d]:' %i + print('set_cascade_range[%d]:' %i) try: self.set_cascade_range(i, self.get_cascade_range(i)) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_en[%d]:' % i + print('get_cascade_en[%d]:' % i) try: - print '\t%r' % self.get_cascade_en(i) + print('\t%r' % self.get_cascade_en(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_cascade_en(%d):' %i + print('set_cascade_en(%d):' %i) try: self.set_cascade_en(i, self.get_cascade_en(i)['constant']) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_units(%d):' % i + print('get_cascade_units(%d):' % i) try: - print '\t%r' % self.get_cascade_units(i) + print('\t%r' % self.get_cascade_units(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_mode(%d):' % i + print('get_cascade_mode(%d):' % i) try: - print '\t%r' % self.get_cascade_mode(i) + print('\t%r' % self.get_cascade_mode(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_ctl(%d):' % i + print('get_cascade_ctl(%d):' % i) try: - print '\t%r' % self.get_cascade_ctl(i) + print('\t%r' % self.get_cascade_ctl(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_cascade_ctl(%d):' %i + print('set_cascade_ctl(%d):' %i) try: self.set_cascade_ctl(i, self.get_cascade_ctl(i)) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_cascade_deviation(%d):' % i + print('get_cascade_deviation(%d):' % i) try: - print '\t%r' % self.get_cascade_deviation(i) + print('\t%r' % self.get_cascade_deviation(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_cascade_deviation(%d):' %i + print('set_cascade_deviation(%d):' %i) try: self.set_cascade_deviation(i, self.get_cascade_deviation(i)) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) for i in range(1, 13): - print 'get_event(%d):' % i + print('get_event(%d):' % i) try: - print '\t%r' % self.get_event(i) + print('\t%r' % self.get_event(i)) except Exception: print_exception(traceback.format_exc()) - print 'set_event(%d):' %i + print('set_event(%d):' %i) try: self.set_event(i, self.get_event(i)['current']) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_status:' + print('get_status:') try: - print '\t%r' % self.get_status() + print('\t%r' % self.get_status()) except Exception: print_exception(traceback.format_exc()) - print 'get_alarm_status:' + print('get_alarm_status:') try: - print '\t%r' % self.get_alarm_status() + print('\t%r' % self.get_alarm_status()) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm_cur:' + print('get_prgm_cur:') try: - print '\t%r' % self.get_prgm_cur() + print('\t%r' % self.get_prgm_cur()) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm_cstep:' + print('get_prgm_cstep:') try: - print '\t%r' % self.get_prgm_cstep() + print('\t%r' % self.get_prgm_cstep()) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm_cstime:' + print('get_prgm_cstime:') try: - print '\t%r' % self.get_prgm_cstime() + print('\t%r' % self.get_prgm_cstime()) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm_time:' + print('get_prgm_time:') try: - print '\t%r' % self.get_prgm_time() + print('\t%r' % self.get_prgm_time()) except Exception: print_exception(traceback.format_exc()) for i in range(1, 6): #do 5 programs only - print 'get_prgm_name(%d):' % i + print('get_prgm_name(%d):' % i) try: - print '\t%r' % self.get_prgm_name(i) + print('\t%r' % self.get_prgm_name(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm_steps(%d):' % i + print('get_prgm_steps(%d):' % i) try: - print '\t%r' % self.get_prgm_steps(i) + print('\t%r' % self.get_prgm_steps(i)) except Exception: print_exception(traceback.format_exc()) - print 'get_prgms:' + print('get_prgms:') try: - print '\t%r' % self.get_prgms() + print('\t%r' % self.get_prgms()) except Exception: print_exception(traceback.format_exc()) - print 'get_prgm(1):' + print('get_prgm(1):') try: - print '\t%r' % self.get_prgm(1) + print('\t%r' % self.get_prgm(1)) except Exception: print_exception(traceback.format_exc()) - print 'set_prgm(1):' + print('set_prgm(1):') try: self.set_prgm(2, self.get_prgm(1)) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'get_network_settings:' + print('get_network_settings:') try: - print '\t%r' % self.get_network_settings() + print('\t%r' % self.get_network_settings()) except Exception: print_exception(traceback.format_exc()) - print 'set_network_settings:' + print('set_network_settings:') try: self.set_network_settings(self.get_network_settings()) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call const_start():' + print('call const_start():') try: self.const_start() time.sleep(5) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call stop():' + print('call stop():') try: self.stop() time.sleep(5) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call prgm_start(1,1):' + print('call prgm_start(1,1):') try: self.prgm_start(1, 1) time.sleep(5) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call prgm_pause():' + print('call prgm_pause():') try: self.prgm_pause() time.sleep(5) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call prgm_resume():' + print('call prgm_resume():') try: self.prgm_resume() time.sleep(5) - print '\tok' + print('\tok') except Exception: print_exception(traceback.format_exc()) - print 'call sample():' + print('call sample():') try: - print '\t%r' % self.sample() + print('\t%r' % self.sample()) except Exception: print_exception(traceback.format_exc()) - print 'Testing Complete' + print('Testing Complete') diff --git a/chamberconnectlibrary/espec.py b/chamberconnectlibrary/espec.py index 19e67b8..0eb29c6 100644 --- a/chamberconnectlibrary/espec.py +++ b/chamberconnectlibrary/espec.py @@ -149,11 +149,11 @@ def set_loop(self, identifier, loop_type='loop', param_list=None, **kwargs): } if param_list is None: param_list = kwargs - if isinstance(identifier, basestring): + if isinstance(identifier, str): my_loop_map = self.loop_map[self.named_loop_map[identifier]] loop_number = my_loop_map['num'] loop_type = my_loop_map['type'] - elif isinstance(identifier, (int, long)): + elif isinstance(identifier, int): loop_number = identifier else: raise ValueError( @@ -198,7 +198,7 @@ def set_loop(self, identifier, loop_type='loop', param_list=None, **kwargs): params = {param_list.pop('enable_cascade')} params.update(param_list.pop('deviation')) self.client.write_temp_ptc(**params) - for key, val in param_list.items(): + for key, val in list(param_list.items()): params = {'value':val} params.update({'exclusive':False, 'N':loop_number}) try: @@ -294,9 +294,9 @@ def set_loop_en(self, N, value): @exclusive def get_loop_units(self, N): if self.lpd[N] == self.temp: - return u'\xb0C' + return '\xb0C' elif self.lpd[N] == self.humi: - return u'%RH' + return '%RH' else: raise ValueError(self.lp_exmsg) diff --git a/chamberconnectlibrary/modbus.py b/chamberconnectlibrary/modbus.py index 56da5ca..1d40ddc 100644 --- a/chamberconnectlibrary/modbus.py +++ b/chamberconnectlibrary/modbus.py @@ -255,7 +255,7 @@ def __calc_crc(self, data): crc = 0xFFFF for i in data: crc = crc ^ ord(i) - for _ in xrange(8): + for _ in range(8): tmp = crc & 1 crc = crc >> 1 if tmp: diff --git a/chamberconnectlibrary/p300.py b/chamberconnectlibrary/p300.py index 4817ba4..cf82325 100644 --- a/chamberconnectlibrary/p300.py +++ b/chamberconnectlibrary/p300.py @@ -6,7 +6,7 @@ ''' #pylint: disable=W0703 import re -from especinteract import EspecSerial, EspecTCP +from .especinteract import EspecSerial, EspecTCP def tryfloat(val, default): ''' @@ -857,7 +857,7 @@ def read_ip_set(self): ''' Read the configured IP address of the controller ''' - return dict(zip(['address', 'mask', 'gateway'], self.ctlr.interact('IPSET?').split(','))) + return dict(list(zip(['address', 'mask', 'gateway'], self.ctlr.interact('IPSET?').split(',')))) #--- write methods --- write methods --- write methods --- write methods --- write methods --- def write_date(self, year, month, day, dow): diff --git a/chamberconnectlibrary/scp220.py b/chamberconnectlibrary/scp220.py index 70f69e9..0e149e3 100644 --- a/chamberconnectlibrary/scp220.py +++ b/chamberconnectlibrary/scp220.py @@ -4,7 +4,7 @@ :copyright: (C) Espec North America, INC. :license: MIT, see LICENSE for more details. ''' -from p300 import P300 +from .p300 import P300 class SCP220(P300): ''' diff --git a/chamberconnectlibrary/watlowf4.py b/chamberconnectlibrary/watlowf4.py index a06ec95..639cd41 100644 --- a/chamberconnectlibrary/watlowf4.py +++ b/chamberconnectlibrary/watlowf4.py @@ -390,9 +390,9 @@ def set_loop_en(self, N, value): @exclusive def get_loop_units(self, N): self.__range_check(N, 1, self.loops + self.cascades) - units = ['Temp', u'%RH', u'PSI', u''][self.client.read_holding([608, 618, 628][N-1])[0]] + units = ['Temp', '%RH', 'PSI', ''][self.client.read_holding([608, 618, 628][N-1])[0]] if units == 'Temp': - units = u'\xb0C' if self.client.read_holding(901)[0] else u'\xb0F' + units = '\xb0C' if self.client.read_holding(901)[0] else '\xb0F' return units @exclusive diff --git a/chamberconnectlibrary/watlowf4t.py b/chamberconnectlibrary/watlowf4t.py index 04af1f8..d27f18c 100644 --- a/chamberconnectlibrary/watlowf4t.py +++ b/chamberconnectlibrary/watlowf4t.py @@ -77,7 +77,7 @@ def __init__(self, **kwargs): self.__update_loop_map() self.watlow_val_dict = { 1:'2', 2:'3', 3:'50Hz', 4:'60Hz', 9:'ambientError', - 10:'auto', 11:'b', 13: 'both', 15:u'C', 17:'closeOnAlarm', + 10:'auto', 11:'b', 13: 'both', 15:'C', 17:'closeOnAlarm', 22:'current', 23:'d', 24:'deviationAlarm', 26:'e', 27:'end', 28:'error', 30:'F', 31:'factory', 32:'fail', 34:'fixedTimeBase', 37:'high', 39:'hours', 40:'hundredths', 44:'inputDryContact', 46:'j', 47:'hold', 48:'k', 49:'latching', @@ -132,7 +132,7 @@ def inv_watlow_val_dict(self, key): try: return self.iwatlow_val_dict[key] except Exception: - self.iwatlow_val_dict = {v: k for k, v in self.watlow_val_dict.items()} + self.iwatlow_val_dict = {v: k for k, v in list(self.watlow_val_dict.items())} return self.iwatlow_val_dict[key] def __update_loop_map(self): @@ -851,7 +851,7 @@ def prgm_delete(self, N): try: self.client.write_holding(18888, N) #set active profile self.client.write_holding(18890, self.inv_watlow_val_dict('delete')) #delete profile - except ModbusError, exp: + except ModbusError as exp: exp.message = 'Cannot delete program. (original message: %s)' % exp.message raise # something else went wrong pass the exception on up. @@ -1011,11 +1011,11 @@ def __profile_units(self, num): tlist = ['absoluteTemperature', 'relativeTemperature', 'notsourced'] if self.watlow_val_dict[profpv] in tlist: tval = self.client.read_holding(14080 if self.interface == "RTU" else 6730, 1)[0] - return u'\xb0%s' % self.watlow_val_dict[tval] + return '\xb0%s' % self.watlow_val_dict[tval] else: - return u'%s' % self.watlow_val_dict[profpv] + return '%s' % self.watlow_val_dict[profpv] except LookupError: - return u'ERROR' + return 'ERROR' def __get_prgm_empty(self): ''' From 2dd2a739b22543da97cbdf35a68e9eccff356ffa Mon Sep 17 00:00:00 2001 From: Cory Stegelmeier Date: Fri, 4 May 2018 14:29:35 -0400 Subject: [PATCH 2/4] Fix type mis-match for struct.unpack An error was occuring because `struct.unpack` was being called with an `int` argument but it expects a `bytes` object. This was fixed by converting the `int` arguments to `bytes` objects. This was probably overlooked in the transition to python3. Tested on a Watlow F4T device connecting through TCP: ``` python chamberconnectlibrary-test.py WatlowF4T TCP 192.168.0.222 ``` --- chamberconnectlibrary/modbus.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chamberconnectlibrary/modbus.py b/chamberconnectlibrary/modbus.py index 1d40ddc..83a8e74 100644 --- a/chamberconnectlibrary/modbus.py +++ b/chamberconnectlibrary/modbus.py @@ -189,20 +189,20 @@ def make_packet(self, function, register, args): def decode_packet(self, packet, spacket): '''Decode the modbus request packet.''' - fcode = struct.unpack(">B", packet[1])[0] - addr = struct.unpack(">B", packet[0])[0] + fcode = struct.unpack(">B", bytes([packet[1]]))[0] + addr = struct.unpack(">B", bytes([packet[0]]))[0] if self.address != addr: shex = ":".join("{:02x}".format(ord(c) for c in spacket)) rhex = ":".join("{:02x}".format(ord(c) for c in packet)) raise ModbusError("Address error; Sent=%s, Recieved=%s" % (shex, rhex)) if fcode > 127: - ecode = struct.unpack(">B", packet[2])[0] + ecode = struct.unpack(">B", bytes([packet[2]]))[0] ttp = (ecode, self.errorMessages.get(ecode, 'Unknown error code')) raise ModbusError('Modbus Error: Exception code = %d(%s)' % ttp) if fcode == 3: #Read holding register(s) - cnt = struct.unpack(">B", packet[2])[0]/2 - return struct.unpack(">%dH" % cnt, packet[3:]) + cnt = struct.unpack(">B", bytes([packet[2]]))[0] / 2 + return struct.unpack(">%dH" % cnt, bytes(packet[3:])) elif fcode == 6: pass #nothing is required elif fcode == 16: From 142444a103e5d42b16bc1f28c6e6c63387616aae Mon Sep 17 00:00:00 2001 From: Cory Stegelmeier Date: Fri, 4 May 2018 14:53:28 -0400 Subject: [PATCH 3/4] Update README for python3 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b82d83f..5bf2a9c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Python library for interfacing with Espec North America chambers with P300, SCP-220, Watlow F4T & Watlow F4S/D controllers. ## Requirements -python 2.7.x +python 3.x ## Installation ```pip install chamberconnectlibrary``` @@ -15,7 +15,7 @@ To ensure that the current version is used uninstall and then reinstall the libr ## Testing -To test run chamberconnectlibrary-test.py(on windows using COM port #3, test script is located in Python2.7\Scripts directory) +To test run chamberconnectlibrary-test.py(on windows using COM port #3, test script is located in Python3.x\Scripts directory) P300: ```chamberconnectlibrary-test.py Espec Serial \\.\COM3 19200``` @@ -26,4 +26,4 @@ Watlow F4T: ```chamberconnectlibrary-test.py WatlowF4T RTU \\.\COM3 38400``` Watlow F4: ```chamberconnectlibrary-test.py WatlowF4 RTU \\.\COM3 19200``` ## Documentation -See [controllerinterface.md](controllerinterface.md) \ No newline at end of file +See [controllerinterface.md](controllerinterface.md) From 9411c2f50eef0cac8008f3e8772bdd1a8334015c Mon Sep 17 00:00:00 2001 From: Cory Stegelmeier Date: Fri, 4 May 2018 14:53:28 -0400 Subject: [PATCH 4/4] Update README for python3 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b82d83f..5bf2a9c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Python library for interfacing with Espec North America chambers with P300, SCP-220, Watlow F4T & Watlow F4S/D controllers. ## Requirements -python 2.7.x +python 3.x ## Installation ```pip install chamberconnectlibrary``` @@ -15,7 +15,7 @@ To ensure that the current version is used uninstall and then reinstall the libr ## Testing -To test run chamberconnectlibrary-test.py(on windows using COM port #3, test script is located in Python2.7\Scripts directory) +To test run chamberconnectlibrary-test.py(on windows using COM port #3, test script is located in Python3.x\Scripts directory) P300: ```chamberconnectlibrary-test.py Espec Serial \\.\COM3 19200``` @@ -26,4 +26,4 @@ Watlow F4T: ```chamberconnectlibrary-test.py WatlowF4T RTU \\.\COM3 38400``` Watlow F4: ```chamberconnectlibrary-test.py WatlowF4 RTU \\.\COM3 19200``` ## Documentation -See [controllerinterface.md](controllerinterface.md) \ No newline at end of file +See [controllerinterface.md](controllerinterface.md)