/*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)); }
/// <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); }