public override Response <T> Build() { if (responseBytes == null) { throw new InvalidOperationException("ResponseBytes must be initialized"); } if (responseBytes.Length < 4) { throw new MissingDataException("ResponseBytes must have at least 4 bytes"); } RtuResponse <T> response = new RtuResponse <T> { ResponseBytes = (byte[])responseBytes.Clone(), SlaveAddress = responseBytes[0], FunctionCode = responseBytes[1] }; var data = new byte[responseBytes.Length - 4]; Array.Copy(responseBytes, 2, data, 0, data.Length); response.Data = BytesStructure.FromBytes <T>(data); return(response); }
public Response <T> SendRequest <T>(Request.BuilderBase builder) where T : struct { if (State == SessionState.Expired) { throw new InvalidOperationException("This session already expired"); } if (State == SessionState.Identified) { builder.SetSlaveAddress(_slaveAddress); } var request = builder.Build(); var responseBytes = _modbusProtocol.SendForResult(request.RequestBytes, RtuResponse <T> .ComputeResponseBytesLength()); if (responseBytes == null) { return(null); } var response = new RtuResponse <T> .Builder() .SetResponseBytes(responseBytes) .Build(); if (EnableCheck) { CheckResponse(request, responseBytes, response); } return(response); }