protected override IList <byte> Read(int length) { return(_tcpHelper.Read(length)); }
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); }