예제 #1
0
        /// <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());
        }
예제 #2
0
        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);
        }