Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public ModbusTcpTransport(TcpStreamAdapter tcpStreamAdapter)
 {
     _tcpStreamAdapter = tcpStreamAdapter;
 }