Example #1
0
 protected override IList <byte> Read(int length)
 {
     return(_tcpHelper.Read(length));
 }
Example #2
0
        private List <byte> ReadBlock(int address, int length, byte code)
        {
            _tcpHelper.Write(
                new byte[]
            {
                0x50, 0x00,                                           //Header
                _networkNumber,                                       //Network number
                _pcNumber,                                            //PC number
                0xFF, 0x03,                                           //Dest module I/O number
                0x00,                                                 //Dest module station number
                0x0C, 0x00,                                           //Request length
                0x0A, 0x00,                                           //CPU timer
                0x01, 0x04,                                           //Command
                0x00, 0x00,                                           //Subcommand
                (byte)(address & 0xFF), (byte)((address & 0xFF00) >> 8),
                (byte)((address & 0xFF0000) >> 16),                   //Address
                code,
                (byte)(length & 0xFF), (byte)((length & 0xFF00) >> 8) // number of device points
            });
            var       bytesToReceive         = length * 2;
            const int headerLength           = 11;
            var       messageLengthToReceive = bytesToReceive + headerLength;
            var       answer = _tcpHelper.Read(messageLengthToReceive);

            if (answer == null)
            {
                throw new Exception("Message not received");
            }
            if (answer.Count < 11)
            {
                throw new Exception("Recieved message size error");
            }

            var responseCode = (int)answer[10];

            responseCode = responseCode << 8;
            responseCode = responseCode | answer[9];
            if (responseCode != 0)
            {
                throw new Exception("Response code 0x" + responseCode.ToString("X"));
            }

            if (answer.Count != messageLengthToReceive)
            {
                throw new Exception("Recieved message size error 1");
            }

            var someLength = (int)answer[8];

            someLength = someLength << 8;
            someLength = someLength | answer[7];
            if (someLength != messageLengthToReceive - 9)
            {
                throw new Exception("Recieved message size error 2");
            }

            var data = new List <byte>(bytesToReceive);

            for (var i = 0; i < bytesToReceive; ++i)
            {
                data.Add(answer[headerLength + i]);
            }
            return(data);
        }