/// <summary> /// 开始按钮,从原始资料中取出时间段的数据包数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StartBtn_Click(object sender, EventArgs e) { if (StrStart.Equals(StartBtn.Text)) { //获取设置的年月日,并判断其是否符合条件 int syear, smonth, sday, eyear, emonth, eday, shour, sminute, ehour, eminute; //tag的ID或名称 string strtaginfor = TrackTagText.Text.ToUpper().Trim(); if ("".Equals(strtaginfor)) { MessageBox.Show("軌跡分析的Tag信息不能為空!"); return; } Tag tag_name = CommonBoxOperation.GetTagFromName(strtaginfor); if (null != tag_name) { strtaginfor = tag_name.ID[0].ToString("X2") + tag_name.ID[1].ToString("X2"); } DateTime StartDT, EndDT; StartDT = StartDTPicker.Value; EndDT = EndDTPicker.Value; syear = StartDT.Year; smonth = StartDT.Month; sday = StartDT.Day; eyear = EndDT.Year; emonth = EndDT.Month; eday = EndDT.Day; try { shour = Convert.ToInt32(sHourCb.Text); sminute = Convert.ToInt32(sMinitueCb.Text); ehour = Convert.ToInt32(eHourCB.Text); eminute = Convert.ToInt32(eMinitueCB.Text); } catch (Exception) { MessageBox.Show("對不起,設置的開始時間或結束時間有誤!"); return; } //获取开始时间和结束时间 StartDT = new DateTime(syear, smonth, sday, shour, sminute, 0); EndDT = new DateTime(eyear, emonth, eday, ehour, eminute, 59); //小于零t1早于t2 if (DateTime.Compare(StartDT, EndDT) > 0) { MessageBox.Show("結束日期時間應該在開始日期時間之後!"); return; } //取出原始记录信息 string strrecorddir = Environment.CurrentDirectory + @"\Record"; if (!Directory.Exists(strrecorddir)) { MessageBox.Show("對不起,沒有任何記錄!"); return; } string[] StrDirs = FileOperation.GetAllDirName(strrecorddir); if (null == StrDirs || StrDirs.Length <= 0) { MessageBox.Show("對不起,沒有任何記錄!"); return; } if (null != DrawIMG.Frm && DrawIMG.Frm.MyUdpClient != null) { MessageBox.Show("對不起,查詢歷史軌跡時需要關閉網絡連接!"); return; } string strdirname = "", strcuryear = "", strcurmonth = "", strcurday = "", strcurhour = ""; int index = -1, curyear = -1, curmonth = -1, curday = -1, curhour = -1; DateTime curdt; PickerTagsList.Clear(); //判断年月日是否符合条件 foreach (string dir in StrDirs) { index = dir.LastIndexOf("\\"); strdirname = dir.Substring(index + 1, 8); strcuryear = strdirname.Substring(0, 4); strcurmonth = strdirname.Substring(4, 2); strcurday = strdirname.Substring(6, 2); try { curyear = Convert.ToInt32(strcuryear); curmonth = Convert.ToInt32(strcurmonth); curday = Convert.ToInt32(strcurday); } catch (Exception) { continue; } //文件创建的时间 curdt = new DateTime(curyear, curmonth, curday); DateTime startdt = new DateTime(StartDT.Year, StartDT.Month, StartDT.Day); DateTime enddt = new DateTime(EndDT.Year, EndDT.Month, EndDT.Day); //判断文件创建时间是否在指定的范围内 if (DateTime.Compare(curdt, startdt) < 0 || DateTime.Compare(curdt, enddt) > 0) { continue; } //获取到当前时间的小时部分 try { string[] StrFiles = Directory.GetFiles(dir); foreach (string str in StrFiles) { strcurhour = str.Substring(str.LastIndexOf("\\") + 1, 2); try { curhour = Convert.ToInt32(strcurhour); } catch (Exception) { continue; } //此时判断小时是否满足要求 curdt = new DateTime(curdt.Year, curdt.Month, curdt.Day, curhour, 0, 0); startdt = new DateTime(startdt.Year, startdt.Month, startdt.Day, shour, 0, 0); enddt = new DateTime(enddt.Year, enddt.Month, enddt.Day, ehour, 0, 0); if (DateTime.Compare(curdt, startdt) < 0 || DateTime.Compare(curdt, enddt) > 0) { continue; } //记录年月日时都满足要求 startdt = new DateTime(startdt.Year, startdt.Month, startdt.Day, startdt.Hour, sminute, 0); enddt = new DateTime(enddt.Year, enddt.Month, enddt.Day, enddt.Hour, eminute, 0); RecordOperation.GetRecord(startdt, enddt, strtaginfor, str, ref PickerTagsList); } } catch (System.IO.IOException) { MessageBox.Show("對不起,文件流已经被占用。請先關閉連接監控..."); } catch (Exception ex) { FileOperation.WriteLog("获取原始记录时出现异常,异常异常原因:" + ex.ToString()); } } List <TagPack> deletagpacks = new List <TagPack>(); TagPack temptpk = null; //清除掉两个序列号相同的Tag数据包 for (int i = 0; i < PickerTagsList.Count; i++) { if (i + 1 < PickerTagsList.Count) { if (PickerTagsList[i].index == PickerTagsList[i + 1].index) { if (PickerTagsList[i].SigStren < PickerTagsList[i + 1].SigStren) {//交换位置 temptpk = CommonBoxOperation.CloneTagPack(PickerTagsList[i]); PickerTagsList[i] = PickerTagsList[i + 1]; PickerTagsList[i + 1] = temptpk; } deletagpacks.Add(PickerTagsList[i]); } } } foreach (TagPack deletp in deletagpacks) { PickerTagsList.Remove(deletp); } //此时所有符合添加的数据包都添加到PickerTags集合中处了 TrackListBX.Items.Clear(); foreach (TagPack tpk in PickerTagsList) { TrackListBX.Items.Add( tpk.ReportTime + " TagID:" + tpk.TD[0].ToString("X2") + tpk.TD[1].ToString("X2") + " RouterID:" + tpk.RD_New[0].ToString("X2") + tpk.RD_New[1].ToString("X2") + " 是否警報:" + (tpk.isAlarm == 0x04 ? "yes" : "no") + " 信號強度:" + tpk.SigStren.ToString() + " 電量:" + tpk.Bat.ToString() + " 休眠時間:" + (tpk.Sleep / 10).ToString() + " 未移動時間:" + tpk.ResTime.ToString() + " 序列號:" + tpk.index.ToString()); } recordnumlabel.Text = "總記錄數為:" + PickerTagsList.Count; if (PickerTagsList.Count <= 0) { MessageBox.Show("該Tag的原始資料不存在!"); return; } //图形模式画图地图 StartDTe = new DateTime(StartDT.Year, StartDT.Month, StartDT.Day, StartDT.Hour, StartDT.Minute, StartDT.Second); EndDTe = new DateTime(EndDT.Year, EndDT.Month, EndDT.Day, EndDT.Hour, EndDT.Minute, EndDT.Second); Start(); } else { Stop(); recordnumlabel.Text = "總記錄數為:0"; return; } }