string PresetSingleRegister(int _abonent, int _pos, ushort _data) { byte[] query = new byte[] { Convert.ToByte(_abonent), 6, 0, Convert.ToByte(_pos), Convert.ToByte((_data >> 8) & 0xff), Convert.ToByte(_data & 0xff), 0, 0 }; Crc16.Add(query); if (!comPort.Write(query)) { return("Не смогли записать"); } // 0 - абонент // 1 - ошибки // 2 - код ошиибки/регистр // 3 - регистр // 4 - 255 // 5 - 255 // 6 - crc // 7 - crc byte[] packet = comPort.Read(8); if (packet.Length != 8) { return("Не смогли прочитать"); } if (packet[0] != _abonent) { return("Не тот абонент"); } if ((packet[1] & 0x80) != 0) { return("Ошибка в ответе: " + packet[2].ToString()); } if (packet[2] != 0) { return("Не тот регистр"); } if (packet[3] != Convert.ToByte(_pos)) { return("Не тот регистр"); } if (!Crc16.Check(packet)) { return("Не верная контрольная сумма"); } return(null); }
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); }