string ReadInputRegister(byte _cmd, int _abonent, int _pos, ref ushort _result) { byte[] query = new byte[] { Convert.ToByte(_abonent), _cmd, 0, Convert.ToByte(_pos), 0, 1, 0, 0 }; Crc16.Add(query); if (!comPort.Write(query)) { return("Не смогли записать"); } // 0 - абонент // 1 - ошибки // 2 - длина / код ошибки // 3 - данные // 4 - данные // 5 - crc // 6 - crc byte[] packet = comPort.Read(7); if (packet.Length != 7) { return("Не смогли прочитать"); } if (packet[0] != _abonent) { return("Не тот абонент"); } if ((packet[1] & 0x80) != 0) { return("Ошибка в ответе: " + packet[2].ToString()); } if (packet[2] != 2) { return("Не верная длина в ответе"); } if (!Crc16.Check(packet)) { return("Не верная контрольная сумма"); } _result = BitConverter.ToUInt16(new byte[2] { packet[4], packet[3] }, 0); return(null); }
byte[] ReadTail() { List <byte> L = new List <byte>(); while (true) { byte[] packet = comPort.Read(1); if (packet.Length == 0) { break; } L.Add(packet[0]); if (packet[0] == 0x0A) { break; } } return(L.ToArray()); }