예제 #1
0
        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);
        }