Skip to content

Commit 7720a5a

Browse files
author
Myles Metzler
committed
add fail/retry to read_holding/write_holding
1 parent 1f8d732 commit 7720a5a

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

chamberconnectlibrary/modbus.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class Modbus(object):
3535
11:'Gateway Target Device Failed To Respond'
3636
}
3737
address = 1
38+
retry = False
3839

3940

4041
def read_holding(self, register, count=1):
@@ -49,7 +50,13 @@ def read_holding(self, register, count=1):
4950
list. 16bit integers
5051
'''
5152
packet = self.make_packet(3, register, count)
52-
rval = self.interact(packet)
53+
try:
54+
rval = self.interact(packet)
55+
except ModbusError:
56+
if self.retry:
57+
rval = self.interact(packet)
58+
else:
59+
raise
5360
return self.decode_packet(rval, packet)
5461

5562
def read_holding_float(self, register, count=1):
@@ -95,7 +102,13 @@ def write_holding(self, register, value):
95102
'''
96103
packettype = 16 if isinstance(value, collections.Iterable) else 6
97104
packet = self.make_packet(packettype, register, value)
98-
rval = self.interact(packet)
105+
try:
106+
rval = self.interact(packet)
107+
except ModbusError:
108+
if self.retry:
109+
rval = self.interact(packet)
110+
else:
111+
raise
99112
self.decode_packet(rval, packet)
100113

101114
def write_holding_float(self, register, value):
@@ -179,19 +192,20 @@ class ModbusRTU(Modbus):
179192

180193
def __init__(self, address, port, **kwargs):
181194
self.address = address
195+
self.retry = kwargs.get('retry', True)
182196
#watlow suggests using 0.012 char send time for buads greater than 19200
183197
databits, stopbits = kwargs.get('databits', 8), kwargs.get('stopbits', 1)
184198
baud = kwargs.get('baud', 9600)
185199
# calculated pause time does not work on the Watlow F4T, using watlow recomended delay...
186200
#self.pause = 3.5 * (((databits + stopbits + 2)/ baud) if baud < 19200 else 0.012)
187-
self.pause = 0.012
201+
self.pause = 0.03
188202
self.serial = serial.Serial(
189203
port=port,
190204
baudrate=baud,
191205
bytesize=databits,
192206
parity=kwargs.get('parity', 'N'),
193207
stopbits=stopbits,
194-
timeout=kwargs.get('timeout', 1)
208+
timeout=kwargs.get('timeout', 3)
195209
)
196210

197211
def __del__(self):

0 commit comments

Comments
 (0)