Example #1
0
        /*public OperationResult TryGetAnyEvents(IIODriverClient channel, int address, string psw, Emera3ArchiveEvents archEvts,
         *  byte index, out Event response, TimeZoneMap zone)
         * {
         *  response = null;
         *  OperationResult result = OperationResult.Bad;
         *  var send = CreateRequest(address, (byte)archEvts, psw, index, 0, 0);
         *
         *  result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer);
         *  try
         *  {
         *  if (result.IsGood)
         *  {
         *      var seg = new ByteArraySegment(answer, 0, answer.Length);
         *      DateTimeZone dtz = new DateTimeZone(
         *              seg.Array[5] + 2000,
         *              seg.Array[4],
         *              seg.Array[3],
         *              seg.Array[2],
         *              seg.Array[1],
         *              seg.Array[0], zone);
         *      response = new Event(dtz,
         *      (int)((((seg.Array[7] << 0x10) | (seg.Array[6] << 0x8)) | seg.Array[8])),
         *      archEvts);
         *  }
         *  }
         *  catch (Exception e)
         *  {
         *  result = OperationResult.From(e);
         *  }
         *  return result;
         * }*/

        #endregion

        public OperationResult WaitRequest(IIODriverClient channel)
        {
            return(channel.TryWaitRequest(timeOutRequestMSec, cancel));
        }
Example #2
0
        /// <summary>Запрос конфигурации устройства</summary>
        /// <param name="channel">Канал</param>
        /// <param name="address">Адрес устройства</param>
        /// <param name="deviceConfiguration">Конфигурация устройства</param>
        /// <returns></returns>
        public OperationResult TryReadDeviceConfiguration(IIODriverClient channel, int address, string psw, out string deviceConfiguration, bool full = false)
        {
            OperationResult result = OperationResult.Bad;

            deviceConfiguration = string.Empty;
            result = channel.TryWaitRequest(timeOutRequestMSec, cancel);
            if (!result.IsGood)
            {
                return(result);
            }

            byte[] send = CreateRequest(address, Codes.CODE_READ_CONFIG, psw);
            result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer);
            if (!result.IsGood)
            {
                return(result);
            }
            try
            {
                StringBuilder sb = new StringBuilder();
                //byte 4 - type
                switch (answer[3])
                {
                case 1: sb.Append("CE102 "); break;

                case 2: sb.Append("CE301M "); break;

                default: sb.Append("Неизвестный тип "); break;
                }
                //byte 12 - корпус
                switch (answer[11])
                {
                case 1: sb.Append("R5 "); break;

                case 2: sb.Append("R8 "); break;

                case 3: sb.Append("S6 "); break;

                case 4: sb.Append("S7 "); break;

                case 5: sb.Append("S31 "); break;

                case 6: sb.Append("R33 "); break;

                default: sb.Append("Неизвестная модель "); break;
                }
                //byte 3 - version
                sb.Append("(v.").Append(answer[2]).Append(") ");

                if (full)
                {
                    if ((answer[13] & 0x40) == 0x40)
                    {
                        sb.Append("A");
                    }
                    if ((answer[13] & 0x20) == 0x20)
                    {
                        sb.Append("O");
                    }
                    if ((answer[13] & 0x10) == 0x10)
                    {
                        sb.Append("K");
                    }
                    if ((answer[13] & 0x08) == 0x08)
                    {
                        sb.Append("P");
                    }
                    if ((answer[13] & 0x04) == 0x04)
                    {
                        sb.Append("Q");
                    }
                    if ((answer[13] & 0x02) == 0x02)
                    {
                        sb.Append("R");
                    }
                    if ((answer[13] & 0x01) == 0x01)
                    {
                        sb.Append("S");
                    }
                    if ((answer[12] & 0x80) == 0x80)
                    {
                        sb.Append("V");
                    }
                    if ((answer[12] & 0x40) == 0x40)
                    {
                        sb.Append("Z");
                    }
                    if ((answer[12] & 0x20) == 0x20)
                    {
                        sb.Append("J");
                    }
                    if ((answer[12] & 0x10) == 0x10)
                    {
                        sb.Append("G");
                    }
                    if ((answer[12] & 0x08) == 0x08)
                    {
                        sb.Append("I");
                    }
                    if ((answer[13] & 0x80) == 0x80)
                    {
                        sb.Append(" RS232");
                    }

                    sb.Append(" Класс точн.:");
                    switch (answer[5])
                    {
                    case 1: sb.Append("0.5, "); break;

                    case 2: sb.Append("1.0, "); break;

                    case 3: sb.Append("2.0, "); break;

                    default: sb.Append("Неизвестно, "); break;
                    }
                    sb.Append("Uн:");
                    switch (answer[6])
                    {
                    case 1: sb.Append("57.7 В, "); break;

                    case 2: sb.Append("100 В, "); break;

                    case 3: sb.Append("127 В, "); break;

                    case 4: sb.Append("230 В, "); break;

                    case 5: sb.Append("220 В, "); break;

                    default: sb.Append("Неизвестно, "); break;
                    }
                    sb.Append("I:");
                    switch (answer[7])
                    {
                    case 1: sb.Append("1-1.5 А"); break;

                    case 2: sb.Append("5-7.5 А"); break;

                    case 3: sb.Append("5-50 А"); break;

                    case 4: sb.Append("5-60 А"); break;

                    case 5: sb.Append("10-100 А"); break;

                    case 6: sb.Append("1-7.5 А"); break;

                    case 7: sb.Append("5-10 А"); break;

                    default: sb.Append("Неизвестно"); break;
                    }
                }
                deviceConfiguration = sb.ToString();
            }
            catch (Exception e)
            {
                result = OperationResult.From(e);
            }
            return(result);
        }