123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- using DevExpress.Utils;
- using DevExpress.XtraCharts;
- using FocasCncCollect.Core;
- using FocasCncCollect.ICore;
- using FocasCncCollect.Models;
- using FocasCncCollect.Models.Enum;
- using SiwiFms.Helper;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- namespace FocasCncCollect.UControl
- {
- public partial class UcCncMoniter : DevExpress.XtraEditors.XtraUserControl
- {
- private ILogEquipmentMsg iLogEquipmentMsg = new LogEquipmentMsg();
- private ILogCncWarn iLogCncWarn = new LogCncWarn();
- private EQUIPMENT_INFO cnc;
- private LOG_EQUIPMENT_MSG_TEMP logTemp = null;
- /// <summary>
- /// 简单数据刷新
- /// </summary>
- private Thread SimpleDataRefreshThread;
- /// <summary>
- /// 图标刷新
- /// </summary>
- private Thread ChartRefreshThread;
- /// <summary>
- /// 日志刷新
- /// </summary>
- private Thread WarnLogRefreshThread;
- public UcCncMoniter()
- {
- InitializeComponent();
- }
- /// <summary>
- /// 加载数据
- /// </summary>
- /// <param name="cnc"></param>
- public UcCncMoniter(EQUIPMENT_INFO cnc)
- {
- InitializeComponent();
- this.cnc = cnc;
- logTemp = FrmEquipmentMonitor.tempList.Find(t => t.EQUIPMENT_NO == cnc.EQUIPMENT_NO);
- SimpleDataRefreshThread = new Thread(new ThreadStart(RefreshSimpleHandle));
- ChartRefreshThread = new Thread(new ThreadStart(ChartRefreshHandle));
- WarnLogRefreshThread = new Thread(new ThreadStart(WarnLogRefresh));
- }
- private void UcCncMoniter_Load(object sender, EventArgs e)
- {
- SimpleDataRefreshThread.Start();
- ChartRefreshThread.Start();
- WarnLogRefreshThread.Start();
- if (cnc.EQUIPMENT_NO == 1)
- {
- Console.WriteLine("");
- }
- RefreshSimpleData();
- RefreshChart();
- }
- /// <summary>
- /// 刷新数据
- /// </summary>
- /// <param name="cnc"></param>
- internal void RefreshData(EQUIPMENT_INFO cnc)
- {
- logTemp = FrmEquipmentMonitor.tempList.Find(t => t.EQUIPMENT_NO == cnc.EQUIPMENT_NO);
- this.cnc = cnc;
- RefreshSimpleData();
- RefreshChart();
- }
- private void ChartRefreshHandle()
- {
- while (true)
- {
- try
- {
- RefreshChart();
- }
- catch (Exception ex) { }
- Thread.Sleep(10000);
- }
- }
- private void WarnLogRefresh()
- {
- while (true)
- {
- try
- {
- RefreshWarnLog();
- }
- catch (Exception ex) { }
- Thread.Sleep(10000);
- }
- }
- /// <summary>
- /// 刷新报警数据
- /// </summary>
- private void RefreshWarnLog()
- {
- DateTime startDate = DateTime.Now.AddDays(-7);
- List<LOG_CNC_WARN> warnList = iLogCncWarn.GetList(t => t.EQUIPMENT_NO == cnc.EQUIPMENT_NO && t.EQUIPMENT_NAME == cnc.EQUIPMENT_NAME && t.WARN_TIME > startDate).OrderByDescending(t => t.WARN_TIME).ToList();
- int focusRow = gv_warnLog.FocusedRowHandle;
- if (this.InvokeRequired)
- {
- bool refreshFlag = false;
- this.BeginInvoke(new Action(() =>
- {
- gc_warnLog.DataSource = warnList;
- gv_warnLog.BestFitColumns();
- gv_warnLog.FocusedRowHandle = focusRow;
- refreshFlag = true;
- }));
- while (!refreshFlag)
- {
- Thread.Sleep(1);
- }
- }
- else
- {
- gc_warnLog.DataSource = warnList;
- gv_warnLog.BestFitColumns();
- gv_warnLog.FocusedRowHandle = focusRow;
- }
- }
- /// <summary>
- /// 刷新图表
- /// </summary>
- private void RefreshChart()
- {
- //查询当天采集数据
- List<LOG_EQUIPMENT_MSG> logList = new List<LOG_EQUIPMENT_MSG>();
- try
- {
- logList = iLogEquipmentMsg.GetList(t => t.EQUIPMENT_NO == cnc.EQUIPMENT_NO);
- logList.ForEach(t =>
- {
- if (t.WARN_STATUS == WarnStatus.Warn && t.ON_OFF_STATUS == OnOff.On)
- {
- t.EQUIPMENT_STATUS = EquipmentStatus.Warn;
- }
- t.STR_EQUIPMENT_STATUS = EnumUtil.GetDescription(t.EQUIPMENT_STATUS);
- t.STR_PROC_STATUS = EnumUtil.GetDescription(t.PROC_STATUS);
- });
- }
- catch (Exception ex)
- {
-
- }
- //var list1 = (from p in logList
- // group p by new
- // {
- // p.STR_EQUIPMENT_STATUS
- // } into g
- // select new ChartView1()
- // {
- // count = g.Count(),
- // status = g.Max(t => t.STR_EQUIPMENT_STATUS),
- // }).ToList();
- //Series s1 = new Series("运行状态", ViewType.NestedDoughnut);
- //s1.ValueDataMembers[0] = "count";
- //s1.DataSource = list1;
- //s1.ArgumentDataMember = "status";
- //s1.LabelsVisibility = DefaultBoolean.False;
- //添加机床运行状态饼状图
- var list1 = (from p in logList
- group p by new
- {
- p.STR_EQUIPMENT_STATUS
- } into g
- select new ChartView1()
- {
- count = g.Count(),
- status = g.Max(t => t.STR_EQUIPMENT_STATUS),
- }).ToList();
- Series s1 = chart_main.Series.FirstOrDefault(t => t.Name == "运行状态") as Series;
- if (s1 == null)
- {
- s1 = new Series("运行状态", ViewType.Doughnut);
- s1.ValueDataMembers[0] = "count";
- s1.DataSource = list1;
- s1.ArgumentDataMember = "status";
- s1.LabelsVisibility = DefaultBoolean.False;
- }
- //添加饼状图名
- //DoughnutSeriesView doughnutSeriesView3 = new DoughnutSeriesView();
- //SeriesTitle seriesTitle3 = new SeriesTitle();
- //seriesTitle3.Text = "运行状态";
- //doughnutSeriesView3.Titles.AddRange(new SeriesTitle[] {
- //seriesTitle3});
- //s1.View = doughnutSeriesView3;
- //添加机床加工状态饼状图
- //var list2 = (from p in logList
- // group p by new
- // {
- // p.STR_PROC_STATUS
- // } into g
- // select new ChartView2()
- // {
- // count = g.Count(),
- // status = g.Max(t => t.STR_PROC_STATUS),
- // }).ToList();
- //Series s2 = new Series("加工状态", ViewType.Doughnut);
- //s2.ValueDataMembers[0] = "count";
- //s2.ArgumentDataMember = "status";
- //s2.DataSource = list2;
- //s2.LabelsVisibility = DefaultBoolean.False;
- //添加饼状图名
- //DoughnutSeriesView doughnutSeriesView4 = new DoughnutSeriesView();
- //SeriesTitle seriesTitle4 = new SeriesTitle();
- //seriesTitle4.Text = "加工状态";
- //doughnutSeriesView4.Titles.AddRange(new SeriesTitle[] {
- //seriesTitle4});
- //s2.View = doughnutSeriesView4;
- if (this.InvokeRequired)
- {
- bool refreshFlag = false;
- this.BeginInvoke(new Action(() =>
- {
- try
- {
- if (chart_main.Series.FirstOrDefault(t => t.Name == "运行状态") == null)
- {
- chart_main.Series.Add(s1);
- chart_main.SeriesTemplate.View = new PieSeriesView();
- foreach (Series sr in chart_main.Series)
- {
- sr.LegendTextPattern = "{A} {VP:0.00%}";
- }
- }
- else
- {
- s1.DataSource = list1;
- }
- }
- catch { }
- finally
- {
- refreshFlag = true;
- }
- }));
- while (!refreshFlag)
- {
- Thread.Sleep(1);
- }
- }
- else
- {
- if (chart_main.Series.FirstOrDefault(t => t.Name == "运行状态") == null)
- {
- chart_main.Series.Add(s1);
- chart_main.SeriesTemplate.View = new PieSeriesView();
- foreach (Series sr in chart_main.Series)
- {
- sr.LegendTextPattern = "{A} {VP:0.00%}";
- }
- }
- else
- {
- s1.DataSource = list1;
- }
- }
- }
- private void RefreshSimpleHandle()
- {
- while (true)
- {
- try
- {
- RefreshSimpleData();
- }
- catch (Exception ex)
- {
- }
- Thread.Sleep(100);
- }
- }
- /// <summary>
- /// 刷新简单数据
- /// </summary>
- private void RefreshSimpleData()
- {
- if (this.InvokeRequired)
- {
- this.Invoke(new Action(() => { try { RefreshSimpleDataTemp(); } catch { } }));
- }
- else
- {
- RefreshSimpleDataTemp();
- }
- }
- private void RefreshSimpleDataTemp()
- {
- groupControl1.Text = string.Format("{0}-{1}", cnc.EQUIPMENT_NO, cnc.EQUIPMENT_NAME);
- if (logTemp == null) logTemp = new LOG_EQUIPMENT_MSG_TEMP() { AXLE_LOAD = "0" };
- txt_runStatus.Text = EnumUtil.GetDescription(logTemp.EQUIPMENT_STATUS);
- this.Enabled = txt_runStatus.Text != "关机";
- txt_warnCode.Text = logTemp.ERR_CODE;
- txt_EStopStatus.Text = logTemp.ESTOP_STATUS == 1 ? "急停中" : "正常";
- if (logTemp.EQUIPMENT_STATUS == EquipmentStatus.Running)//cnc.LAST_START_TIME != null &&
- {
- //txt_partNo.Text = cnc.CURRENT_PART;
- //加工时间 转化为易读的时间格式
- // txt_procTime.Text = DateTimeHelper.GetDiffTime(cnc.LAST_START_TIME.Value, DateTime.Now);
- }
- else
- {
- txt_partNo.Text = "";
- txt_procTime.Text = "";
- }
- ts_doorStatus.IsOn = logTemp.DOOR_STATUS == OnOff.On;
- //主轴转速
- dtg_mainSpeed.Text = logTemp.AXLE_SPEED.ToString();
- //主轴负载
- dtg_mainLoad.Text = logTemp.AXLE_LOAD;
- //进给速度
- dtg_feedSpeed.Text = logTemp.FEED_SPEED.ToString();
- //进给倍率
- //dtg_feedPower.Text = cnc.COLLECT_DATA.FEED_QUANTITY.ToString();
- dtg_feedPower.Text = cnc.STOP_NUMBER.ToString();
- //主轴坐标
- if (logTemp.AXLE_COORDINATE != null)
- {
- List<string> coordinateList = logTemp.AXLE_COORDINATE.Split(';').ToList();
- foreach (var item in coordinateList)
- {
- var temp = item.Split(':');
- string nate = temp[0].Trim();
- string value = "0";
- if (temp.Length > 1)
- {
- value = temp[1].Trim();
- if (value.Length > 6)
- {
- value = value.Substring(0, 6);
- }
- }
- switch (nate)
- {
- case "U":
- case "X":
- {
- labelControl9.Text = nate;
- dtg_Addr_X.Text = value;
- break;
- }
- case "W":
- case "Y":
- {
- labelControl8.Text = nate;
- dtg_Addr_Y.Text = value;
- break;
- }
- case "H":
- case "Z":
- {
- labelControl10.Text = nate;
- dtg_Addr_Z.Text = value;
- break;
- }
- //U: 88.808; W: 5.012; H: 0
- }
- }
- }
- }
- public void CloseThread()
- {
- try
- {
- SimpleDataRefreshThread.Abort();
- }
- catch (Exception ex) { }
- try
- {
- ChartRefreshThread.Abort();
- }
- catch (Exception ex) { }
- try
- {
- WarnLogRefreshThread.Abort();
- }
- catch (Exception ex) { }
- }
- }
- /// <summary>
- ///
- /// </summary>
- public class ChartView1
- {
- public int count { get; set; }
- public string status { get; set; }
- }
- public class ChartView2
- {
- public int count { get; set; }
- public string status { get; set; }
- }
- }
|