|
12 | 12 | # pylint: disable=missing-type-doc |
13 | 13 | import struct |
14 | 14 |
|
| 15 | +from pymodbus.pdu import ExceptionResponse, ModbusRequest, ModbusResponse |
15 | 16 | from pymodbus.pdu import ModbusExceptions as merror |
16 | | -from pymodbus.pdu import ModbusRequest, ModbusResponse |
17 | 17 |
|
18 | 18 |
|
19 | 19 | class WriteSingleRegisterRequest(ModbusRequest): |
@@ -68,7 +68,9 @@ def execute(self, context): |
68 | 68 | if not context.validate(self.function_code, self.address, 1): |
69 | 69 | return self.doException(merror.IllegalAddress) |
70 | 70 |
|
71 | | - context.setValues(self.function_code, self.address, [self.value]) |
| 71 | + result = context.setValues(self.function_code, self.address, [self.value]) |
| 72 | + if isinstance(result, ExceptionResponse): |
| 73 | + return result |
72 | 74 | values = context.getValues(self.function_code, self.address, 1) |
73 | 75 | return WriteSingleRegisterResponse(self.address, values[0]) |
74 | 76 |
|
@@ -211,7 +213,9 @@ def execute(self, context): |
211 | 213 | if not context.validate(self.function_code, self.address, self.count): |
212 | 214 | return self.doException(merror.IllegalAddress) |
213 | 215 |
|
214 | | - context.setValues(self.function_code, self.address, self.values) |
| 216 | + result = context.setValues(self.function_code, self.address, self.values) |
| 217 | + if isinstance(result, ExceptionResponse): |
| 218 | + return result |
215 | 219 | return WriteMultipleRegistersResponse(self.address, self.count) |
216 | 220 |
|
217 | 221 | def get_response_pdu_size(self): |
@@ -330,8 +334,12 @@ def execute(self, context): |
330 | 334 | if not context.validate(self.function_code, self.address, 1): |
331 | 335 | return self.doException(merror.IllegalAddress) |
332 | 336 | values = context.getValues(self.function_code, self.address, 1)[0] |
| 337 | + if isinstance(values, ExceptionResponse): |
| 338 | + return values |
333 | 339 | values = (values & self.and_mask) | (self.or_mask & ~self.and_mask) |
334 | | - context.setValues(self.function_code, self.address, [values]) |
| 340 | + result = context.setValues(self.function_code, self.address, [values]) |
| 341 | + if isinstance(result, ExceptionResponse): |
| 342 | + return result |
335 | 343 | return MaskWriteRegisterResponse(self.address, self.and_mask, self.or_mask) |
336 | 344 |
|
337 | 345 |
|
|
0 commit comments