protected void ShowDiagButton_Click(object sender, EventArgs e) { if (Session["SelectedData"] == null) { ViewState["ErrorMsg"] = Language.Selected["Alert_SelData"]; //Response.Write("<script>$(function(){$('#ErrorMsg p').innerText='" + Language.Selected["Alert_SelData"] + "';$('#ErrorMsg').show();})</script>"); //Response.Write("<script>alert(" + Language.Selected["Alert_SelData"] + "')</script>"); return; } if (Session["SelectedAbs"] == null) { ViewState["ErrorMsg"] = Language.Selected["Alert_SelAbs"]; //Response.Write("<script>alert(" + Language.Selected["Alert_SelAbs"] + "')</script>"); return; } if (Session["SelectedRel"] == null) { ViewState["ErrorMsg"] = Language.Selected["Alert_SelRel"]; //Response.Write("<script>alert(" + Language.Selected["Alert_SelRel"] + "')</script>"); return; } ContentData data = (ContentData)Session["SelectedData"]; ContentData abs = (ContentData)Session["SelectedAbs"]; ContentData rel = (ContentData)Session["SelectedRel"]; if (data.ReadDate <= abs.ReadDate) { ViewState["ErrorMsg"] = Language.Selected["Alert_TimeErr1"]; //Response.Write("<script>alert('" + Language.Selected["Alert_TimeErr1"] + "')</script>"); return; } if (data.ReadDate <= rel.ReadDate) { ViewState["ErrorMsg"] = Language.Selected["Alert_TimeErr2"]; //Response.Write("<script>alert('" + Language.Selected["Alert_TimeErr2"] + "')</script>"); return; } ViewState["ErrorMsg"] = ""; switch (ShowDiagDrop.SelectedValue) { case "大卫三角形法": Session["DiagType"] = "DavidDiag"; break; case "立体图示法": Session["DiagType"] = "ThreeShow"; break; } AnlyInformation anlyInfo = null; List <AlarmMsgAll> alarmList = null; MongoHelper <Config> _cfg = new MongoHelper <Config>(); Expression <Func <Config, bool> > ex = p => p.DevID == devId && p.Alarm != null; Expression <Func <Config, bool> > ex1 = p => p.DevID == devId && p.AnalyPara.EnviSet != null; Config cfg = _cfg.FindOneBy(ex); if (cfg == null || cfg.Alarm == null || cfg.AnalyPara.EnviSet == null) { //。。。。。。。。。。。。。从下位机取。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } AlarmAll hold = cfg.Alarm; EnvironmentSetting setting = cfg.AnalyPara.EnviSet; if (hold == null || setting == null) { //从下位机取。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } //告警信息 alarmList = Diagnose.GasAlarm(data, abs, rel, setting, hold); ////故障分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 anlyInfo = Diagnose.GasDiagnose(devId, data, abs, rel, setting, hold.DiagSet); DiagnoseResult dr = Diagnose.WrapperAnlyResult(devId, 2, anlyInfo); TB_Result.Text = ""; //TB_Result.Text += "\r\n------告警信息(" + alarmList.Length.ToString() + ")条------\r\n";//ljb:alarmList为空的时候不知道有没有Length这个属性(这个地方一直没法运行下去,估计这就是问题) TB_Result.Text += "\r\n------告警信息------\r\n";//ljb //有告警信息 if (alarmList != null && alarmList.Count() != 0) { TB_Result.Text += "\r\n------告警信息(" + alarmList.Count().ToString() + ")条------\r\n";//ljb for (int i = 0; i < alarmList.Count(); i++) { string msg = ""; msg += Language.Selected["Alarm_Device"] + devId + "\r\n"; msg += Language.Selected["Alarm_Gas"] + alarmList[i].GasName + "\r\n"; string msgType = ""; switch (alarmList[i].Type) { case 0: msgType = Language.Selected["Alarm_Type_Content"]; break; case 1: msgType = Language.Selected["Alarm_Type_Abs"]; break; case 2: msgType = Language.Selected["Alarm_Type_Rel"]; break; default: msgType = Language.Selected["Alarm_Type_Content"]; break; } msg += Language.Selected["Alarm_Type"] + msgType + "\r\n"; msg += Language.Selected["Alarm_Value"] + alarmList[i].AlarmValue.ToString("F1") + ", " + Language.Selected["Alarm_RealValue"] + alarmList[i].RealValue.ToString("F3") + "\r\n"; msg += Language.Selected["Alarm_Level"] + WarringLevel[alarmList[i].Level] + "\r\n"; TB_Result.Text += msg + "\r\n"; } } else { TB_Result.Text += "\r\n------无信息------\r\n"; } //有故障信息 TB_Result.Text += "\r\n------故障诊断信息------\r\n"; if (anlyInfo != null) { //最终 诊断结果 TB_Result.Text += "\r\n" + Language.Selected["Diag_Result"] + "\r\n" + dr.Result + "\r\n"; //其它诊断中间数据,三比值、大卫三角形、立体图示 TB_Result.Text += "\r\n" + Language.Selected["ThreeRatio_Diag_Result"] + "\r\n" + dr.ThreeRatioCode + "(" + dr.ThreeRatioResult + ")\r\n"; TB_Result.Text += "\r\n" + Language.Selected["David_Result"] + "\r\n" + dr.DevidCode + "(" + dr.DevidResult + ")\r\n"; TB_Result.Text += "\r\n" + Language.Selected["Cube_Diag_Result"] + "\r\n" + dr.CubeCode + "\r\n"; // LB_Ratio.Text = dr.ThreeRatioCode; //大卫三角形数据 //"C2H2:10%, C2H4:20%, CH4:30%" string sr = dr.DevidCode; string[] str = sr.Split(','); for (int i = 0; i < str.Length; i++) { string[] temp = str[i].Split(':'); if (temp[0] == "C2H2" || temp[0] == "C2H4" || temp[0] == "CH4") { Session[temp[0]] = temp[1]; } } if (Session["C2H2"] != null & Session["C2H4"] != null && Session["CH4"] != null) { get_temp_Map(); Timer1.Enabled = true; } else { Response.Write("<script>alert(" + "session出错,请重新诊断!" + "')</script>"); } //dr = dr.Replace('%', ' '); //dr = dr.Replace(',', '&'); //dr = dr.Replace(":", "="); //dr = dr.Replace(" ", ""); //string str = "javascript:showPopWin('" + Language.Selected["Title_Sample"] + "', 'DevidShow.aspx?"; //str += dr; //str += "', 620, 330, null, true, true);return false;"; //BT_Devid.OnClientClick = str; //BT_Devid.Enabled = true; //string str1 = "javascript:showPopWin('" + Language.Selected["CubeShow"] + "', 'ThreeShow.aspx?"; //str1 += dr; //str1 += "', 900, 440, null, true, true);return false;"; //BT_Cube.OnClientClick = str1; //BT_Cube.Enabled = true; ////立体图 命令参数 ////"C2H2/C2H4=1, C2H4/C2H6=1, CH4/H2=1" //#if false // //dr = anlyInfo._cubecode; // //string cmd = anlyInfo.Value.ratio.CH4_H2.ToString() + ","; // //cmd += anlyInfo.Value.ratio.C2H2_C2H4.ToString() + ","; // //cmd += anlyInfo.Value.ratio.C2H4_C2H6.ToString(); // //ViewState["CMD"] = cmd; //#else // ViewState["CMD"] = null;//这是谁改的?它和else里面的一样,那ViewState["CMD"]永远为null了,上面这段为什么注释掉?--ljb //#endif } else { TB_Result.Text += "\r\n------无信息------\r\n"; //ljb //BT_Devid.Enabled = true; //BT_Devid.Enabled = false; //BT_Cube.Enabled = false; ViewState["CMD"] = null; } }
public static void Diagnose(decimal H2, decimal CH4, decimal C2H2, decimal C2H4, decimal C2H6, ref AnlyInformation info) { //if (Math.Abs(H2) < MIN || Math.Abs(CH4) < MIN || Math.Abs(C2H2) < MIN || Math.Abs(C2H4) < MIN || Math.Abs(C2H6) < MIN) //{ // return; //} #region 高亮 /* * info = new AnlyInfo(); * info.devidInfo = new DevidTriAnlyInfo(); * info.devidInfo.Desc = ""; * info.ratio = new Ratio(); * info.threevar = new ThreeValue(); * info.threevar.Desc = ""; * info.chDesc = ""; * info.enDesc = ""; * info.Desc = ""; * * * * * //----------立体图示法(每一个比值的范围 0-10,10代表无穷大,参考GB/T 7252-2001 附录E) * info.ratio.C2H2_C2H4 = info.ratio.C2H4_C2H6 = info.ratio.CH4_H2 = -1.0m; //-1.0代表无法计算判断 * * bool canCalc = true; * if ((Math.Abs(C2H4) < MIN && Math.Abs(C2H2) < MIN) || (Math.Abs(C2H6) < MIN && Math.Abs(C2H4) < MIN) || (Math.Abs(H2) < MIN && Math.Abs(CH4) < MIN)) // 0.0/0.0 无意义 ||{ || canCalc = false; ||} || ||if (canCalc) ||{ || if (Math.Abs(C2H4) >= MIN) //if(C2H4!=0) || { || info.ratio.C2H2_C2H4 = C2H2 / C2H4; || } || else || { || info.ratio.C2H2_C2H4 = 10.0m; || } || if (info.ratio.C2H2_C2H4 > 10.0m) || { || info.ratio.C2H2_C2H4 = 10.0m; || } || || if (Math.Abs(C2H6) >= MIN) //if(C2H6!=0) || { || info.ratio.C2H4_C2H6 = C2H4 / C2H6; || } || else || { || info.ratio.C2H4_C2H6 = 10.0m; || } || if (info.ratio.C2H4_C2H6 > 10.0m) || { || info.ratio.C2H4_C2H6 = 10.0m; || } || || if (Math.Abs(H2) >= MIN) //if(C2H6!=0) || { || info.ratio.CH4_H2 = CH4 / H2; || } || else || { || info.ratio.CH4_H2 = 10.0m; || } || if (info.ratio.CH4_H2 > 10.0m) || { || info.ratio.CH4_H2 = 10.0m; || } ||} || || ||//----------三比值法 || //根据各气体浓度值编码 ||int[] a = new int[3]; ||a[0] = a[1] = a[2] = -1; //-1表示相应比值无效或无意义 || ||canCalc = true; ||if ((Math.Abs(C2H2) < MIN && Math.Abs(C2H4) < MIN) || (Math.Abs(CH4) < MIN && Math.Abs(H2) < MIN) || (Math.Abs(C2H4) < MIN && Math.Abs(C2H6) < MIN)) // 0.0/0.0 无意义 ||{ || canCalc = false; ||} || ||if (canCalc) ||{ || if (Math.Abs(C2H4) < MIN) //c2h4==0 || { || a[0] = 2; || } || else || { || if (C2H2 / C2H4 < 0.1m) || { || a[0] = 0; || } || if (C2H2 / C2H4 >= 0.1m && C2H2 / C2H4 < 3.0m) || { || a[0] = 1; || } || if (C2H2 / C2H4 >= 3.0m) || { || a[0] = 2; || } || } || || if (Math.Abs(H2) < MIN) //H2==0 || { || a[1] = 2; || } || else || { || if (CH4 / H2 < 0.1m) || { || a[1] = 1; || } || if (CH4 / H2 < 1.0m && CH4 / H2 >= 0.1m) || { || a[1] = 0; || } || if (CH4 / H2 >= 1.0m) || { || a[1] = 2; || } || } || || if (Math.Abs(C2H6) < MIN) //C2H6==0 || { || a[2] = 2; || } || else || { || if (C2H4 / C2H6 < 1.0m) || { || a[2] = 0; || } || if (C2H4 / C2H6 < 3.0m && C2H4 / C2H6 >= 1.0m) || { || a[2] = 1; || } || if (C2H4 / C2H6 >= 3.0m) || { || a[2] = 2; || } || } ||} ||info.threevar.Var1 = a[0]; ||info.threevar.Var2 = a[1]; ||info.threevar.Var3 = a[2]; || || ||//----------图形三比值法 ||decimal Percent_C2H2 = -1.0m, Percent_C2H4 = -1.0m, Percent_CH4 = -1.0m; //-1表示无法计算判断 ||if (Math.Abs((C2H2 + C2H4 + CH4)) > MIN || && Math.Abs(C2H2) > MIN || && Math.Abs(C2H4) > MIN || && Math.Abs(CH4) > MIN) ||{ || Percent_C2H2 = C2H2 / (C2H2 + C2H4 + CH4); || Percent_C2H4 = C2H4 / (C2H2 + C2H4 + CH4); || Percent_CH4 = CH4 / (C2H2 + C2H4 + CH4); ||} ||info.devidInfo.percent_C2H2 = Percent_C2H2; ||info.devidInfo.percent_C2H4 = Percent_C2H4; ||info.devidInfo.percent_CH4 = Percent_CH4; || || || || || || ||string desc = ""; ||//----------三比值法 判断故障类型 ||if (a[0] >= 0 && a[1] >= 0 && a[2] >= 0) //比值有效时诊断 ||{ || if (0 == a[0] && 0 == a[1] && 1 == a[2]) || { || desc = ANLYINFO_T1; || } || else if ((0 == a[0] || (-1) == a[0]) && 2 == a[1] && 0 == a[2]) || { || desc = ANLYINFO_T2; || } || else if (0 == a[0] && 2 == a[1] && 1 == a[2]) || { || desc = ANLYINFO_T3; || } || else if (0 == a[0] && 3 > a[1] && 0 <= a[1] && 2 == a[2]) || { || desc = ANLYINFO_T4; || } || else if ((0 == a[0] || (-1) == a[0]) && 1 == a[1] && 0 == a[2]) || { || desc = ANLYINFO_PD; || } || else if (1 == a[0] && 2 > a[1] && 0 <= a[1] && 3 > a[2] && 0 <= a[2]) || { || desc = ANLYINFO_LD; || } || else if (1 == a[0] && 2 == a[1] && 3 > a[2] && 0 <= a[2]) || { || desc = ANLYINFO_DT; || } || else if (2 == a[0] && 2 > a[1] && 0 <= a[1] && 3 > a[2] && 0 <= a[2]) || { || desc = ANLYINFO_AD; || } || else if (2 == a[0] && 2 == a[1] && 0 <= a[2] && 3 > a[2]) || { || desc = ANLYINFO_ADT; || } ||} ||if (desc != "") ||{ || info.threevar.Desc = desc; ||} ||else ||{ || info.threevar.Desc = ANLYINFO_UNKNOWN; //未知故障 ||} || || ||//----------图形法 判断故障类型 ||desc = ""; ||if (Percent_C2H2 >= 0.0m && Percent_C2H4 >= 0.0m && Percent_CH4 >= 0.0m) //计算结果有效时诊断 ||{ || if (Percent_CH4 > 0.98m) || { || desc = ANLYINFO_PD; || } || if (Percent_C2H2 > 0.13m && Percent_C2H4 < 0.23m) || { || desc = ANLYINFO_LD; || } || if (Percent_C2H4 > 0.23m && Percent_C2H2 > 0.13m && Percent_C2H2 > 0.29m && Percent_C2H4 > 0.23m && Percent_C2H4 > 0.38m) || { || desc = ANLYINFO_HD; || } || if (Percent_C2H2 < 0.04m && Percent_C2H4 < 0.10m) || { || desc = ANLYINFO_T2A; //低温过热,小于300° || } || if (Percent_C2H2 < 0.04m && Percent_C2H4 > 0.10m && Percent_C2H4 < 0.50m) || { || desc = ANLYINFO_T3; //热故障,300°~ 700° || } || if (Percent_C2H2 < 0.15m && C2H4 > 0.50m) || { || desc = ANLYINFO_T4; //热故障,> 700℃ || } ||} ||if (desc != "") ||{ || info.devidInfo.Desc = desc; ||} ||else ||{ || info.devidInfo.Desc = ANLYINFO_UNKNOWN; //未知故障 ||} || || || ||//---最终故障结论 ||if (info.threevar.Desc != ANLYINFO_UNKNOWN) ||{ || info.Desc = info.threevar.Desc; //优先采用三比值判断结果 ||} ||else if (info.devidInfo.Desc != ANLYINFO_UNKNOWN) ||{ || info.Desc = info.devidInfo.Desc; //三比值不能判断时,用图形法判断结果 ||} || ||if (info.Desc == "") ||{ || info.Desc = ANLYINFO_UNKNOWN; //无故障结果(无法判断) ||} || ||int len = info.Desc.Length; ||int index = info.Desc.IndexOf("^"); ||info.enDesc = info.Desc.Substring(0, index); ||info.chDesc = info.Desc.Substring(index + 1, len - index - 1); */ #endregion #region Code info = new AnlyInformation(); info.devidInfo = new DevidTriAnlyInfo(); info.devidInfo.Desc = ""; info.ratio = new Ratio(); info.threevar = new ThreeValue(); info.threevar.Desc = ""; info.chDesc = ""; info.enDesc = ""; info.Desc = ""; //----------立体图示法(每一个比值的范围 0-10,10代表无穷大,参考GB/T 7252-2001 附录E) info.ratio.C2H2_C2H4 = info.ratio.C2H4_C2H6 = info.ratio.CH4_H2 = -1.0m; //-1.0代表无法计算判断 bool canCalc = true; if ((Math.Abs(C2H4) < MIN && Math.Abs(C2H2) < MIN) || (Math.Abs(C2H6) < MIN && Math.Abs(C2H4) < MIN) || (Math.Abs(H2) < MIN && Math.Abs(CH4) < MIN)) // 0.0/0.0 无意义 { canCalc = false; } if (canCalc) { if (Math.Abs(C2H4) >= MIN) //if(C2H4!=0) { info.ratio.C2H2_C2H4 = C2H2 / C2H4; } else { info.ratio.C2H2_C2H4 = 10.0m; } if (info.ratio.C2H2_C2H4 > 10.0m) { info.ratio.C2H2_C2H4 = 10.0m; } if (Math.Abs(C2H6) >= MIN) //if(C2H6!=0) { info.ratio.C2H4_C2H6 = C2H4 / C2H6; } else { info.ratio.C2H4_C2H6 = 10.0m; } if (info.ratio.C2H4_C2H6 > 10.0m) { info.ratio.C2H4_C2H6 = 10.0m; } if (Math.Abs(H2) >= MIN) //if(C2H6!=0) { info.ratio.CH4_H2 = CH4 / H2; } else { info.ratio.CH4_H2 = 10.0m; } if (info.ratio.CH4_H2 > 10.0m) { info.ratio.CH4_H2 = 10.0m; } } //----------三比值法 //根据各气体浓度值编码 int[] a = new int[3]; a[0] = a[1] = a[2] = -1; //-1表示相应比值无效或无意义 canCalc = true; if ((Math.Abs(C2H2) < MIN && Math.Abs(C2H4) < MIN) || (Math.Abs(CH4) < MIN && Math.Abs(H2) < MIN) || (Math.Abs(C2H4) < MIN && Math.Abs(C2H6) < MIN)) // 0.0/0.0 无意义 { canCalc = false; } if (canCalc) { if (Math.Abs(C2H4) < MIN || Math.Abs(C2H2 / C2H4) > 2.0m) //c2h4==0 { // a[0] = 2; } else { if (C2H2 / C2H4 < 0.1m) { a[0] = 0; } if (C2H2 / C2H4 >= 0.1m && C2H2 / C2H4 <= 1.0m) { a[0] = 1; } if (C2H2 / C2H4 > 1.0m && C2H2 / C2H4 <= 2.0m) { a[0] = 2; } } if (Math.Abs(H2) < MIN || Math.Abs(CH4 / H2) > 2.0m) //H2==0 { // a[1] = 2; } else { if (CH4 / H2 < 0.1m) { a[1] = 0; } if (CH4 / H2 < 1.0m && CH4 / H2 >= 0.1m) { a[1] = 1; } if (CH4 / H2 >= 1.0m) { a[1] = 2; } } if (Math.Abs(C2H6) < MIN || Math.Abs(C2H4 / C2H6) > 2.0m) //C2H6==0 { // a[2] = 2; } else { if (C2H4 / C2H6 < 0.1m) { a[2] = 0; } if (C2H4 / C2H6 < 1.0m && C2H4 / C2H6 >= 0.1m) { a[2] = 1; } if (C2H4 / C2H6 >= 1.0m && C2H4 / C2H6 <= 2.0m) { a[2] = 2; } } } info.threevar.Var1 = a[0]; info.threevar.Var2 = a[1]; info.threevar.Var3 = a[2]; //----------图形三比值法 decimal Percent_C2H2 = -1.0m, Percent_C2H4 = -1.0m, Percent_CH4 = -1.0m; //-1表示无法计算判断 if (Math.Abs((C2H2 + C2H4 + CH4)) > MIN && Math.Abs(C2H2) > MIN && Math.Abs(C2H4) > MIN && Math.Abs(CH4) > MIN) { Percent_C2H2 = C2H2 / (C2H2 + C2H4 + CH4); Percent_C2H4 = C2H4 / (C2H2 + C2H4 + CH4); Percent_CH4 = CH4 / (C2H2 + C2H4 + CH4); } info.devidInfo.percent_C2H2 = Percent_C2H2; info.devidInfo.percent_C2H4 = Percent_C2H4; info.devidInfo.percent_CH4 = Percent_CH4; string desc = ""; //----------三比值法 判断故障类型 if (a[0] >= 0 && a[1] >= 0 && a[2] >= 0) //比值有效时诊断 { if (0 == a[0] && 0 == a[1] && 1 == a[2]) { desc = ANLYINFO_T1; } else if (0 == a[0] && 2 == a[1] && 0 == a[2]) { desc = ANLYINFO_T2; } else if (0 == a[0] && 2 == a[1] && 1 == a[2]) { desc = ANLYINFO_T3; } else if (0 == a[0] && 2 >= a[1] && 0 <= a[1] && 2 == a[2]) { desc = ANLYINFO_T4; } else if (0 == a[0] && 1 == a[1] && 0 == a[2]) { desc = ANLYINFO_PD; } else if (1 == a[0] && 1 >= a[1] && 0 <= a[1] && 2 >= a[2] && 0 <= a[2]) { desc = ANLYINFO_LD; } else if (1 == a[0] && 2 == a[1] && 2 >= a[2] && 0 <= a[2]) { desc = ANLYINFO_DT; } else if (2 == a[0] && 1 >= a[1] && 0 <= a[1] && 2 >= a[2] && 0 <= a[2]) { desc = ANLYINFO_AD; } else if (2 == a[0] && 2 == a[1] && 0 <= a[2] && 2 >= a[2]) { desc = ANLYINFO_ADT; } } if (desc != "") { info.threevar.Desc = desc; } else { info.threevar.Desc = ANLYINFO_UNKNOWN; //未知故障 } //----------图形法 判断故障类型 desc = ""; if (Percent_C2H2 >= 0.0m && Percent_C2H4 >= 0.0m && Percent_CH4 >= 0.0m) //计算结果有效时诊断 { if (Percent_CH4 > 0.98m) { desc = ANLYINFO_PD; } if (Percent_C2H2 > 0.13m && Percent_C2H4 < 0.23m) { desc = ANLYINFO_LD; } if (Percent_C2H4 > 0.23m && Percent_C2H2 > 0.13m && Percent_C2H2 > 0.29m && Percent_C2H4 > 0.23m && Percent_C2H4 > 0.38m) { desc = ANLYINFO_HD; } if (Percent_C2H2 < 0.04m && Percent_C2H4 < 0.10m) { desc = ANLYINFO_T2A; //低温过热,小于300° } if (Percent_C2H2 < 0.04m && Percent_C2H4 > 0.10m && Percent_C2H4 < 0.50m) { desc = ANLYINFO_T3; //热故障,300°~ 700° } if (Percent_C2H2 < 0.15m && C2H4 > 0.50m) { desc = ANLYINFO_T4; //热故障,> 700℃ } } if (desc != "") { info.devidInfo.Desc = desc; } else { info.devidInfo.Desc = ANLYINFO_UNKNOWN; //未知故障 } //---最终故障结论 if (info.threevar.Desc != ANLYINFO_UNKNOWN) { info.Desc = info.threevar.Desc; //优先采用三比值判断结果 } else if (info.devidInfo.Desc != ANLYINFO_UNKNOWN) { info.Desc = info.devidInfo.Desc; //三比值不能判断时,用图形法判断结果 } if (info.Desc == "") { info.Desc = ANLYINFO_UNKNOWN; //无故障结果(无法判断) } int len = info.Desc.Length; int index = info.Desc.IndexOf("^"); info.enDesc = info.Desc.Substring(0, index); info.chDesc = info.Desc.Substring(index + 1, len - index - 1); #endregion }