internal void ValidateResponse(IModbusMessage request, IModbusMessage response) { // always check the function code and slave address, regardless of transport protocol if (request.FunctionCode != response.FunctionCode) { throw new IOException(String.Format(CultureInfo.InvariantCulture, "Received response with unexpected Function Code. Expected {0}, received {1}.", request.FunctionCode, response.FunctionCode)); } if (request.SlaveAddress != response.SlaveAddress) { throw new IOException(String.Format(CultureInfo.InvariantCulture, "Response slave address does not match request. Expected {0}, received {1}.", response.SlaveAddress, request.SlaveAddress)); } // message specific validation request.Is <IModbusRequest>(req => req.ValidateResponse(response)); OnValidateResponse(request, response); }