@@ -35,6 +35,7 @@ class Modbus(object):
35
35
11 :'Gateway Target Device Failed To Respond'
36
36
}
37
37
address = 1
38
+ retry = False
38
39
39
40
40
41
def read_holding (self , register , count = 1 ):
@@ -49,7 +50,13 @@ def read_holding(self, register, count=1):
49
50
list. 16bit integers
50
51
'''
51
52
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
53
60
return self .decode_packet (rval , packet )
54
61
55
62
def read_holding_float (self , register , count = 1 ):
@@ -95,7 +102,13 @@ def write_holding(self, register, value):
95
102
'''
96
103
packettype = 16 if isinstance (value , collections .Iterable ) else 6
97
104
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
99
112
self .decode_packet (rval , packet )
100
113
101
114
def write_holding_float (self , register , value ):
@@ -179,19 +192,20 @@ class ModbusRTU(Modbus):
179
192
180
193
def __init__ (self , address , port , ** kwargs ):
181
194
self .address = address
195
+ self .retry = kwargs .get ('retry' , True )
182
196
#watlow suggests using 0.012 char send time for buads greater than 19200
183
197
databits , stopbits = kwargs .get ('databits' , 8 ), kwargs .get ('stopbits' , 1 )
184
198
baud = kwargs .get ('baud' , 9600 )
185
199
# calculated pause time does not work on the Watlow F4T, using watlow recomended delay...
186
200
#self.pause = 3.5 * (((databits + stopbits + 2)/ baud) if baud < 19200 else 0.012)
187
- self .pause = 0.012
201
+ self .pause = 0.03
188
202
self .serial = serial .Serial (
189
203
port = port ,
190
204
baudrate = baud ,
191
205
bytesize = databits ,
192
206
parity = kwargs .get ('parity' , 'N' ),
193
207
stopbits = stopbits ,
194
- timeout = kwargs .get ('timeout' , 1 )
208
+ timeout = kwargs .get ('timeout' , 3 )
195
209
)
196
210
197
211
def __del__ (self ):
0 commit comments