/// <summary>Создать запрос на счетчик Энергомера</summary> /// <param name="addresssDevice">Адрес устройства</param> /// <param name="codeCommand">Код команды</param> /// <param name="data">Необязательный массив параметров для комманды</param> byte[] CreateRequest(int addresssDevice, ushort codeCommand, string psw, params byte[] data) { var buff = new List <byte>(); buff.Add(Codes.BYTE_END); buff.Add(Codes.BYTE_OPT); buff.AddRange(BitConverter.GetBytes((ushort)addresssDevice)); buff.Add(0); buff.Add(0); //пакет for (int i = 0; i < 4; i++) { byte b = byte.Parse(psw.Substring(i, 1)); buff.Add(b); } /*buff.Add(0); * buff.Add(0); * buff.Add(0); * buff.Add(0);*/ byte serv = (byte)(Codes.BYTE_SERV | data.Length); buff.Add(serv); buff.AddRange(BitwiseUtils.Reverse(BitConverter.GetBytes(codeCommand))); for (int i = 0; i < data.Length; i++) { buff.Add(data[i]); } buff.Add(CRC.getCRC(buff.ToArray(), 0)); var list = encodePacket(buff); list.Add(Codes.BYTE_END); return(list.ToArray()); }
public OperationResult TryReadSerialNumber(IIODriverClient channel, int address, string psw, out string response) { OperationResult result = OperationResult.Bad; response = null; var send = CreateRequest(address, Codes.CODE_READ_SERIAL_NUMBER, psw, 0x00); result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer); if (!result.IsGood) { return(result); } try { response = Encoding.ASCII.GetString(BitwiseUtils.Reverse(answer)); } catch (Exception e) { result = OperationResult.From(e); } return(result); }