Пример #1
0
 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);
 }
Пример #2
0
 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);
 }