public static byte[] ReadRequestResponse(TcpStreamAdapter tcpTransportAdapter) { // read header byte[] mbapHeader = new byte[6]; int numBytesRead = 0; while (numBytesRead != 6) { numBytesRead += tcpTransportAdapter.Read(mbapHeader, numBytesRead, 6 - numBytesRead); if (numBytesRead == 0) { throw new SocketException(Modbus.ConnectionAborted); } } _log.DebugFormat("MBAP header: {0}", StringUtility.Join(", ", mbapHeader)); ushort frameLength = (ushort)(IPAddress.HostToNetworkOrder(BitConverter.ToInt16(mbapHeader, 4))); _log.DebugFormat("{0} bytes in PDU.", frameLength); // read message byte[] messageFrame = new byte[frameLength]; numBytesRead = 0; while (numBytesRead != frameLength) { numBytesRead += tcpTransportAdapter.Read(messageFrame, numBytesRead, frameLength - numBytesRead); if (numBytesRead == 0) { throw new SocketException(Modbus.ConnectionAborted); } } _log.DebugFormat("PDU: {0}", frameLength); byte[] frame = CollectionUtility.Concat(mbapHeader, messageFrame); _log.InfoFormat("RX: {0}", StringUtility.Join(", ", frame)); return(frame); }
public ModbusTcpTransport(TcpStreamAdapter tcpStreamAdapter) { _tcpStreamAdapter = tcpStreamAdapter; }