@@ -34,11 +34,13 @@ def get_response_pdu_size(self) -> int:
3434
3535 async def update_datastore (self , context : ModbusSlaveContext ) -> ModbusPDU :
3636 """Run a read holding request against a datastore."""
37- values = cast ( list [ int ], await context .async_getValues (
37+ values = await context .async_getValues (
3838 self .function_code , self .address , self .count
39- ))
39+ )
40+ if isinstance (values , int ):
41+ return ExceptionResponse (self .function_code , values )
4042 response_class = (ReadHoldingRegistersResponse if self .function_code == 3 else ReadInputRegistersResponse )
41- return response_class (registers = values , dev_id = self .dev_id , transaction_id = self .transaction_id )
43+ return response_class (registers = cast ( list [ int ], values ) , dev_id = self .dev_id , transaction_id = self .transaction_id )
4244
4345
4446class ReadHoldingRegistersResponse (ModbusPDU ):
@@ -137,13 +139,17 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
137139 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
138140 if not 1 <= self .write_count <= 0x079 :
139141 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
140- await context .async_setValues (
142+ rc = await context .async_setValues (
141143 self .function_code , self .write_address , self .write_registers
142144 )
143- registers = cast (list [int ], await context .async_getValues (
145+ if rc :
146+ return ExceptionResponse (self .function_code , rc )
147+ registers = await context .async_getValues (
144148 self .function_code , self .read_address , self .read_count
145- ))
146- return ReadWriteMultipleRegistersResponse (registers = registers , dev_id = self .dev_id , transaction_id = self .transaction_id )
149+ )
150+ if isinstance (registers , int ):
151+ return ExceptionResponse (self .function_code , registers )
152+ return ReadWriteMultipleRegistersResponse (registers = cast (list [int ], registers ), dev_id = self .dev_id , transaction_id = self .transaction_id )
147153
148154 def get_response_pdu_size (self ) -> int :
149155 """Get response pdu size.
@@ -182,11 +188,15 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
182188 """Run a write single register request against a datastore."""
183189 if not 0 <= self .registers [0 ] <= 0xFFFF :
184190 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
185- await context .async_setValues (
191+ rc = await context .async_setValues (
186192 self .function_code , self .address , self .registers
187193 )
188- values = cast (list [int ], await context .async_getValues (self .function_code , self .address , 1 ))
189- return WriteSingleRegisterResponse (address = self .address , registers = values )
194+ if rc :
195+ return ExceptionResponse (self .function_code , rc )
196+ values = await context .async_getValues (self .function_code , self .address , 1 )
197+ if isinstance (values , int ):
198+ return ExceptionResponse (self .function_code , values )
199+ return WriteSingleRegisterResponse (address = self .address , registers = cast (list [int ], values ))
190200
191201 def get_response_pdu_size (self ) -> int :
192202 """Get response pdu size.
@@ -221,9 +231,11 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
221231 """Run a write single register request against a datastore."""
222232 if not 1 <= self .count <= 0x07B :
223233 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
224- await context .async_setValues (
234+ rc = await context .async_setValues (
225235 self .function_code , self .address , self .registers
226236 )
237+ if rc :
238+ return ExceptionResponse (self .function_code , rc )
227239 return WriteMultipleRegistersResponse (address = self .address , count = self .count , dev_id = self .dev_id , transaction_id = self .transaction_id )
228240
229241 def get_response_pdu_size (self ) -> int :
@@ -275,11 +287,15 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
275287 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
276288 if not 0x0000 <= self .or_mask <= 0xFFFF :
277289 return ExceptionResponse (self .function_code , ExceptionResponse .ILLEGAL_VALUE )
278- values = (await context .async_getValues (self .function_code , self .address , 1 ))[0 ]
279- values = (values & self .and_mask ) | (self .or_mask & ~ self .and_mask )
280- await context .async_setValues (
281- self .function_code , self .address , [values ]
290+ values = await context .async_getValues (self .function_code , self .address , 1 )
291+ if isinstance (values , int ):
292+ return ExceptionResponse (self .function_code , values )
293+ values = (values [0 ] & self .and_mask ) | (self .or_mask & ~ self .and_mask )
294+ rc = await context .async_setValues (
295+ self .function_code , self .address , cast (list [int ], [values ])
282296 )
297+ if rc :
298+ return ExceptionResponse (self .function_code , rc )
283299 return MaskWriteRegisterResponse (address = self .address , and_mask = self .and_mask , or_mask = self .or_mask , dev_id = self .dev_id , transaction_id = self .transaction_id )
284300
285301
0 commit comments